Files
mqtt_power/SR04_distance/SR04_distance.ino

100 lines
3.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//使用了SR04超声波传感器可收发超声波测距0~450cm
//通过串口显示距离
#include <Servo.h>
Servo myServo;
const int servoPin = 9;
//设定SR04连接的Arduino引脚
const int TrigPin = 8; //C语言的基本数据类型中的一种const int定义的是一个常量它的值不可以更改。
const int EchoPin = 6;
const int TrigPin2 = 2;
const int EchoPin2 = 3;
const int trct5000_01=A0;
float distance; //C语言的基本数据类型中的一种表示单精度浮点数。
float distance2;
int flag;
void setup()
{
Serial.begin(9600); //初始化串口通信
myServo.attach(servoPin,500, 2500);
pinMode(TrigPin, OUTPUT); //设置4TrigPin脚为输出状态
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT); //设置6EchoPin脚为输入状态
pinMode(TrigPin2, OUTPUT); //设置4TrigPin脚为输出状态
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin2, INPUT); //设置6EchoPin脚为输入状态
Serial.println("Ultrasonic sensor:"); //串口监视器显示Ultrasonic sensor:
pinMode(A0,INPUT);
pinMode(4, OUTPUT); //EA
pinMode(7, OUTPUT); //EB
pinMode(10, OUTPUT); //A1
pinMode(5, OUTPUT); //A1
pinMode(11, OUTPUT); //B1
pinMode(12, OUTPUT); //B2
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
myServo.write(90);
}
void loop()
{
analogWrite(5, 200);
analogWrite(10, 50);
Serial.println(digitalRead(trct5000_01));
analogWrite(11, 50);
analogWrite(12, 200);
digitalWrite(TrigPin, LOW); //设置数字引脚4为低电平
delayMicroseconds(2); //产生一个2us延迟“delayMicroseconds();”为微秒级延时。
digitalWrite(TrigPin, HIGH); //设置数字引脚4为高电平
delayMicroseconds(10); //产生一个10us的高脉冲去触发TrigPin至少10us的高电平信号才能触发模块的测距功能。
digitalWrite(TrigPin, LOW); //设置数字引脚4为低电平
distance = pulseIn(EchoPin, HIGH) / 58.00; //检测脉冲宽度,并计算出距离
digitalWrite(TrigPin2, LOW); //设置数字引脚4为低电平
delayMicroseconds(2); //产生一个2us延迟“delayMicroseconds();”为微秒级延时。
digitalWrite(TrigPin2, HIGH); //设置数字引脚4为高电平
delayMicroseconds(10); //产生一个10us的高脉冲去触发TrigPin至少10us的高电平信号才能触发模块的测距功能。
digitalWrite(TrigPin2, LOW); //设置数字引脚4为低电平
distance2 = pulseIn(EchoPin2, HIGH) / 58.00; //检测脉冲宽度,并计算出距离
if(distance < 10)
{
flag = 1;
digitalWrite(4,LOW);
digitalWrite(7,LOW);
}
else
{
flag = 0;
}
if(flag == 0)
{
if(distance2 < 20)
{
myServo.write(110);
digitalWrite(4,LOW);
digitalWrite(7,LOW);
}
else
{
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
}
}
//注意此语句中58.00前的“/”符号为算术运算符,表示除以。
Serial.print(distance); //串口监视器显示distance所测距离
Serial.println(); //串口监视器打印一行回车
Serial.print(distance2); //串口监视器显示distance所测距离
Serial.print("cm"); //串口监视器显示“cm”
Serial.println(); //串口监视器打印一行回车
delay(100); //延迟1秒1000毫秒
}