■情報を表示
現在口のラインを引いているところに動作モードを文字で表示します。
リスト23-1 robot_info.py(部分)
# ***** Face *****
oled.draw_circle(32, 22, 20)
oled.fill_circle(32, 22, 12, 1)
oled.draw_circle(96, 22, 20)
oled.fill_circle(96, 22, 12, 1)
oled.display.text('STOP', 46, 56, 1)
oled.display.show()
def set_action(code):
# ***** 省略 *****
next_key_frame = 1
oled.display.fill_rect(46, 56, 78, 64, 0)
oled.display.text(action_mode, 46, 56, 1)
oled.display.show()
リモコンからデータを正しく受信した場合、描かれている文字を消去(矩形に黒く塗る)してから新しい「acction_mode」を描きます。プログラムの最初のほうで顔を描いている部分は、ラインの描画をやめて「STOP」の文字を描くように変更しています。
■バッテリー電圧を表示
Raspberry Pi Picoでは、外部電圧入力の端子(VSYS)がAD変換入力端子(GPIO29)に接続されていますので、そのままでバッテリーの電圧を監視することができます。
AD変換を使うためにmachine.ADCをインポートし、batという名称で29番端子を設定します。
今回は、リモコンのTESTボタンで動作モードと同じ位置にAD変換の結果の値を表示することにします。whileループの中のリモコン受信結果の場合分けのところにCボタン(data_code == 88)を追加し、AD結果からバッテリーの電圧値を計算します。
電圧 = AD値 * 3.3V / 65535(16ビット) * 3
3を掛けているのはADへの入力が抵抗で1 / 3になっているためです。
表示は小数点一桁としています。USBケーブルをさしている場合は5V程度、バッテリー駆動の場合は3.7V程度が表示されます。
リスト23-2 robot_volt.py(部分)
from machine import Pin, PWM, Timer, I2C, ADC
# ***** 省略 *****
# ***** Face *****
bat = ADC(29)
# ***** 省略 *****
def set_action(code):
# ***** 省略 *****
elif code == 88:
volt = bat.read_u16() * 0.00005035477 * 3
div_counter = 0
key_frame = 0
next_key_frame = 1
oled.display.fill_rect(46, 56, 78, 64, 0)
if code == 88:
oled.display.text("{:.1f}".format(volt), 46, 56, 1)
else:
oled.display.text(action_mode, 46, 56, 1)
oled.display.show()
コメント