以下の記事で作成したプログラムのソースコードを掲載します。(新しいタブで開きます。)
【マイクロビット応用】(6)プラモの飛行機のプロペラ(5)チャンネル指定、双方向通信
マイクロビットを二つ使用します。片方は飛行機のプラモのプロペラを動かすのに使用します。もう一方は、リモコンとして使用します。
プロペラ側のプログラム
最初は「プロペラ」のプログラムですよ。赤い部分が変更した箇所デ~ス。
- 1行目 import radio
- 2行目 import utime
- 3行目 from microbit import *
- 4行目
- 5行目 STATE_STOP = 0
- 6行目 STATE_CELL_MOTOR = 1
- 7行目 STATE_ENGINE = 2
- 8行目 STATE_STOPPING =3
- 9行目
- 10行目 RPM_STOP = 0
- 11行目 RPM_CELL = 70
- 12行目 RPM_ENGINE = 400
- 13行目 D_RPM = 100
- 14行目
- 15行目 SEND_TS = 10000
- 16行目
- 17行目 def UserInput():
- 18行目 data = radio.receive()
- 19行目 if data == ‘a’:
- 20行目 return ‘a’
- 21行目 if data == ‘b’:
- 22行目 return ‘b’
- 23行目 if button_a.get_presses():
- 24行目 return ‘a’
- 25行目 if button_b.get_presses():
- 26行目 return ‘b’
- 27行目 return ‘ ‘
- 28行目
- 29行目 def StateStop():
- 30行目 nextState = STATE_STOP
- 31行目 display.show(‘S’)
- 32行目 pin1.write_analog(RPM_STOP)
- 33行目 pin13.write_digital(0)
- 34行目 deadline = utime.ticks_ms()
- 35行目 while True:
- 36行目 data = UserInput()
- 37行目 if data == ‘a’:
- 38行目 nextState = STATE_CELL_MOTOR
- 39行目 break
- 40行目 if utime.ticks_diff(utime.ticks_ms(), deadline) > 0:
- 41行目 radio.send(“stp”)
- 42行目 deadline = utime.ticks_add(utime.ticks_ms(), SEND_TS)
- 43行目 return nextState
- 44行目
- 45行目 def StateCellMotor():
- 46行目 nextState = STATE_CELL_MOTOR
- 47行目 display.show(‘C’)
- 48行目 pin1.write_analog(RPM_CELL)
- 49行目 pin13.write_digital(1)
- 50行目 deadline = utime.ticks_ms()
- 51行目 while True:
- 52行目 data = UserInput()
- 53行目 if data == ‘a’:
- 54行目 nextState = STATE_ENGINE
- 55行目 break
- 56行目 if data == ‘b’:
- 57行目 nextState = STATE_STOP
- 58行目 break
- 59行目 if utime.ticks_diff(utime.ticks_ms(), deadline) > 0:
- 60行目 radio.send(“cel”)
- 61行目 deadline = utime.ticks_add(utime.ticks_ms(), SEND_TS)
- 62行目 return nextState
- 63行目
- 64行目 def StateEngine():
- 65行目 nextState = STATE_ENGINE
- 66行目 display.show(‘E’)
- 67行目 pin1.write_analog(RPM_ENGINE)
- 68行目 pin13.write_digital(1)
- 69行目 deadline = utime.ticks_ms()
- 70行目 while True:
- 71行目 data = UserInput()
- 72行目 if data == ‘b’:
- 73行目 nextState = STATE_STOPPING
- 74行目 break
- 75行目 if utime.ticks_diff(utime.ticks_ms(), deadline) > 0:
- 76行目 radio.send(“eng”)
- 77行目 deadline = utime.ticks_add(utime.ticks_ms(), SEND_TS)
- 78行目 return nextState
- 79行目
- 80行目 def StateStopping():
- 81行目 rpm = RPM_ENGINE
- 82行目 nextState = STATE_STOPPING
- 83行目 display.show(‘:’)
- 84行目 deadline = utime.ticks_ms()
- 85行目 while True:
- 86行目 data = UserInput()
- 87行目 rpm = rpm – D_RPM
- 88行目 if rpm <= RPM_CELL:
- 89行目 nextState = STATE_STOP
- 90行目 break
- 91行目 pin1.write_analog(rpm)
- 92行目 if utime.ticks_diff(utime.ticks_ms(), deadline) > 0:
- 93行目 radio.send(“spg”)
- 94行目 deadline = utime.ticks_add(utime.ticks_ms(), SEND_TS)
- 95行目 sleep(300)
- 96行目 return nextState
- 97行目
- 98行目 state = STATE_STOP
- 99行目
- 100行目 pin14.write_digital(1)
- 101行目 pin1.write_analog(RPM_STOP)
- 102行目 pin12.write_digital(0)
- 103行目
- 104行目 radio.config(channel=1)
- 105行目 radio.on()
- 106行目
- 107行目 while True:
- 108行目 if state == STATE_CELL_MOTOR:
- 109行目 state = StateCellMotor()
- 110行目 elif state == STATE_ENGINE:
- 111行目 state = StateEngine()
- 112行目 elif state == STATE_STOPPING:
- 113行目 state = StateStopping()
- 114行目 else:
- 115行目 state = StateStop()
リモコン側のプログラム
次は「リモコン」です。
- 1行目 import radio
- 2行目 from microbit import *
- 3行目
- 4行目 radio.config(channel=1)
- 5行目 radio.on()
- 6行目
- 7行目 while True:
- 8行目 ps = radio.receive()
- 9行目 if ps == “stp”:
- 10行目 display.show(‘S’)
- 11行目 if ps == “cel”:
- 12行目 display.show(‘C’)
- 13行目 if ps == “eng”:
- 14行目 display.show(‘E’)
- 15行目 if ps == “spg”:
- 16行目 display.show(‘:’)
- 17行目
- 18行目 if button_a.get_presses():
- 19行目 radio.send(‘a’)
- 20行目 if button_b.get_presses():
- 21行目 radio.send(‘b’)
これまでのプログラムについて
これまで作ってきたプログラムについては、こちらを見てね。(新しいタブで開きます。)
最初のバージョン
【マイクロビット応用】プラモの飛行機のプロペラのプログラム:最初のバージョン
回転が徐々に遅くなって止まるバージョン
【マイクロビット応用】(4)プラモの飛行機のプロペラ(3)回転が徐々に遅くなって止まるように改造
【マイクロビット応用】プラモの飛行機のプロペラのプログラム:回転が徐々に遅くなって止まるバージョン
無線バージョン
コメント