from machine import Pin, I2C, ADC
from ssd1306 import SSD1306_I2C
import framebuf, sys
from math import sin, cos , pi
import time
v_joy = ADC(Pin(27))
h_joy = ADC(Pin(26))
pix_res_x = 128
pix_res_y = 64
def init_i2c(scl_pin, sda_pin):
# Initialize I2C device
i2c_dev = I2C(1, scl=Pin(scl_pin), sda=Pin(sda_pin), freq=200000)
i2c_addr = [hex(ii) for ii in i2c_dev.scan()]
if not i2c_addr:
print('No I2C Display Found')
sys.exit()
else:
print("I2C Address : {}".format(i2c_addr[0]))
print("I2C Configuration: {}".format(i2c_dev))
return i2c_dev
def display_logo(oled):
# Display the Raspberry Pi logo on the OLED
buffer = bytearray(b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|?\x00\x01\x86@\x80\x01\x01\x80\x80\x01\x11\x88\x80\x01\x05\xa0\x80\x00\x83\xc1\x00\x00C\xe3\x00\x00~\xfc\x00\x00L'\x00\x00\x9c\x11\x00\x00\xbf\xfd\x00\x00\xe1\x87\x00\x01\xc1\x83\x80\x02A\x82@\x02A\x82@\x02\xc1\xc2@\x02\xf6>\xc0\x01\xfc=\x80\x01\x18\x18\x80\x01\x88\x10\x80\x00\x8c!\x00\x00\x87\xf1\x00\x00\x7f\xf6\x00\x008\x1c\x00\x00\x0c \x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
fb = framebuf.FrameBuffer(buffer, 32, 32, framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fb, 90, 0)
oled.show()
def display_array_example():
buffer = bytearray(b"\xFF\x00\xff\x00\x00\x00\x00\xff")
fb = framebuf.FrameBuffer(buffer, 8, 8, framebuf.MONO_HLSB)
oled.blit(fb, 90, 0)
oled.show()
def display_text(oled):
# Display text on the OLED
oled.text("Raspberry Pi", 5, 5)
oled.text("Pico", 5, 15)
oled.show()
def display_sign(x,y):
oled.hline(x+5,y,5,1)
oled.hline(x+3,y+1,2,1)
oled.hline(x+10,y+1,2,1)
oled.hline(x+2,y+2,1,1)
oled.hline(x+11,y+2,2,1)
oled.vline(x+1,y+3,2,1)
oled.hline(x+5,y+3,2,1)
oled.hline(x+5,y+4,2,1)
oled.hline(x+11,y+3,2,1)
oled.hline(x+11,y+4,2,1)
oled.vline(x,y+5,5,1)
oled.vline(x+1,y+10,2,1)
oled.vline(x+2,y+11,2,1)
oled.hline(x+11,y+4,3,1)
oled.hline(x+11,y+5,4,1)
oled.hline(x+10,y+6,5,1)
oled.hline(x+9,y+7,6,1)
oled.hline(x+7,y+8,8,1)
oled.hline(x+6,y+9,2,1)
oled.hline(x+10,y+9,5,1)
oled.hline(x+5,y+10,3,1)
oled.hline(x+10,y+10,4,1)
oled.hline(x+5,y+11,9,1)
oled.hline(x+6,y+12,7,1)
oled.hline(x+3,y+13,2,1)
oled.hline(x+7,y+13,5,1)
oled.hline(x+5,y+14,5,1)
def kvadrat(x0,y0):
oled.rect(x0+0,y0+0,6,6,1)
oled.fill_rect(x0+2,y0+2,2,2,1)
def kyrsor(x0,y0):
oled.pixel(x0,y0,1)
oled.hline(x0 - 5, y0 , 4, 1)
oled.hline(x0 + 2, y0 , 4, 1)
oled.vline(x0, y0 - 5 , 4, 1)
oled.vline(x0, y0 + 2 , 4, 1)
def circle(x,y,r):
oled.pixel(x,y,1)
i = 0
while i <= 2*pi:
oled.pixel(int(r*cos(i))+x,int(r*sin(i))+y,1)
i = i+0.1
#-------------BEGIN-----------------------
i2c_dev = init_i2c(scl_pin=19, sda_pin=18)
oled = SSD1306_I2C(pix_res_x, pix_res_y, i2c_dev)
#oled.fill(0) # заполнить экран 0-чёрным 1- белым
#oled.invert(1)# инверсия экрана 1- включена 0- выключена
#oled.hline(5,63,64,1)# x - начала, y начала, длина линии, 1- обязательно для монохрома
#oled.vline(120,5,32,1)
#oled.rect(32,16,64,32,1)# координаты левого верхнего + ширина+ высота+ 1
#oled.fill_rect(35, 20, 30, 20, 1)
#
#oled.invert(0)
#oled.pixel(5,5,1)
#display_array_example()
#circle(64,32,10)
x0 = 64
y0 = 32
kyrsor(x0,y0)
oled.show()
while True:
time.sleep(0.1)
v_value = v_joy.read_u16()
h_value = h_joy.read_u16()
# print(v_value, h_value)
if v_value > 50000: y0 = y0 - 1
if v_value < 10000: y0 = y0 + 1
if h_value > 50000: x0 = x0 - 1
if h_value < 10000: x0 = x0 + 1
oled.fill(0)
kyrsor(x0,y0)
oled.show()