僤裑壹嗰亾 发表于 2014-9-15 17:01:44

求助:Arduino WIFI 小车 红外循迹

本帖最后由 僤裑壹嗰亾 于 2014-9-15 17:12 编辑

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

case '4'://lkf的数据等于 4 的ascii码就执行红外循迹
                        
                SL = digitalRead(SensorLeft);//获取左红外感測器状态
                // SM = digitalRead(SensorMiddle);//获取中红外感測器状态
                SR = digitalRead(SensorRight);//获取右红外感測器状态
         
                if (SL == LOW&&SR==LOW)//状态都是白色 前进
                  {
                   qian(255);   
                  }   
                     else
                         {
                        if (SL == HIGH & SR == LOW)// 左黑右白, 快速左轉
                            {
                           delay(1);
                           zuo(180);
                              }
                               else
                                        if (SR == HIGH & SL == LOW) // 左白右黑, 快速右轉
                                 {
                                    delay(1);
                                    you(180);
                                     }
                                    else // 否则都是黑色, 停止
                                          {   
                                           ting();
                                              }       
                        }      
            break;
            lkf=52;
问题就是 小车接收到信号后执行以上代码时小车就不会循环执行此代码请问下 如何使小车收到 红外循迹信号后 没收到别的信号就一直执行红外循迹

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

void qian(int a)
         {
          analogWrite(3,a);//调节a参数可调速度(0-255)
          analogWrite(5,a);//调节a参数可调速度(0-255)      
          digitalWrite(14,LOW);
          digitalWrite(15,HIGH);
          digitalWrite(16,LOW);
          digitalWrite(17,HIGH);
          Serial.print("qian");
          Serial.println();
         }
void hou(int a)
         {      
          analogWrite(3,a);//调节a参数可调速度(0-255)
          analogWrite(5,a); //调节a参数可调速度(0-255)
          digitalWrite(14,HIGH);
          digitalWrite(15,LOW);
          digitalWrite(16,HIGH);
          digitalWrite(17,LOW);   
          Serial.print("hou");
          Serial.println();
            }
void zuo(int a)
      {      
          analogWrite(3,a);//调节参数可调速度(0-255)
          analogWrite(5,a); //调节参数可调速度(0-255)
          digitalWrite(14,LOW);
          digitalWrite(15,HIGH);
          digitalWrite(16,HIGH);
          digitalWrite(17,LOW);
          Serial.print("zuo");
          Serial.println();   
      }      
void you(int a)
      {      
          analogWrite(3,a);//调节参数可调速度(0-255)
          analogWrite(5,a); //调节参数可调速度(0-255)
          digitalWrite(14,HIGH);
          digitalWrite(15,LOW);
          digitalWrite(16,LOW);
          digitalWrite(17,HIGH);
          Serial.print("you");
          Serial.println();
         
      }
void ting(void)
         {
          analogWrite(3,0);
          analogWrite(5,0);
          digitalWrite(14,LOW);   
          digitalWrite(15,LOW);
          digitalWrite(16,LOW);   
          digitalWrite(17,LOW);   
          Serial.print("ting");
          Serial.println();   
                           }



void setup()
{
Serial.begin(9600);// WIFI 打开串行端口,设置速率为 9600 bps
pinMode(14,OUTPUT);
pinMode(15,OUTPUT);
pinMode(16,OUTPUT);
pinMode(17,OUTPUT);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);

   pinMode(SensorLeft, INPUT); //定義左红外感測器
//   pinMode(SensorMiddle, INPUT);//定義中红外感測器
pinMode(SensorRight, INPUT); //定義右红外感測器
   

}
void loop()
{
   //*******************************************************//
   //仅在得到数据后发送
   if (Serial.available()) //WIFI
    {
      // read the incoming byte:<br />   // 读取得到的字节
      lkf = Serial.read();//WIFI
      // say what you got:<br />   // 反馈结果
      Serial.print("I received: quot;");//WIFI
      Serial.println(lkf, DEC);//WIFI
////////////////////////////////////////////////////////////////////////
      switch(lkf)//判断WIFI接受数据的ascii码
                {
             case 'a'://如果ascii码等于 a 的ascii码就执行前进
               qian(255);
               lkf=0;
             break;   
             case 'b':
               hou(255);
               lkf=0;
             break;   
             case 'c':
               zuo(180);
               lkf=0;
             break;
             case 'd':
               you(180);
               lkf=0;
             break;
             case 'e':
               ting();
               lkf=0;
             break;
             case '4'://lkf的数据等于 4 的ascii码就执行红外循迹
                        
                SL = digitalRead(SensorLeft);//获取左红外感測器状态
                // SM = digitalRead(SensorMiddle);//获取中红外感測器状态
                SR = digitalRead(SensorRight);//获取右红外感測器状态
         
                if (SL == LOW&&SR==LOW)//状态都是白色 前进
                  {
                   qian(255);   
                  }   
                     else
                         {
                        if (SL == HIGH & SR == LOW)// 左黑右白, 快速左轉
                            {
                           delay(1);
                           zuo(180);
                              }
                               else
                                        if (SR == HIGH & SL == LOW) // 左白右黑, 快速右轉
                                 {
                                    delay(1);
                                    you(180);
                                     }
                                    else // 否则都是黑色, 停止
                                          {   
                                           ting();
                                              }       
                        }      
            break;
            lkf=52;            
                        }
      }
//********************************************************************//
//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**
      digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
      delayMicroseconds(10);
      digitalWrite(TrigPin, HIGH);
      delayMicroseconds(50);
      digitalWrite(TrigPin, LOW);
      cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
      cm = (int(cm * 100.0)) / 100.0; //保留两位小数

      if(cm<=17 & cm>5)
      {
         Serial.print(cm);
         Serial.print("cm");
         Serial.println();
         hou(255);//调节参数可调速度(0-255)
         delay(80);
         ting();//调节参数可调速度(0-255)//
         cm=0;
//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**

         }
      
   }

僤裑壹嗰亾 发表于 2014-9-15 17:13:08

求各路大神帮帮忙啊

a1039752256 发表于 2014-9-15 17:13:08

加个while,当读取到lkf != '4' 时就break出来

僤裑壹嗰亾 发表于 2014-9-15 19:06:21

a1039752256 发表于 2014-9-15 17:13 static/image/common/back.gif
加个while,当读取到lkf != '4' 时就break出来

能不能具体点?我刚学这个 有些还是不懂

a1039752256 发表于 2014-9-15 19:45:47

      Serial.println(lkf, DEC);//WIFI
//在这里加上 “ } ”
      switch(lkf)//判断WIFI接受数据的ascii码

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

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

=========

a1039752256 发表于 2014-9-15 19:46:26

好了!你试下

僤裑壹嗰亾 发表于 2014-9-15 22:36:14

a1039752256 发表于 2014-9-15 19:46 static/image/common/back.gif
好了!你试下

能不能帮我改好 谢了

a1039752256 发表于 2014-9-15 23:27:00

僤裑壹嗰亾 发表于 2014-9-15 22:36
能不能帮我改好 谢了

改个大括号这点屁大的事情你自己还搞不定?
页: [1]
查看完整版本: 求助:Arduino WIFI 小车 红外循迹