Raspberry Pi Pico使用MicroPython---把距离显示在OLED上(5)

这一次我们使用ssd1306 驱动的I2C接口OLED显示雷达测距的数据.

原始的英文文件来源于 

raspberrypi-pico/SSD1306_HCSR04 at main · stechiez/raspberrypi-pico · GitHub

在这个大神给出的驱动文件中,下载 ssd1306.py 保存在Pico的 /lib文件夹下, 然后下载 文件 SSD1306_HCSR04.py 到根目录下.


硬件连接: HC-SR04 的VCC-->VBUS(5V Out), Trig-->GPIO14, Echo-->GPIO13, GND-->GND

SSD1306 的 SCL-->GPIO3, SDA-->GPIO2, VCC-->Pin38(3V3 Out), GND-->GND

一定要注意 HC-SR04要5V驱动, 而OLED则只能连接3V3, 否则容易烧坏.


 编写 HC-SR04 的驱动程序;

from machine import Pin
import utime
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import framebuf
import math
import utime

WIDTH  = 128                                            # oled display width
HEIGHT = 64                                             # oled display height

sda=machine.Pin(4)
scl=machine.Pin(5)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)
#  print(i2c.scan())
oled = SSD1306_I2C(128, 64, i2c)
oled.text("STechiezDIY !!!",5,5)
oled.text("Pico",5,15)
oled.text("HCSR04",5,25)
oled.text("SSD1306",5,35)
trigger = Pin(14, Pin.OUT)
echo = Pin(13, Pin.IN)
def get_distance():
   trigger.low()
   utime.sleep_us(2)
   trigger.high()
   utime.sleep_us(5)
   trigger.low()
   while echo.value() == 0:
       signaloff = utime.ticks_us()
   while echo.value() == 1:
       signalon = utime.ticks_us()
   timepassed = signalon - signaloff
   distance = (timepassed * 0.0343) / 2
   print("The distance from object is ",distance,"cm")
   return distance
while True:
   oled.fill(0)   
   ret_val = get_distance()
   oled.text("Distance:",0,0)
   oled.text(str(ret_val) + " cm",0,10)
   oled.show()
   utime.sleep(1)

其中 

trigger = Pin(14, Pin.OUT)
echo = Pin(13, Pin.IN)
def get_distance():
   trigger.low()
   utime.sleep_us(2)
   trigger.high()
   utime.sleep_us(5)
   trigger.low()
   while echo.value() == 0:
       signaloff = utime.ticks_us()
   while echo.value() == 1:
       signalon = utime.ticks_us()
   timepassed = signalon - signaloff
   distance = (timepassed * 0.0343) / 2
   print("The distance from object is ",distance,"cm")
   return distance

这里先定义引脚, 然后定义函数通过激发 HC-SR04 的发送端和接收端的信号时差计算距离.


遇到的问题: 不知道是因为硬件还是什么问题, 我的板子上用I2C0的两个引脚 GPIO0和GPIO1连接OLED时会显示不出来, 程序报错. 但是换成 I2C1的两个引脚GPIO2和GPIO3后正常显示.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值