Picot チュートリアル20

用意されている基本関数を掲載しておきます。

display.poweroff()     # ディスプレイ消去 メモリに保存
display.poweron()      # ディスプレイ再描画
display.contrast(0)     # 暗い
display.contrast(255)  # 明るい
display.invert(1)       # 白黒反転(白抜き)
display.invert(0)       # 白黒反転(ノーマル)
display.show()          # バッファの内容を画面描画

基本的な図形描画関数です。

display.fill(0)                         # 黒く塗りつぶし
display.pixel(0, 10)                    # (0,10)座標の値(0 or 1)を得る
display.pixel(0, 10, 1)                # (0,10)座標に1をセット
display.hline(0, 8, 4, 1)              # (0,8)から幅4で水平線
display.vline(0, 8, 4, 1)              # (0,8)から幅4で垂直線
display.line(0, 0, 127, 63, 1)        # (0,0)-(127,63)に線分
display.rect(10, 10, 107, 43, 1)      # (10,10)-(107,43)に矩形描画
display.fill_rect(10, 10, 107, 43, 1) # (10,10)-(107,43)に矩形描画塗りつぶし
display.text('Hello World', 0, 0, 1) # (0,0)にテキスト描画
display.scroll(20, 0)                   # 20ピクセル右にスクロール

ライブラリに円を描く関数がありませんので追加しておきます。アルゴリズムについての説明はここでは省略します。「ミッチェナー、円、アルゴリズム」等で検索してみてください。

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): #円を塗りつぶす
    cx = rad
    cy = 0
    d = -2 * rad + 3
    while cx >= cy:
        display.line(constrain(x+cy,0,127), y+cx, constrain(x-cy,0,127), y+cx,1)
        display.line(constrain(x+cx,0,127), y+cy, constrain(x-cx,0,127), y+cy,1)
        display.line(constrain(x-cy,0,127), y-cx, constrain(x+cy,0,127), y-cx,1)
        display.line(constrain(x-cx,0,127), y-cy, constrain(x+cx,0,127), y-cy,1)
        if d >= 0:
            cx = cx - 1
            d = d - 4*cx
        cy = cy+1
        d = d + (4*cy+2)

それでは図形描画の関数を使ってロボットの顔を描いてみます。

リスト20-1 oled2.py(部分)

from machine import Pin, I2C
import ssd1306

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

def draw_circle(x,y,rad):
    # 省略

def constrain(val, min_val, max_val):
    return min(max_val, max(min_val, val))
    
def fill_circle(x,y,rad):
    # 省略

draw_circle(32, 22, 20)
fill_circle(32, 22, 12)
draw_circle(96, 22, 20)
fill_circle(96, 22, 12)
display.line(32, 60, 96, 60, 1)
display.show()

図20-1

これは例ですので、独自のキャラクターにしてみてください。

Picot チュートリアル インデックス >>
Picot チュートリアル 21 ロボットプログラムと合体 >>

コメント

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