废话不多说,直接介绍该项目!!
1.元器件和设备
Arduino UNO板 X1
HC-SR04超声波测距模块 X1
OLED显示屏模块 X1
杜邦线公对公 X8
面包板 X1
2.接线到对应引脚
本人没有什么艺术造诣,天外飞线才是我的准则
3.查询OLED地址
!!!关键步骤 !!!如果OLED没显示任何东西的话,一定是OLED的地址没填对
查询地址步骤如下:
给开发板上电并连接好OLED模块 -> 打开Arduino -> 点击示例 -> 选择Wire -> 选择i2c-scanner
进入示例 -> 烧写程序 -> 串口监视器查看地址
4.调用库
<Adafruit_GFX.h>
<Adafruit_SSD1306.h>
调用库前得先下载所需要的两个库,不然到时候红花花的一片代码,按顺序下载库
5.编写程序
#define fasong 3 //宏定义发送端端口
#define jieshou 2 //宏定义接收端端口
#include<Wire.h>
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1); //初始化调用SSD1306的长128和宽64两者像素,&Wire默认,共享开发板复位引脚填-1
float juli; //全局变量距离结果,哈哈很多变量名都是拼音,写代码还是得规范一下千万别学我0v0
void oled1() {
oled.clearDisplay(); //当该被函数调用时清除oled缓存内容(通俗点来讲就是刷新数据)
oled.setTextSize(1); //字体
oled.setTextColor(1); //字体颜色默认白色
oled.setCursor(64, 0); //设置显示的位置
oled.print(juli); //显示结果,单位厘米
oled.display(); //显示字体
}
void setup() {
Serial.begin(9600);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); //查询OLED的地址,一般默认0x3C
pinMode(fasong, OUTPUT);
pinMode(jieshou, INPUT);
}
void loop() {
digitalWrite(fasong, 0); //将发送端置0
delayMicroseconds(2); //延迟2微秒,微秒函数用这个
digitalWrite(fasong, 1); //发送端开始测距,置1
delayMicroseconds(10); //延迟10微秒
digitalWrite(fasong, 0); //接收端开始,发送端结束测距,发送端置0,接收端置1
juli = float(pulseIn(jieshou, 1) * 17) / 1000; //统计接收端从0到1的时间,也是统计发送端从1到0的时间,pulseIn(jieshou,1)是超声波来回总和时间
Serial.println(juli); //用串口通信来检测时间正确
oled1();
delay(1000); //延迟可以自己拟定
}
6.效果