tgyfish 发表于 2012-12-19 16:59:37

我玩出来的奇葩问题~

本帖最后由 弘毅 于 2012-12-19 17:21 编辑

#include <IRremote.h>// 使用IRRemote函数库

const int irReceiverPin = 2;// 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口

IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
decode_results results;    // 定义results变量为红外结果存放位置

void setup()
{
Serial.begin(9600);   // 开启串口,波特率为9600
irrecv.enableIRIn();   // 启动红外解码
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}

void loop()
{
if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
    // 把数据输入到串口
    Serial.print("irCode: ");            
    Serial.print(results.value, HEX); // 显示红外编码
    Serial.print(",bits: ");         
    Serial.println(results.bits); // 显示红外编码位数
   
    if(results.value==0xFFE01F)
      {
      digitalWrite(10,HIGH);
       delay(50);
       digitalWrite(10,LOW);
      }
   
      
      else if(results.value==0xFFA857)
       {
      digitalWrite(11,HIGH);
       delay(50);
      digitalWrite(11,LOW);
      }
      
    irrecv.resume();    // 继续等待接收下一组信号
}
}
这个是一个小小红外接收的程序,看出来了10脚还有11脚我用LED来反馈接收情况~先注意这里!
接下来是一个双超声波的程序:
const int TrigPin = 2;
const int EchoPin = 3;
const int Tri = 4;
const int Ech = 5;
float cm1;
float cm2;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(Tri, OUTPUT);
pinMode(Ech, INPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}

void loop()
{
int i;
for(i=1;i<=2;i++)
{
if(i=1)
{
    digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
    delayMicroseconds(2);
    digitalWrite(TrigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin, LOW);

    cm1 = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
    cm1 = (int(cm1 * 100.0)) / 100.0; //保留两位小数
    Serial.print(cm1);
    Serial.print("cm1");
    Serial.println();
    delay(10);

    if(cm1<5)
    {
      digitalWrite(7, HIGH);
    }
      else
      {
      digitalWrite(7, LOW);
      }
   
}
delay(50);
if(i=2)
{
    digitalWrite(Tri, LOW); //低高低电平发一个短时间脉冲去Tri
    delayMicroseconds(2);
    digitalWrite(Tri, HIGH);
    delayMicroseconds(10);
    digitalWrite(Tri, LOW);

    cm2 = pulseIn(Ech, HIGH) / 58.0; //将回波时间换算成cm
    cm2 = (int(cm2* 100.0)) / 100.0; //保留两位小数
    Serial.print(cm2);
    Serial.print("cm2");
    Serial.println();
    delay(10);

    if(cm2<5)
    {
      digitalWrite(8, HIGH);
    }
      else
      {
      digitalWrite(8, LOW);
      }
   
}
}
}
注意这里的7脚和8脚,和红外一起看的话,就是满足条件让led亮而已,当电路接完之后,串口打开能看到超声波和红外接收的值,灯呢?好吧,灯没坏,重点是第一个灯会正常亮,也就是10脚或7脚,他们之后的11脚或8脚不会正常亮,我不知道是什么原因,估计是程序的问题,我不知道这个先后顺序到底闹啥样?小弟不才,求指导!!!

phoenixshen 发表于 2012-12-19 17:16:20

看着程序没有问题诶 应该把串口的log 贴出来就好了~~

tgyfish 发表于 2012-12-19 17:55:41

phoenixshen 发表于 2012-12-19 17:16 static/image/common/back.gif
看着程序没有问题诶 应该把串口的log 贴出来就好了~~

把串口的log 贴出来????什么意思?

Ansifa 发表于 2012-12-19 18:19:40

本帖最后由 Ansifa 于 2012-12-19 18:26 编辑

第一个去掉else试试、延时时间设500毫秒试试。第二个if(i==1)不是if(i=1)

kenblue 发表于 2012-12-23 09:35:33

貌似会干扰11?
页: [1]
查看完整版本: 我玩出来的奇葩问题~