极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18028|回复: 3

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

[复制链接]
发表于 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
+1
100~150=90-0度?
+2

那是之前的测试方法,后来改思路了
回复 支持 反对

使用道具 举报

发表于 2013-11-13 20:00:24 | 显示全部楼层
整理你的大括號
回复 支持 反对

使用道具 举报

发表于 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
.....

是这样理解没?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 01:32 , Processed in 0.037885 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表