Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 1850|回復: 0
打印 上一主題 下一主題

用手機當開關 控制 arduino 循跡自走車

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-5-9 20:53:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教各位大大,
以下是我的程式
按下循跡的Button就開始啟動,但就無法中斷跳出

  Serial.begin(9600);          // 引用 Serial 程式庫
  pinMode(SLeftLeft, INPUT);   //紅外線感測模組設定成「輸入」
  pinMode(SMiddle, INPUT);
  pinMode(SRightRight, INPUT);
  pinMode(IN1, OUTPUT);        // 馬達控制板的接腳全都設定成「輸出」
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void stop() // 馬達停止
{
  Serial.println("停止!");
  digitalWrite( ENA, 0);
  digitalWrite( ENB, 0);
}

void forward() // 馬達前進
{
  Serial.println("前進!");
  analogWrite(ENA, speed);
  digitalWrite(IN1, HIGH);   
  digitalWrite(IN2, LOW);
  analogWrite(ENB, speed);
  digitalWrite(IN3, HIGH);   
  digitalWrite(IN4, LOW);
}

void backward() // 馬達後退
{
  Serial.println("後退!");
  analogWrite(ENA, speed);
  digitalWrite(IN1, LOW);  
  digitalWrite(IN2, HIGH);
  analogWrite(ENB, speed);
  digitalWrite(IN3, LOW);   
  digitalWrite(IN4, HIGH);
}

void turnLeft() // 馬達左轉
{
  Serial.println("左轉!");  
  analogWrite(ENA, speed);  
  digitalWrite(IN1, LOW);   
  digitalWrite(IN2, HIGH);
  analogWrite(ENB, speed);  
  digitalWrite(IN3, HIGH);  
  digitalWrite(IN4, LOW);
}

void turnRight() // 馬達右轉
{
  Serial.println("右轉!");  
  analogWrite(ENA, speed);  
  digitalWrite(IN1, LOW);   
  digitalWrite(IN2, HIGH);
  analogWrite(ENB, speed);  
  digitalWrite(IN3, HIGH);  
  digitalWrite(IN4, LOW);
}

void drivemotor(byte nStatus)
{
  switch(nStatus)           // 感測器 (黑色:1,白色:0)
  {                        
    case 7:                 // SL:1 SM:1 SR:1 (黑、黑、黑)
      stop();               // 停止
      break;
    case 6:                 // SL:1 SM:1 SR:0 (黑、黑、白)
      turnLeft();           // 左轉
      break;
    case 5:                 // SL:1 SM:0 SR:1 (黑、白、黑)
      stop();               // 停止
      break;
    case 4:                 // SL:1 SM:0 SR:0 (黑、白、白)
      turnLeft();           // 左轉
      break;
    case 3:                 // SL:0 SM:1 SR:1 (白、黑、黑)
      turnRight();          // 右轉
      break;
    case 2:                 // SL:0 SM:1 SR:0 (白、黑、白)
      forward();            // 前進
      break;
    case 1:                 // SL:0 SM:0 SR:1 (白、白、黑)
      turnRight();          // 右轉
      break;
    case 0:                 // SL:0 SM:0 SR:0 (白、白、白)
      forward();            // 前進
  }  
}


void loop()
{
  while(sw==0)
  {
     int nIRStatus;
     byteSensorStatus = 0;                  //清除感測器狀態值

     nIRStatus = digitalRead(SLeftLeft);    // 讀取左感測器狀態值
     if(nIRStatus == 1)
     byteSensorStatus = (byteSensorStatus | (0x01 << 2));

     nIRStatus = digitalRead(SMiddle);      // 讀取中間感測器狀態值
     if(nIRStatus == 1)
     byteSensorStatus = (byteSensorStatus | (0x01 << 1));

     nIRStatus = digitalRead(SRightRight);  // 讀取右邊感測器狀態值
     if(nIRStatus == 1)
     byteSensorStatus = (byteSensorStatus | 0x01);

     drivemotor(byteSensorStatus);
  }
  if (Serial.available () > 0)            
    {   
      serialA = Serial.read();      
      Serial.println(serialA);
      switch (serialA)
      {
         case 'e':
         {
           if(sw==0)
           {
             sw=1;
           }
           if(sw==1)
           {
             sw=0;
           }
         }
          case 's' : // 接收 's',停止
            stop();
            break;
      }
    }   
}
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-23 15:53 , Processed in 0.219626 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表