Robofun 機器人論壇

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

Arduion切換部分

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-4-18 18:00:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教各位大大,小弟我使用App Inventor透過HC-06藍芽模組來使Arduion切換避障與停止,請問我寫的程是是否哪裡出了些問題,無法使App Inventor來切換動作請各位大大提點我


#include <Servo.h>
#include <SoftwareSerial.h> // 引用''軟體序列埠''程式庫

SoftwareSerial BT(3,2); // 設定軟體序列埠(接收腳,傳送腳)
char command;   // 接收序列埠的變數
const byte speed = 255; // 馬達的 PWM 輸出值
const byte ENA = 5; // 馬達 A 的致能接腳
const byte ENB = 6; // 馬達 B 的致能接腳

int pinLB=10;     // 定義10腳位 左後
int pinLF=9;     // 定義9腳位 左前
int pinRB=8;    // 定義8腳位 右後
int pinRF=7;    // 定義7腳位 右前

int inputPin = A0;  // 定義超音波信號接收腳位
int outputPin =A1;  // 定義超音波信號發射腳位

int Fspeedd = 0;      // 前速
int Rspeedd = 0;      // 右速
int Lspeedd = 0;      // 左速
int directionn = 0;   // 前=8 後=2 左=4 右=6
Servo myservo;        // 設 myservo
int delay_time = 255; // 伺服馬達轉向後的穩定時間

int Fgo = 8;         // 前進
int Rgo = 6;         // 右轉
int Lgo = 4;         // 左轉
int Bgo = 2;         // 倒車
void setup()
{
  Serial.begin(9600);     // 定義馬達輸出腳位
  pinMode(pinLB,OUTPUT); // 腳位 7 (PWM)
  pinMode(pinLF,OUTPUT); // 腳位 8 (PWM)
  pinMode(pinRB,OUTPUT); // 腳位 9 (PWM)
  pinMode(pinRF,OUTPUT); // 腳位 10 (PWM)

  pinMode(inputPin, INPUT);    // 定義超音波輸入腳位
  pinMode(outputPin, OUTPUT);  // 定義超音波輸出腳位   

  myservo.attach(4);    // 定義伺服馬達輸出第4腳位(PWM)
  pinMode(pinLB,OUTPUT); // 馬達驅動模組的接腳全都設定成''輸出''
  pinMode(pinLF,OUTPUT); // 馬達驅動模組的接腳全都設定成''輸出''
  pinMode(pinRB,OUTPUT); // 馬達驅動模組的接腳全都設定成''輸出''
  pinMode(pinRF,OUTPUT); // 馬達驅動模組的接腳全都設定成''輸出''
  stop();              // 先停止馬達
}
//-------------------------------------------
void stop() // 馬達停止
{
  analogWrite(ENA,0); // 馬達 A 的 PWM 輸出
  analogWrite(ENB,0); // 馬達 B 的 PWM 輸出
}
//-------------------------------------------
void advance(int a)     // 前進
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,LOW);  
     digitalWrite(pinRF,HIGH);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,LOW);  
     digitalWrite(pinLF,HIGH);
     delay(a * 100);     
    }

void right(int b)        //右轉(單輪)
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,LOW);   
     digitalWrite(pinRF,HIGH);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     delay(b * 100);
    }
void left(int c)         //左轉(單輪)
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,LOW);   
     digitalWrite(pinLF,HIGH);
     delay(c * 100);
    }
void turnR(int d)        //右轉(雙輪)
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,LOW);  
     digitalWrite(pinRF,HIGH);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,LOW);  
     delay(d * 100);
    }
void turnL(int e)        //左轉(雙輪)
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,LOW);   
     analogWrite(ENB,speed);
     digitalWrite(pinLB,LOW);   
     digitalWrite(pinLF,HIGH);
     delay(e * 100);
    }   
void stopp(int f)         //停止
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,HIGH);
     digitalWrite(pinRF,HIGH);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,HIGH);
     digitalWrite(pinLF,HIGH);
     delay(f * 100);
    }
void back(int g)          //後退
    {
     analogWrite(ENA,speed);
     digitalWrite(pinRB,HIGH);  
     digitalWrite(pinRF,LOW);
     analogWrite(ENB,speed);
     digitalWrite(pinLB,HIGH);  
     digitalWrite(pinLF,LOW);
     delay(g * 100);     
    }

void detection()        
    {      
      int delay_time = 255;   
      ask_pin_F();            

     if(Fspeedd < 4)         

      {
      stopp(1);              
      back(2);               
      }

      if(Fspeedd < 20)         
      {
        stopp(1);               
        ask_pin_L();            
        delay(delay_time);      
        ask_pin_R();              
        delay(delay_time);      

        if(Lspeedd > Rspeedd)   
        {
         directionn = Lgo;      
        }

        if(Lspeedd <= Rspeedd)   
        {
         directionn = Rgo;      
        }

        if (Lspeedd < 3 && Rspeedd < 3)   
        {
         directionn = Bgo;            
        }         
      }
      else                          
      {
        directionn = Fgo;            
      }

    }   
void ask_pin_F()   
    {
      myservo.write(90);
      digitalWrite(outputPin, LOW);   
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);   
      float Fdistance = pulseIn(inputPin, HIGH);  
      Fdistance= Fdistance/5.8/10;      
      Serial.print("F distance:");      
      Serial.println(Fdistance);         
      Fspeedd = Fdistance;              
    }  
void ask_pin_L()   
    {
      myservo.write(10);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);   
      float Ldistance = pulseIn(inputPin, HIGH);  
      Ldistance= Ldistance/5.8/10;      
      Serial.print("L distance:");      
      Serial.println(Ldistance);         
      Lspeedd = Ldistance;              
    }  
void ask_pin_R()   
    {
      myservo.write(177);
      delay(delay_time);
      digitalWrite(outputPin, LOW);   
      delayMicroseconds(2);
      digitalWrite(outputPin, HIGH);  
      delayMicroseconds(10);
      digitalWrite(outputPin, LOW);   
      float Rdistance = pulseIn(inputPin, HIGH);  
      Rdistance= Rdistance/5.8/10;      
      Serial.print("R distance:");      
      Serial.println(Rdistance);        
      Rspeedd = Rdistance;              
    }  

void car()
{
    myservo.write(90);  
    detection();        
    Serial.print("direction:");      
    Serial.println(directionn);        
   if(directionn == 2)  //假如directionn(方向) = 2         
   {
     back(8);                  
     turnL(2);                  
     Serial.print(" Reverse ");   
   }
   if(directionn == 6)            
   {
     back(1);
     turnR(6);                  
     Serial.print(" Right ");   
   }
   if(directionn == 4)            
   {  
     back(1);      
     turnL(6);                  
     Serial.print(" Left ");     
   }  
   if(directionn == 8)              
   {
    advance(1);                 
    Serial.print(" Advance ");  
    Serial.print("   ");   
   }
}
//------------------------------------------
void loop()
{
  if (BT.available() > 0)
  {
    command = BT.read();
    switch (command)
    {
      case 's' : // 接收 's',停止
        stop();
        break;
      case 'x' : // 接收 'x',避障
        car();
        break;  
    }
  }
}
/***********************************************************************/
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 04:25 , Processed in 0.301734 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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