支援デバイスVer6コード
# ODEKAKE Beacon 2018ver4 from microbit import * #import microbit import music import radio import os display.scroll('RadV6') radio.config(channel=10, power=5, length =64)#BLE init length radio.on()#BLE ON btnChk = False myID = 1 grCount = 1 grChk = False oneTime = False missing = False timerA = 0 timerB = 0 config = '0,0'#myID,grCount, tune1 = ["D4:1"] tune2 = ["E4:1"] tune3 = ["F4:1"] timB = 30000 interval = 3000#change to 1sec Feb.16 #IDlist = [] #IDlist2 = [] idDic = {}#ID + time dictionary #File read if 'config.txt' in os.listdir(): with open('config.txt') as my_config: conftxt = my_config.read() conf = conftxt.split(',')#split by commma to list myID = int(conf[0])#myID read and set grCount = int(conf[1])#my grCount read and set while True: if button_a.is_pressed() and button_b.is_pressed(): ##setingMode if btnChk is False: btnChk = True display.scroll('SET') display.scroll('ID=' + str(myID)) elif btnChk is True: btnChk = False #end set mode shakeChk = False #end shake mode display.show(Image.YES) elif button_a.is_pressed(): if btnChk is True and grChk is False:#ID count mode if myID < 20: myID += 1 else: myID = 0 display.scroll('ID=' + str(myID) ,delay = 80) #sleep(200) #display.clear() elif btnChk is False and grChk is True:#group count mode if grCount < 20: grCount += 1 else: grCount = 0 display.scroll('GR=' + str(grCount) ,delay = 80) else:#normal mode if(idDic): mList2 = []#initialize and clear for k, v in idDic.items(): sabun2 = timA - v if sabun2 < 10000:#if 20sec no access mList2.append(k) nagasa = int(len(mList2)) + 1#own ID add display.scroll(str(nagasa), delay = 80) if nagasa == int(grCount): display.scroll('OK!', delay = 80) missing = False elif nagasa < int(grCount): display.show(Image.SAD) else: display.scroll('??', delay = 100) ##music.play(tune2) radio.send(str(myID) + ',' + str(grCount) + ',nohelp,noset') else: display.show(Image.DUCK) sleep(500) display.clear() elif button_b.is_pressed(): if btnChk is False and grChk is False:#HELP SEND radio.config(power=7)#HelpMode radio.send(str(myID) + ',' + str(grCount) + ',HELP' + ',noset') radio.config(power=5)#HelpMode display.scroll('HELP') sleep(800) display.clear() elif btnChk is False and grChk is True:#end gr set mode btnChk = False #end set mode grChk = False #end shake mode radio.send(str(myID) + ',' + str(grCount) + ',nohelp' + ',set') display.show(Image.YES) sleep(500) display.clear() #File Save saveConfig = str(myID) + ',' + str(grCount) with open('config.txt', 'w') as my_conf:#save list my_conf my_conf.write(saveConfig) #with open('gr.txt', 'w') as gr_id: # gr_id.write(str(grCount)) elif btnChk is True and grChk is False:#end id set mode btnChk = False grChk = True#to Group set mode display.show(Image.YES) sleep(500) display.clear() display.scroll('GR=' + str(grCount)) #else: #display.scroll('') #radio message 'myID,grCount,HELP' try: s = radio.receive() if(s): sList = s.split(',')#split by , to list if sList[2] == 'HELP': display.scroll('!') music.play(music.BADDY) display.show(Image.SAD) sleep(3000) display.clear() elif btnChk is False and grChk is False: if sList[3] == 'set': grCount = sList[1] saveConfig = str(myID) + ',' + str(grCount) display.scroll('GR=' + str(grCount)) with open('config.txt', 'w') as gr_id: gr_id.write(saveConfig) #elif sList[2] == 'nohelp' and sList[3] == 'noset': else:#recieve ID check if(not myID == sList[0]):#without own device #time check nowTime = running_time() if(not idDic.get(sList[0])):#not in dictionary add ID and time updValue = {sList[0] : nowTime} idDic.update(updValue) #music.play(tune3) else: updValue = {sList[0]:nowTime} idDic.update(updValue) except ValueError:#PacketError display.show(Image.DUCK) radio.reset() sleep(200) radio.config(channel=10, power=5, length =64) display.clear() #send Beacon interval time timA = running_time() if timA > timB: #del IDlist[:]#initialaize list if btnChk is False and grChk is False: radio.send(str(myID) + ',' + str(grCount) + ',nohelp,noset') #display.scroll(str(timA)) timB = timA + interval #display.show(Image.PITCHFORK) #sleep(100) #display.clear() #music.play(tune1) if(idDic): mList = []#initialize and clear #mList.clear()#need()? for k, v in idDic.items(): sabun2 = timA - v if sabun2 > 200000:#200sec mList.append(k) if(mList): ids = '' for t in mList: ids += t + '_' #display.scroll('ID=' + ids + 'missing', delay = 200) if missing is False: music.play(music.POWER_DOWN) missing = True display.scroll('ID' + ids + 'missing') sleep(5000) #sleep(100)