最近在做一个小项目,根据超声波第一次测量的距离在100厘米到150厘米内正转,然后停止,超声波再次检测到距离在100到150厘米内就反转,如此反复的执行,但是自己写的代码要么就测的距离完全没有用,无法控制,下面是代码,求大神呢指导,
#include <Servo.h>
int i=0;
const int TrigPin = 2; //定义超声波T端口引脚
const int EchoPin = 3; //定义超声波E端口引脚
float cm; //定义超声波距离储存变量,单位CM
Servo myservo; // create servo object to control a servo
Servo myservo1;
int pos = 0;
int pos1=0;
void setup()
{
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
myservo.attach(9);
myservo.attach(6);
// myservo.attach(7);
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
// if(cm>100){i=1;
//while(i<2){
if(cm>100){
for(pos = 0; pos <200; pos += 1)
{
myservo.write(pos);
delay(50);
//}
// for(pos = 0; pos <200; pos += 1){
// myservo1.write(pos);
//myservo2.write(pos);
// delay(50);
// i=0;
// }
}
if(cm<100){
for(pos=200;pos>0;pos--)
{
myservo.write(pos);
delay(50);}
// for(pos=200;pos>0;pos--){
// myservo1.write(pos1);
//myservo2.write(pos);
// delay(50); }
}
}
// }
//}
以上代码是刚刚设计的在小于100厘米时正转,大于厘米时反转,但是超声波试了,貌似超声波没有反应,也通过串口监视过了
超声波正常,就是不知道哪里出问题了,
const int TrigPin = 2; //超声波的trig接arduino的2号数字口
const int EchoPin = 3; //超声波的Echo接3号口
float cm;
void setup()
{
Serial.begin(9600); //设置串口通信波特率,这个看你使用的蓝牙模块,一般为9600
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin 这一部分为测距部分,可以得到距离。
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
//Serial.print('+');
Serial.print(cm);
Serial.print("cm");
Serial.print("\n");
//Serial.print('=');
delay(500);
}
以上是超声波源代码,不知道有木有问题,
下面这段代码也是舵机慢慢转到一定角度,又被loop反复执行后快速转回初始位置,再又根据设置的参数慢慢转下去,又快速返回,如此反复执行,有求大神指导怎么让他第一次在100到150厘米的范围内正转,再次超声波测量距离在100到150厘米内反转,如此反复,其余时间停止,我该怎么改代码????
|