From aac3a383ce600defbffea569eff061c4ddbff993 Mon Sep 17 00:00:00 2001 From: lingyunxsh Date: Sat, 7 Jun 2025 23:42:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AC=A1=E6=B5=8B=E8=AF=95=E5=8D=95?= =?UTF-8?q?=E7=89=87=E6=9C=BA=E5=BE=AA=E8=BF=B9=E9=81=BF=E9=9A=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SR04_distance/SR04_distance.ino | 99 +++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 SR04_distance/SR04_distance.ino diff --git a/SR04_distance/SR04_distance.ino b/SR04_distance/SR04_distance.ino new file mode 100644 index 0000000..f08911b --- /dev/null +++ b/SR04_distance/SR04_distance.ino @@ -0,0 +1,99 @@ +//使用了SR04超声波传感器,可收发超声波,测距0~450cm +//通过串口显示距离 +#include + +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); //设置4(TrigPin)脚为输出状态 + // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态 + pinMode(EchoPin, INPUT); //设置6(EchoPin)脚为输入状态 + + pinMode(TrigPin2, OUTPUT); //设置4(TrigPin)脚为输出状态 + // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态 + pinMode(EchoPin2, INPUT); //设置6(EchoPin)脚为输入状态 + 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毫秒) + + + + +}