极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9240|回复: 4

我玩出来的奇葩问题~

[复制链接]
发表于 2012-12-19 16:59:37 | 显示全部楼层 |阅读模式
本帖最后由 弘毅 于 2012-12-19 17:21 编辑
  1. #include <IRremote.h>  // 使用IRRemote函数库

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

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

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

  12. void loop()
  13. {
  14.   if (irrecv.decode(&results)) {   // 解码成功,把数据放入results变量中
  15.     // 把数据输入到串口
  16.     Serial.print("irCode: ");            
  17.     Serial.print(results.value, HEX); // 显示红外编码
  18.     Serial.print(",  bits: ");           
  19.     Serial.println(results.bits); // 显示红外编码位数
  20.    
  21.     if(results.value==0xFFE01F)
  22.       {
  23.         digitalWrite(10,HIGH);
  24.        delay(50);
  25.        digitalWrite(10,LOW);
  26.       }
  27.    
  28.       
  29.       else if(results.value==0xFFA857)
  30.        {
  31.         digitalWrite(11,HIGH);
  32.        delay(50);
  33.         digitalWrite(11,LOW);
  34.       }
  35.       
  36.     irrecv.resume();    // 继续等待接收下一组信号
  37.   }  
  38. }
复制代码

这个是一个小小红外接收的程序,看出来了10脚还有11脚我用LED来反馈接收情况~先注意这里!
接下来是一个双超声波的程序:
  1. const int TrigPin = 2;
  2. const int EchoPin = 3;
  3. const int Tri = 4;
  4. const int Ech = 5;
  5. float cm1;
  6. float cm2;
  7. void setup()
  8. {
  9. Serial.begin(9600);
  10. pinMode(TrigPin, OUTPUT);
  11. pinMode(EchoPin, INPUT);
  12. pinMode(Tri, OUTPUT);
  13. pinMode(Ech, INPUT);
  14. pinMode(7, OUTPUT);
  15. pinMode(8, OUTPUT);
  16. }

  17. void loop()
  18. {
  19.   int i;
  20.   for(i=1;i<=2;i++)
  21. {
  22.   if(i=1)
  23.   {
  24.     digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
  25.     delayMicroseconds(2);
  26.     digitalWrite(TrigPin, HIGH);
  27.     delayMicroseconds(10);
  28.     digitalWrite(TrigPin, LOW);
  29.   
  30.     cm1 = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
  31.     cm1 = (int(cm1 * 100.0)) / 100.0; //保留两位小数
  32.     Serial.print(cm1);
  33.     Serial.print("cm1");
  34.     Serial.println();
  35.     delay(10);
  36.   
  37.     if(cm1<5)
  38.     {
  39.       digitalWrite(7, HIGH);
  40.     }
  41.       else
  42.       {
  43.         digitalWrite(7, LOW);
  44.       }
  45.      
  46.   }
  47. delay(50);
  48.   if(i=2)
  49.   {
  50.     digitalWrite(Tri, LOW); //低高低电平发一个短时间脉冲去Tri
  51.     delayMicroseconds(2);
  52.     digitalWrite(Tri, HIGH);
  53.     delayMicroseconds(10);
  54.     digitalWrite(Tri, LOW);
  55.   
  56.     cm2 = pulseIn(Ech, HIGH) / 58.0; //将回波时间换算成cm
  57.     cm2 = (int(cm2* 100.0)) / 100.0; //保留两位小数
  58.     Serial.print(cm2);
  59.     Serial.print("cm2");
  60.     Serial.println();
  61.     delay(10);
  62.   
  63.     if(cm2<5)
  64.     {
  65.       digitalWrite(8, HIGH);
  66.     }
  67.       else
  68.       {
  69.         digitalWrite(8, LOW);
  70.       }
  71.    
  72.   }
  73. }
  74. }
复制代码

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

使用道具 举报

发表于 2012-12-19 17:16:20 | 显示全部楼层
看着程序没有问题诶 应该把串口的log 贴出来就好了~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-19 17:55:41 | 显示全部楼层
phoenixshen 发表于 2012-12-19 17:16
看着程序没有问题诶 应该把串口的log 贴出来就好了~~

把串口的log 贴出来????什么意思?
回复 支持 反对

使用道具 举报

发表于 2012-12-19 18:19:40 | 显示全部楼层
本帖最后由 Ansifa 于 2012-12-19 18:26 编辑

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

使用道具 举报

发表于 2012-12-23 09:35:33 | 显示全部楼层
貌似会干扰11?
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-19 22:05 , Processed in 0.044149 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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