Picot チュートリアル23

■情報を表示

現在口のラインを引いているところに動作モードを文字で表示します。

リスト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)に接続されていますので、そのままでバッテリーの電圧を監視することができます。

図23-1

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()

Picot チュートリアル インデックス >>

コメント

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