Arduino 超声波测距+OLED显示
一.项目简介
用超声波测距,实时显示在OLED上面
二.接线
超声波:
VCC->5V GND->GND
Trig->2 Echo->3
OLED:
VCC->3V GND->GND
SCL(时钟线)->SCL SDA(数据线)->SDA
(可参考上图)
三.库安装
点击管理库
搜索关键词为GFX和SSD1306的库,点击install
四.模块介绍
超声波:
OLED:
这款屏幕尺寸约为0.96英寸,由SSD1306驱动,驱动接口I2C,I2C地址(0x3c 默认/0x3d)。
通过时钟线和数据线来传递数据
五.代码详解
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define TrigPin 2
#define EchoPin 3
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);//声明OLED
/*
一,二参数0.96寸OLED长宽参数为128 64,第三个参数默认&Wire,第四个参数
设置重置脚,-1就是不设置
*/
long getTime()//检测Echo脚高电平的时间
{
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
return pulseIn(EchoPin,HIGH);
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);//开像素点发光
display.clearDisplay();//清屏
display.setTextSize(2); //设置字体大小
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int dis;
dis = getTime()/ 58;
/*
关于距离中除以58的说明:
声音在干燥、摄氏20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。 或者,我们作一下单位换算, 34,300除以1,00000厘米/微秒。即为: 0.0343厘米/微秒, 再换一个角度,1/ (0.0343 厘米/微秒)即: 29.15 微秒/厘米。这就意味着,每291.5微秒表示10CM的距离。1厘米就是29.15微秒。 但是发送后到接收到回波,声音走过的是2倍的距离呀。所以实际距离就是1厘米,对应58.3微秒。 实际上整个测距过程是测的发出声波到收到回波的时间,时间us。所以换成距离cm,要除以58。当然除以58.3可能更精确。所以程序中用pulseln(EchoPin, HIGH) / 58.00获取测得的距离。
*/
display.clearDisplay();//清屏
display.setCursor(50,10);
display.print(dis);
display.println("cm");
display.drawRect(0, 33, 128, 12, WHITE);
display.fillRect(2, 35, map(dis, 2, 30, 2, 124), 8, WHITE);//map(要映射的值,旧区间初值,旧区间终值,新区间初值,新区间终值)
/*
进度条采用静态空心矩形套一个动态实心矩形实现
*/
display.display();//开显示
}