666
硬件模块: 树莓派小车Arduino核心板+转接板、超声波测距传感器、OLED显示单元
硬件接线: Arduino转接板-----------OLED显示单元
P15----------------P1
实验现象: OLED屏幕显示小车前后超声波距离数据
更新时间:2019-09-06
********************************************************/
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 //设置OLED引脚
Adafruit_SSD1306 display(OLED_RESET);
//前置超声波模块引脚
#define Trig 32 //引脚Tring 连接 IO 32
#define Echo 33 //引脚Echo 连接 IO 33
//后置超声波模块引脚
#define Trig1 36 //引脚Tring 连接 IO 35
#define Echo1 37 //引脚Echo 连接 IO 37
void setup() {
Serial.begin(115200);
delay(500);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 初始化OLED
display.clearDisplay(); // 清屏
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Trig1, OUTPUT);
pinMode(Echo1, INPUT);
}
void loop() {
display.clearDisplay(); // 清屏
display.setCursor(20, 0);
display.print("Ultrasonic Test");
ultrasonic_A();//调用前置超声波测距函数
delay(100);
ultrasonic_B();//调用后置超声波测距函数
display.display();//OLED屏幕更新显示数据
}
double cm; //距离变量
int a;
double b;
float temp;
float cm1; //距离变量
float temp1; //
/**************************************************************
*功 能:前置超声波测距函数
*参 数: 无
*返回值: 无
**************************************************************/
void ultrasonic_A()
{
//给Trig发送一个低高低的短时间脉冲,触发测距
digitalWrite(Trig, LOW); //给Trig发送一个低电平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig, HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig, LOW); //给Trig发送一个低电平
temp = float(pulseIn(Echo, HIGH)); //存储回波等待时间,pulseIn():用于检测引脚输出的高低电平的脉冲宽度。
cm = (temp * 17 ) / 1000; //把回波时间换算成cm
a = (int)cm;
b = (cm - a) * 100;
display.setCursor(0, 20);
display.print("distance_A:");
display.print(cm);
display.print("cm");
}
/**************************************************************
*功 能:后置超声波测距函数
*参 数: 无
*返回值: 无
**************************************************************/
void ultrasonic_B()
{
//给Trig发送一个低高低的短时间脉冲,触发测距
digitalWrite(Trig1, LOW); //给Trig发送一个低电平
delayMicroseconds(2); //等待 2微妙
digitalWrite(Trig1, HIGH); //给Trig发送一个高电平
delayMicroseconds(10); //等待 10微妙
digitalWrite(Trig1, LOW); //给Trig发送一个低电平
temp1 = float(pulseIn(Echo1, HIGH)); //存储回波等待时间,pulseIn():用于检测引脚输出的高低电平的脉冲宽度。
cm1 = (temp1 * 17 ) / 1000; //把回波时间换算成cm
display.setCursor(0, 40);
display.print("distance_B:");
display.print(cm1);
display.print("cm");
}