欢迎光临散文网 会员登陆 & 注册

666

2023-02-22 10:49 作者:张铁妞  | 我要投稿

硬件模块:   树莓派小车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");


}


666的评论 (共 条)

分享到微博请遵守国家法律