通过学习老师提供的代码例程,我将实现按钮信号获取,光强获取,点亮板载屏幕等任务
按钮信号获取与点亮板载屏幕:
ST7789接收主控设备传输过来的图像数据和指令,根据指令控制液晶显示屏上的像素点,实现图像的显示。它能够控制像素点的亮暗变化,从而呈现出彩色图像。通过调用官方的adafruit_st7789.py库,以及参考所给代码能够实现对屏幕的点亮。
import time import board import displayio import digitalio import terminalio from adafruit_display_text import label from adafruit_st7789 import ST7789 display = board.DISPLAY#初始化显示屏 #创建显示文本 splash =displayio.Group() display.root_group= splash text = "Hello World!" text_area = label.Label(terminalio.FONT, text=text, color=0xFF0000, x=20, y=20)#显示颜色及区域 text_group = displayio.Group(scale=4, x=-10, y=0)#放大比例及位置坐标偏移 text_group.append(text_area) splash.append(text_group) #定义按钮控制的引脚 button_pin1 = board.A0 button1 = digitalio.DigitalInOut(button_pin1) button1.switch_to_input(pull=digitalio.Pull.UP) button_pin2 = board.A1 button2 = digitalio.DigitalInOut(button_pin2) button2.switch_to_input(pull=digitalio.Pull.UP) debounce_delay = 0.5#延时时长 button1_pressed = False button2_pressed = False while True: if not button1.value and not button1_pressed: button1_pressed = True A = False time.sleep(debounce_delay) text_area.text = "A" elif button1.value: button1_pressed = False if not button2.value and not button2_pressed: button2_pressed = True B = False time.sleep(debounce_delay) # 消抖延迟 text_area.text = "B" # 重置第二个按键状态 elif button2.value: button2_pressed = False if not button1.value and not button2.value: button2_pressed = True time.sleep(debounce_delay) # 消抖延迟 text_area.text = "A and B" elif button1.value and button2.value: time.sleep(debounce_delay) # 消抖延迟 text_area.text = "neither"
由于按键信号的获取借助屏幕便于展示故将其与屏幕显示结合起来,定义蓝色按键控制A0引脚,红色按键控制A1引脚,程序控制默认拉高A0,A1引脚为高电平,当按键按下后对应引脚电平拉低,同时在屏幕上显示出文本信息。
光强获取:
BH1750具有以下优点:
高精度:BH1750传感器能够提供较高的测量精度,光照强度的数值通常在1 lx到65535 lx之间,适合各种光照环境的测量。
数字输出:BH1750通过I2C接口直接输出数字信号,避免了模拟信号的干扰,简化了后续处理。
低功耗:该传感器在工作和待机状态下都具有较低的功耗,适合电池供电的应用。
快速响应:BH1750具有快速的测量时间,能够实时响应光照变化,一般在100ms左右完成一次测量。
广泛的电源电压:BH1750可以在3V到5V的范围内工作,适应不同的系统设计。
I2C通信的原理是通过对SCL和SDA线高低电平时序的控制,来产生I2C总线协议所需要的信号进行数据的传递。
1.起始条件:主设备将SDA线从高电平拉低,同时保持SCL线为高电平,表示通信开始。此时,总线上的所有设备都会检测到这个起始信号,并准备接收数据。
2.地址传输:主设备发送从设备的地址,以及一个读写位(R/W位)。从设备根据接收到的地址和读写位来判断是否需要响应主设备。如果地址匹配且读写位正确,从设备会准备接收或发送数据。
3.数据传输:在数据传输阶段,主设备和从设备之间以字节(8位)为单位进行双向的数据传输。每次传输的数据都会跟随一个应答位(ACK/NACK位),用于确认数据接收情况。主设备在发送或接收每一位数据时,都会通过SCL线的时钟脉冲时序进行同步。
4.停止条件:当数据传输完成后,主设备将SDA线从低电平拉高,同时保持SCL线为高电平,表示通信结束。此时,总线再次处于空闲状态,等待下一次通信的开始。
通过所给库函数及例程,可以实现BH1750对光强的获取,并通过屏幕显示出来:
import time import board import adafruit_bh1750 i2c = board.I2C() sensor = adafruit_bh1750.BH1750(i2c)#初始化传感器 while True: print("%.2f Lux"%sensor.lux) # text_area.text = "Lux" time.sleep(1)