极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8287|回复: 5

求大神支招

[复制链接]
发表于 2014-4-20 17:01:59 | 显示全部楼层 |阅读模式
我用舵机控制超声波
超声波读取都有没有问题  
肯定我的程序有问题
我是10cm转90度,可是为啥 读到一个10cm就会执行三个if,肯定if那里错了,就是不知道咋改。谢谢了

#include <Servo.h>

Servo myservo;

int pos = 0;
const int TrigPin = 2;
const int EchoPin = 3;
float cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
myservo.attach(9);  
}
void loop()
{
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);

cm = pulseIn(EchoPin, HIGH) / 58.0;
cm = (int(cm * 100.0)) / 100.0;
if(cm<10)
{
  myservo.write(90);
  delay(1000);
if(cm<10)
{
  myservo.write(0);                  
delay(1000);
if(cm<10)
{ myservo.write(180);
delay(1000);
}
}
}
delay(1000);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(1000);
}
回复

使用道具 举报

发表于 2014-4-20 17:16:13 | 显示全部楼层
"读到一个10cm就会执行三个if," 是什麼意思?  是指 cm  = 10 時也會執行 if (cm < 10) 的設定嗎?
如果是這樣的話, 有可能因為 float 的數值, 10 非 10 而做成.  嘗試改成整數作比較試試看看.
回复 支持 反对

使用道具 举报

发表于 2014-4-20 18:44:38 | 显示全部楼层
要先要弄清楚以下這段的思路,或許先用文字表達一下。
//
if(cm<10)
{
  myservo.write(90);
  delay(1000);
if(cm<10)
{
  myservo.write(0);                  
delay(1000);
if(cm<10)
{ myservo.write(180);
delay(1000);
}
}
}
//
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-20 19:43:48 | 显示全部楼层
eddiewwm 发表于 2014-4-20 18:44
要先要弄清楚以下這段的思路,或許先用文字表達一下。
//
if(cm

就是距离小于10  第一次转到0度,第二次,180,第三次90度
回复 支持 反对

使用道具 举报

发表于 2014-4-20 21:09:13 | 显示全部楼层
本帖最后由 eddiewwm 于 2014-4-20 23:10 编辑
a463637283 发表于 2014-4-20 19:43
就是距离小于10  第一次转到0度,第二次,180,第三次90度


按所述思路和原代碼結構方式的參考:
//
  if(cm<10 and TrigCount == 0) //距離小於10cm 並是第一次情況
  {
    myservo.write(0);
    delay(1000);
    TrigCount = 1; // 第一次完成,設為第二次
  }
  else if(cm<10 and TrigCount == 1 )  //距離小於10cm 並是第二次情況
  {
    myservo.write(180);                  
    delay(1000);
    TrigCount = 2; // 第二次完成,設為第三次
  }
  else if(cm<10 and TrigCount == 2)  //距離小於10cm 並是第三次情況
  {
    myservo.write(90);
    delay(1000);
//   TrigCount = 2; // 第三次完成,設為第一次  ** 這個錯了 **
     TrigCount = 0; // 第三次完成,設為第一次  ** 更正 **
}
//

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-20 21:54:12 | 显示全部楼层
eddiewwm 发表于 2014-4-20 21:09
按所述思路和原代碼結構方式的參考:
//
  if(cm

谢了 我试试
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 04:02 , Processed in 0.046101 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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