Picot チュートリアル21

■プログラム合成

すでに作成したロボット操縦プログラムにOLED表示のプログラムを入れ込みます。oled関連は別ファイルとしています。

リスト21-1 robot_face.py(部分)

from machine import Pin, PWM, Timer
import time
import remote
import motion
import oled

# ***** 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.line(32, 60, 96, 60, 1) #口
oled.display.show()

# ***** Action ***** ここから操縦プログラム
STOP = 0

リスト21-2 oled.py

from machine import Pin, I2C
import ssd1306

# using default address 0x3C
i2c = I2C(0, sda = Pin(16), scl = Pin(17), freq = 400000)
display = ssd1306.SSD1306_I2C(128, 64, i2c)

def draw_circle(x, y, rad):
    cx = rad
    cy = 0
    d= -2 * rad + 3
    while cx >= cy:
        display.pixel(x+cx, y+cy, 1)
        display.pixel(x-cx, y+cy, 1)
        display.pixel(x+cx, y-cy, 1)
        display.pixel(x-cx, y-cy, 1)
        display.pixel(x+cy, y+cx, 1)
        display.pixel(x-cy, y+cx, 1)
        display.pixel(x+cy, y-cx, 1)
        display.pixel(x-cy, y-cx, 1)
        if d >= 0:
            cx = cx - 1
            d = d - 4 * cx
        cy = cy + 1
        d = d + 4 * cy + 2
        
def constrain(val, min_val, max_val):
    return min(max_val, max(min_val, val))
    
def fill_circle(x, y, rad, w):
    cx = rad
    cy = 0
    d = -2 * rad + 3
    while cx >= cy:
        display.line(constrain(cy + x, 0, 127), cx + y, constrain(-cy + x, 0, 127), cx + y, w)
        display.line(constrain(cx + x, 0, 127), cy + y, constrain(-cx + x, 0, 127), cy + y, w)
        display.line(constrain(-cy + x, 0, 127), -cx + y, constrain(cy + x, 0, 127), -cx + y, w)
        display.line(constrain(-cx + x, 0, 127), -cy + y, constrain(cx + x, 0, 127), -cy + y, w)
        if d >= 0:
            cx = cx - 1
            d = d - 4*cx
        cy = cy + 1
        d = d + (4 * cy + 2)

Picot チュートリアル インデックス >>
Picot チュートリアル 21 アニメーション >>

コメント

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