用到的东西:
超声波传感器,uno,SSD1306 OLED显示屏
超声波:gnd-gnd
vcc-5v
trig-接脚这里是A0
echo-接脚这里是A1
显示器:vcc-3.5
gnd-gnd
scl-scl
sda-sda
名词解释:SCL(Serial Clock)是I2C总线的时钟信号线,由主设备(如微控制器)产生,并控制通信速度。
SDA(Serial Data)是I2C总线的数据信号线,用于在设备之间传输数据。
在I2C总线中,每个设备都有一个唯一的地址,主设备可以向任意设备发送命令,并从设备读取数据。SCL和SDA信号线上的信号是由主设备产生和控制的。SCL和SDA信号线的电平是由器件状态和主设备控制来确定的。
#include <U8g2lib.h> // 引入U8g2库,用于控制SSD1306 OLED显示屏
#include <Wire.h> // 引入Wire库,用于I2C通信
volatile int item; // 定义变量item,用于存储距离值
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); // 定义SSD1306 OLED显示屏对象
// checkdistance_0_0函数,用于测量超声波传感器与障碍物之间的距离
float checkdistance_0_0() {
digitalWrite(0, LOW); // 将超声波传感器的触发引脚设为低电平
delayMicroseconds(2); // 延时2微秒
digitalWrite(0, HIGH); // 将超声波传感器的触发引脚设为高电平
delayMicroseconds(10); // 延时10微秒
digitalWrite(0, LOW); // 将超声波传感器的触发引脚设为低电平
float distance = pulseIn(0, HIGH) / 58.00; // 使用pulseIn函数测量超声波回波时间,计算距离值
delay(10); // 延时10毫秒
return distance; // 返回测量的距离值
}
// page1函数,用于在SSD1306 OLED显示屏上显示距离值
void page1() {
u8g2.setFont(u8g2_font_timR08_tf); // 设置字体
u8g2.setFontPosTop(); // 设置字体位置
u8g2.setCursor(0,20); // 设置光标位置
u8g2.print(item); // 在SSD1306 OLED显示屏上打印距离值
}
void setup(){
item = 0; // 初始化item变量为0
pinMode(0, INPUT); // 将超声波传感器的接收引脚设为输入模式
u8g2.setI2CAddress(0x3C*2); // 设置SSD1306 OLED显示屏的I2C地址
u8g2.begin(); // 初始化SSD1306 OLED显示屏
u8g2.enableUTF8Print(); // 启用UTF-8编码
}
void loop(){
item = checkdistance_0_0(); // 调用checkdistance_0_0函数,测量距离并将距离值存储到item变量中
u8g2.firstPage(); // 显示第一页
do
{
page1(); // 在第一页上显示距离值
}while(u8g2.nextPage()); // 显示下一页
}
这段代码是一个基于Arduino平台的程序,使用了U8g2库来控制一个SSD1306 OLED显示屏的显示。程序通过测量超声波传感器的距离来更新变量item的值,并将其显示在OLED屏幕上。
具体来说,程序的主要流程如下:
引入U8g2库和Wire库。
定义一个名为item的整型变量和一个名为u8g2的U8G2_SSD1306_128X64_NONAME_1_HW_I2C类型对象,用于控制OLED屏幕。
定义一个名为checkdistance_0_0的函数,用于测量超声波传感器的距离并返回距离值。
定义一个名为page1的函数,用于在OLED屏幕上显示item变量的值。
在setup函数中初始化程序,包括设置pin 0为输入模式、设置OLED屏幕的I2C地址、初始化OLED屏幕等。
在loop函数中,调用checkdistance_0_0函数测量距离,并将测量结果保存到item变量中,然后在OLED屏幕上显示item变量的值。
总体来说,这个程序的作用是通过超声波传感器测量距离,并将测量结果显示在OLED屏幕上。