初次测试单片机循迹避障
This commit is contained in:
99
SR04_distance/SR04_distance.ino
Normal file
99
SR04_distance/SR04_distance.ino
Normal file
@@ -0,0 +1,99 @@
|
||||
//使用了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); //设置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毫秒)
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user