from machine import I2C, Pin, ADC
from ssd1306 import SSD1306_I2C
from logo import logo
import time
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
oled.rotate(0)
oled.fill(0)
YaoGan_x = ADC(Pin(26))
YaoGan_y = ADC(Pin(27))
YaoGan_z = Pin(28, Pin.IN, Pin.PULL_UP)
JiZhunDian = 32768
FangDou = 3000
Pian_Tai = ""
AnYa_Tai = ""
# logo显示
def Logo_MoKuai():
oled.fill(0)
oled.blit(logo, 32, 0)
oled.show()
time.sleep(1)
# 摇杆姿态解析模块
def YaoGan_MoKuai():
global oled, YaoGan_x, YaoGan_y, YaoGan_z
while True:
Pian_Tai_x = ""
Pian_Tai_y = ""
Pian_Tai_z = ""
# 按压状态判断
Lin_Yi_z = YaoGan_z.value()
if Lin_Yi_z == 0:
Pian_Tai_z = "Z"
# 偏向状态判断
Lin_Yi_x = YaoGan_x.read_u16()
Lin_Yi_y = YaoGan_y.read_u16()
"""
# 打印初始X、Y值
print("X:", Lin_Yi_x, "Y:", Lin_Yi_y)
"""
Lin_Er_x = Lin_Yi_x - JiZhunDian
Lin_Er_y = Lin_Yi_y - JiZhunDian
"""
中 = C
上 = U
下 = D
左 = L
右 = R
"""
Pian_Tai_x = ""
Pian_Tai_y = ""
if abs(Lin_Er_x) > FangDou or abs(Lin_Er_y) > FangDou:
# 单项判断
if Lin_Er_x > FangDou:
Pian_Tai_x = "L"
# print("左")
elif Lin_Er_x < -FangDou:
Pian_Tai_x = "R"
# print("右")
if Lin_Er_y > FangDou:
Pian_Tai_y = "U"
# print("上")
elif Lin_Er_y < -FangDou:
Pian_Tai_y = "D"
# print("下")
# 多项判断
if Lin_Er_x and Lin_Er_y:
Lin_San_x_y = Pian_Tai_y + Pian_Tai_x
elif Lin_Er_x:
Lin_San_x_y = Pian_Tai_x
elif Lin_Er_y:
Lin_San_x_y = Pian_Tai_y
else:
Lin_San_x_y = "C"
# 局部变量转全局变量
Pian_Tai = Lin_San_x_y
AnYa_Tai = Pian_Tai_z
print(Pian_Tai)
print(AnYa_Tai)
time.sleep(0.01)
# 屏幕显示摇杆判断
oled.fill(0)
oled.text(Pian_Tai, 113, 54)
oled.show()
# 主循环
Logo_MoKuai()
YaoGan_MoKuai()