学慧放弃 发表于 2013-11-13 07:50:24

怎么根据超声波控制舵机?

最近在做一个小项目,根据超声波第一次测量的距离在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厘米内反转,如此反复,其余时间停止,我该怎么改代码????




学慧放弃 发表于 2013-11-13 20:30:22

pww999 发表于 2013-11-13 15:40 static/image/common/back.gif
+1
100~150=90-0度?
+2


那是之前的测试方法,后来改思路了

Be1ieve 发表于 2013-11-13 20:00:24

整理你的大括號

pww999 发表于 2013-11-13 15:40:09

18

本帖最后由 pww999 于 2013-11-13 15:55 编辑

+1
100~150=90-0度?
+2
100~150=90-180度?
+1
.........
+2
.....

是这样理解没?
页: [1]
查看完整版本: 怎么根据超声波控制舵机?