【マイクロビット応用】[6.1] プラモの飛行機のプロペラのプログラム:無線のチャンネル指定と双方向通信

マイクロビット

 以下の記事で作成したプログラムのソースコードを掲載します。(新しいタブで開きます。)

【マイクロビット応用】(6)プラモの飛行機のプロペラ(5)チャンネル指定、双方向通信

 マイクロビットを二つ使用します。片方は飛行機のプラモのプロペラを動かすのに使用します。もう一方は、リモコンとして使用します。

プロペラ側のプログラム

 最初は「プロペラ」のプログラムですよ。赤い部分が変更した箇所デ~ス。

  • 1行目 import radio
  • 2行目 import utime
  • 行目 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行目 
  • 行目 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’)

これまでのプログラムについて

 これまで作ってきたプログラムについては、こちらを見てね。(新しいタブで開きます。)

最初のバージョン

【マイクロビット応用】(2)プラモの飛行機のプロペラ(1)

【マイクロビット応用】(3)プラモの飛行機のプロペラ(2)

【マイクロビット応用】プラモの飛行機のプロペラのプログラム:最初のバージョン

回転が徐々に遅くなって止まるバージョン

【マイクロビット応用】(4)プラモの飛行機のプロペラ(3)回転が徐々に遅くなって止まるように改造

【マイクロビット応用】プラモの飛行機のプロペラのプログラム:回転が徐々に遅くなって止まるバージョン

無線バージョン

【マイクロビット応用】(5)プラモの飛行機のプロペラ(4)無線で操作できるように改造

【マイクロビット応用】プラモの飛行機のプロペラのプログラム:無線バージョン

コメント

タイトルとURLをコピーしました