极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12197|回复: 7

求助:Arduino WIFI 小车 红外循迹

[复制链接]
发表于 2014-9-15 17:01:44 | 显示全部楼层 |阅读模式
本帖最后由 僤裑壹嗰亾 于 2014-9-15 17:12 编辑

Arduino WIFI 小车 当WiFi发射 4  的ascii码 红外循迹 功能就会开启

  1. case '4'://lkf的数据等于 4 的ascii码就执行红外循迹
  2.                           
  3.                 SL = digitalRead(SensorLeft);//获取左红外感測器状态
  4.                 // SM = digitalRead(SensorMiddle);//获取中红外感測器状态
  5.                 SR = digitalRead(SensorRight);//获取右红外感測器状态
  6.          
  7.                 if (SL == LOW&&SR==LOW)//状态都是白色 前进
  8.                   {
  9.                    qian(255);   
  10.                     }   
  11.                      else
  12.                          {  
  13.                           if (SL == HIGH & SR == LOW)// 左黑右白, 快速左轉
  14.                             {  
  15.                              delay(1);
  16.                              zuo(180);
  17.                               }
  18.                                else
  19.                                         if (SR == HIGH & SL == LOW) // 左白右黑, 快速右轉
  20.                                    {  
  21.                                     delay(1);
  22.                                     you(180);
  23.                                      }
  24.                                       else // 否则都是黑色, 停止
  25.                                           {   
  26.                                            ting();
  27.                                                 }       
  28.                         }      
  29.             break;
  30.             lkf=52;
复制代码

问题就是 小车接收到信号后执行以上代码时小车就不会循环执行此代码  请问下 如何使小车收到 红外循迹信号后 没收到别的信号就一直执行红外循迹

代码如下:
  1. int lkf = 0;        // WIFI for incoming serial data
  2. const int TrigPin = 8; //Trig输入脚
  3. const int EchoPin = 9; //Echo输入脚
  4. float cm; //超声波 厘米
  5. int SL;    //左红外感測器狀態
  6. //int SM;    //中红外感測器狀態
  7. int SR;    //右红外感測器狀態
  8. const int SensorLeft = 2;      //左红外感測器輸入腳
  9. //const int SensorMiddle= 4 ;    //中红外感測器輸入腳
  10. const int SensorRight = 6;     //右红外感測器輸入腳

  11. void qian(int a)
  12.          {
  13.           analogWrite(3,a);//调节a参数可调速度(0-255)
  14.           analogWrite(5,a);//调节a参数可调速度(0-255)      
  15.           digitalWrite(14,LOW);
  16.           digitalWrite(15,HIGH);
  17.           digitalWrite(16,LOW);
  18.           digitalWrite(17,HIGH);
  19.           Serial.print("qian");
  20.           Serial.println();
  21.            }
  22. void hou(int a)
  23.          {        
  24.           analogWrite(3,a);//调节a参数可调速度(0-255)
  25.           analogWrite(5,a); //调节a参数可调速度(0-255)
  26.           digitalWrite(14,HIGH);
  27.           digitalWrite(15,LOW);
  28.           digitalWrite(16,HIGH);
  29.           digitalWrite(17,LOW);   
  30.           Serial.print("hou");
  31.           Serial.println();
  32.             }
  33. void zuo(int a)
  34.         {        
  35.           analogWrite(3,a);//调节参数可调速度(0-255)
  36.           analogWrite(5,a); //调节参数可调速度(0-255)
  37.           digitalWrite(14,LOW);
  38.           digitalWrite(15,HIGH);
  39.           digitalWrite(16,HIGH);
  40.           digitalWrite(17,LOW);  
  41.           Serial.print("zuo");
  42.           Serial.println();   
  43.         }        
  44. void you(int a)
  45.         {        
  46.           analogWrite(3,a);//调节参数可调速度(0-255)
  47.           analogWrite(5,a); //调节参数可调速度(0-255)
  48.           digitalWrite(14,HIGH);
  49.           digitalWrite(15,LOW);
  50.           digitalWrite(16,LOW);
  51.           digitalWrite(17,HIGH);
  52.           Serial.print("you");
  53.           Serial.println();
  54.          
  55.         }  
  56. void ting(void)
  57.          {
  58.           analogWrite(3,0);
  59.           analogWrite(5,0);
  60.           digitalWrite(14,LOW);   
  61.           digitalWrite(15,LOW);
  62.           digitalWrite(16,LOW);   
  63.           digitalWrite(17,LOW);   
  64.           Serial.print("ting");
  65.           Serial.println();     
  66.                            }



  67. void setup()
  68. {
  69.   Serial.begin(9600);// WIFI 打开串行端口,设置速率为 9600 bps
  70.   pinMode(14,OUTPUT);
  71.   pinMode(15,OUTPUT);
  72.   pinMode(16,OUTPUT);
  73.   pinMode(17,OUTPUT);
  74.   pinMode(TrigPin, OUTPUT);
  75.   pinMode(EchoPin, INPUT);
  76.   
  77.    pinMode(SensorLeft, INPUT); //定義左红外感測器
  78. //   pinMode(SensorMiddle, INPUT);//定義中红外感測器
  79.   pinMode(SensorRight, INPUT); //定義右红外感測器
  80.    
  81.   
  82. }
  83. void loop()
  84. {
  85.    //*******************************************************//
  86.    //  仅在得到数据后发送
  87.    if (Serial.available()) //WIFI
  88.     {
  89.       // read the incoming byte:<br />     // 读取得到的字节
  90.       lkf = Serial.read();//WIFI
  91.       // say what you got:<br />     // 反馈结果
  92.       Serial.print("I received: quot;");//WIFI
  93.       Serial.println(lkf, DEC);//WIFI
  94. ////////////////////////////////////////////////////////////////////////
  95.       switch(lkf)//判断WIFI接受数据的ascii码
  96.                 {
  97.              case 'a'://如果ascii码等于 a 的ascii码就执行前进
  98.                qian(255);
  99.                lkf=0;  
  100.              break;   
  101.              case 'b':
  102.                hou(255);
  103.                lkf=0;
  104.              break;     
  105.              case 'c':
  106.                zuo(180);
  107.                lkf=0;
  108.              break;
  109.              case 'd':
  110.                you(180);
  111.                lkf=0;
  112.              break;
  113.              case 'e':
  114.                ting();
  115.                lkf=0;
  116.              break;  
  117.              case '4'://lkf的数据等于 4 的ascii码就执行红外循迹
  118.                           
  119.                 SL = digitalRead(SensorLeft);//获取左红外感測器状态
  120.                 // SM = digitalRead(SensorMiddle);//获取中红外感測器状态
  121.                 SR = digitalRead(SensorRight);//获取右红外感測器状态
  122.          
  123.                 if (SL == LOW&&SR==LOW)//状态都是白色 前进
  124.                   {
  125.                    qian(255);   
  126.                     }   
  127.                      else
  128.                          {  
  129.                           if (SL == HIGH & SR == LOW)// 左黑右白, 快速左轉
  130.                             {  
  131.                              delay(1);
  132.                              zuo(180);
  133.                               }
  134.                                else
  135.                                         if (SR == HIGH & SL == LOW) // 左白右黑, 快速右轉
  136.                                    {  
  137.                                     delay(1);
  138.                                     you(180);
  139.                                      }
  140.                                       else // 否则都是黑色, 停止
  141.                                           {   
  142.                                            ting();
  143.                                                 }       
  144.                         }      
  145.             break;
  146.             lkf=52;            
  147.                         }
  148.       }
  149. //********************************************************************//
  150. //**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**
  151.       digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
  152.       delayMicroseconds(10);
  153.       digitalWrite(TrigPin, HIGH);
  154.       delayMicroseconds(50);
  155.       digitalWrite(TrigPin, LOW);
  156.       cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
  157.       cm = (int(cm * 100.0)) / 100.0; //保留两位小数

  158.       if(cm<=17 & cm>5)
  159.         {
  160.            Serial.print(cm);
  161.            Serial.print("cm");
  162.            Serial.println();
  163.            hou(255);//调节参数可调速度(0-255)
  164.            delay(80);
  165.            ting();//调节参数可调速度(0-255)//
  166.            cm=0;
  167. //**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**

  168.            }
  169.       
  170.    }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2014-9-15 17:13:08 | 显示全部楼层
求各路大神帮帮忙啊
回复 支持 反对

使用道具 举报

发表于 2014-9-15 17:13:08 来自手机 | 显示全部楼层
加个while,当读取到lkf != '4' 时就break出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-15 19:06:21 | 显示全部楼层
a1039752256 发表于 2014-9-15 17:13
加个while,当读取到lkf != '4' 时就break出来

能不能具体点?我刚学这个 有些还是不懂
回复 支持 反对

使用道具 举报

发表于 2014-9-15 19:45:47 来自手机 | 显示全部楼层
      Serial.println(lkf, DEC);//WIFI
//在这里加上 “ } ”
      switch(lkf)//判断WIFI接受数据的ascii码

===========分割==========

break;
            lkf=52; //另外这里是不是写错?看不懂…           
                        }
      } //删掉这个大括号

=========
回复 支持 反对

使用道具 举报

发表于 2014-9-15 19:46:26 来自手机 | 显示全部楼层
好了!你试下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-15 22:36:14 | 显示全部楼层
a1039752256 发表于 2014-9-15 19:46
好了!你试下

能不能帮我改好 谢了
回复 支持 反对

使用道具 举报

发表于 2014-9-15 23:27:00 来自手机 | 显示全部楼层
僤裑壹嗰亾 发表于 2014-9-15 22:36
能不能帮我改好 谢了

改个大括号这点屁大的事情你自己还搞不定?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 01:01 , Processed in 0.038456 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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