| 
 | 
4#
 
 
 樓主 |
發表於 2018-6-24 17:31:09
|
只看該作者
 
 
 
 本帖最後由 kittylove554 於 2018-6-24 17:39 編輯  
 
#include <SoftwareSerial.h> 
#include<Servo.h> 
Servo servoRight; 
Servo servoLeft; 
SoftwareSerial BT(9,10);   // 接收腳(RX), 傳送腳(TX); 
char val; 
String vals; 
int count1=0; 
char cd[2]; 
int leftOut; 
int leftIn; 
int center; 
int rightIn; 
int rightOut; 
int IRStatus=0; 
int count=0; 
int number1=0; 
void setup() { 
  // put your setup code here, to run once: 
   servoRight.attach(12); 
  servoLeft.attach(13); 
  Serial.begin(9600); //for arduino serial port mointor 
  BT.begin(38400); 
  pinMode(A1,INPUT); 
  pinMode(A2,INPUT); 
  pinMode(A3,INPUT); 
} 
 
void loop() { 
  // put your main code here, to run repeatedly: 
 if(BT.available()){ 
  val=BT.read(); 
  if(val==65) vals+='A';if(val==66) vals+='B';if(val==67) vals+='C'; 
  if(val==68) vals+='D';if(val==69) vals+='E';if(val==70) vals+='F'; 
  if(val==71) vals+='G';if(val==72) vals+='H';if(val==73) vals+='I'; 
  if(val==49) vals+='1';if(val==50) vals+='2';if(val==51) vals+='3'; 
  if(val==52) vals+='4';if(val==53) vals+='5';if(val==54) vals+='6'; 
  if(val==55) vals+='7';if(val==56) vals+='8'; 
  count1++; 
  if(count1==2){ 
    Serial.println(vals); 
    int x=0,y=0; //貨櫃作標 
    int Ax=0,Ay=0;// 車子起點作標 
    int Ansx=0,Ansy=0;//要拿貨的座標 
    int AAnsx=0,AAnsy=0;//車子要走幾步 
 
     ↓這邊因為當初一些設計意外,結果變成這樣麻煩的狀況Q_Q早知道會寫成這樣我就用數字編號貨櫃就好了 
    if(vals=="A1")number1=1;if(vals=="A2")number1=2;if(vals=="A3")number1=3;if(vals=="A4")number1=4; 
    if(vals=="A5")number1=5;if(vals=="A6")number1=6;if(vals=="A7")number1=7;if(vals=="A8")number1=8; 
     
    if(vals=="B1")number1=9;if(vals=="B2")number1=10;if(vals=="B3")number1=11;if(vals=="B4")number1=12; 
    if(vals=="B5")number1=13;if(vals=="B6")number1=14;if(vals=="B7")number1=15;if(vals=="B8")number1=16; 
 
    if(vals=="C1")number1=17;if(vals=="C2")number1=18;if(vals=="C3")number1=19;if(vals=="C4")number1=20; 
    if(vals=="C5")number1=21;if(vals=="C6")number1=22;if(vals=="C7")number1=23;if(vals=="C8")number1=24; 
 
    if(vals=="D1")number1=25;if(vals=="D2")number1=26;if(vals=="D3")number1=27;if(vals=="D4")number1=28; 
    if(vals=="D5")number1=29;if(vals=="D6")number1=30;if(vals=="D7")number1=31;if(vals=="D8")number1=32; 
 
    if(vals=="E1")number1=33;if(vals=="E2")number1=34;if(vals=="E3")number1=35;if(vals=="E4")number1=36; 
    if(vals=="E5")number1=37;if(vals=="E6")number1=38;if(vals=="E7")number1=39;if(vals=="E8")number1=40; 
 
    if(vals=="F1")number1=41;if(vals=="F2")number1=42;if(vals=="F3")number1=43;if(vals=="F4")number1=44; 
    if(vals=="F5")number1=45;if(vals=="F6")number1=46;if(vals=="F7")number1=47;if(vals=="F8")number1=48; 
 
    if(vals=="G1")number1=49;if(vals=="G2")number1=50;if(vals=="G3")number1=51;if(vals=="G4")number1=52; 
    if(vals=="G5")number1=53;if(vals=="G6")number1=54;if(vals=="G7")number1=55;if(vals=="G8")number1=56; 
     
    if(vals=="H1")number1=57;if(vals=="H2")number1=58;if(vals=="H3")number1=59;if(vals=="H4")number1=60; 
    if(vals=="H5")number1=61;if(vals=="H6")number1=62;if(vals=="H7")number1=63;if(vals=="H8")number1=64; 
 
    if(vals=="I1")number1=65;if(vals=="I2")number1=66;if(vals=="I3")number1=67;if(vals=="I4")number1=68; 
    if(vals=="I5")number1=69;if(vals=="I6")number1=70;if(vals=="I7")number1=71;if(vals=="I8")number1=72; 
 
    switch(number1){//放入貨櫃作標 
      case 1: 
      x=2;y=1; 
      break; 
      case 2: 
      x=3;y=1; 
      break; 
      case 3: 
      x=4;y=1; 
      break; 
      case 4: 
      x=5;y=1; 
      break; 
      case 5: 
      x=2;y=2; 
      break; 
      case 6: 
      x=3;y=2; 
      break; 
      case 7: 
      x=4;y=2; 
      break; 
      case 8: 
      x=5;y=2; 
      break; 
      case 9: 
      x=8;y=1; 
      break; 
      case 10: 
      x=9;y=1; 
      break; 
      case 11: 
      x=10;y=1; 
      break; 
      case 12: 
      x=11;y=1; 
      break; 
      case 13: 
       x=8;y=2; 
      break; 
      case 14: 
      x=9;y=2; 
      break; 
      case 15: 
      x=10;y=2; 
      break; 
      case 16: 
      x=11;y=2; 
      break; 
      case 17: 
       x=14;y=1; 
      break; 
      case 18: 
      x=15;y=1; 
      break; 
      case 19: 
      x=16;y=1; 
      break; 
      case 20: 
      x=17;y=1; 
      break; 
      case 21: 
       x=14;y=2; 
      break; 
      case 22: 
      x=15;y=2; 
      break; 
      case 23: 
      x=16;y=2; 
      break; 
      case 24: 
      x=17;y=2; 
      break; 
      case 25: 
      x=2;y=5; 
      break; 
      case 26: 
      x=3;y=5; 
      break; 
      case 27: 
      x=4;y=5; 
      break; 
      case 28: 
      x=5;y=5;    
      break; 
      case 29: 
       x=2;y=6; 
      break; 
      case 30: 
      x=3;y=6; 
      break; 
 
      case 31: 
      x=4;y=6; 
      break; 
      case 32: 
      x=5;y=6; 
      break; 
      case 33: 
       x=8;y=5; 
      break; 
      case 34: 
      x=9;y=5; 
      break; 
      case 35: 
      x=10;y=5; 
      break; 
      case 36: 
      x=11;y=5;     
      break; 
      case 37: 
      x=8;y=6; 
      break; 
      case 38: 
      x=9;y=6; 
      break; 
      case 39: 
      x=10;y=6; 
      break; 
      case 40: 
      x=11;y=6; 
      break; 
 
      case 41: 
      x=14;y=5; 
      break; 
      case 42: 
      x=15;y=5; 
      break; 
      case 43: 
      x=16;y=5; 
      break; 
      case 44: 
      x=17;y=5;     
      break; 
      case 45: 
      x=14;y=6; 
      break; 
      case 46: 
      x=15;y=6; 
      break; 
      case 47: 
      x=16;y=6; 
      break; 
      case 48: 
      x=17;y=6; 
      break; 
      case 49: 
       x=2;y=9; 
      break; 
      case 50: 
      x=3;y=9; 
      break; 
      case 51: 
      x=4;y=9; 
      break; 
      case 52: 
      x=5;y=9;    
      break; 
      case 53: 
       x=2;y=10; 
      break; 
      case 54: 
      x=3;y=10; 
      break; 
      case 55: 
      x=4;y=10; 
      break; 
      case 56: 
      x=5;y=10; 
      break; 
      case 57: 
      x=8;y=9; 
      break; 
      case 58: 
      x=9;y=9; 
      break; 
      case 59: 
      x=10;y=9; 
      break; 
      case 60: 
      x=11;y=9;    
      break; 
      case 61: 
       x=8;y=10; 
      break; 
      case 62: 
      x=9;y=10; 
      break; 
      case 63: 
      x=10;y=10; 
      break; 
      case 64: 
      x=11;y=10; 
      break; 
      case 65: 
      x=14;y=9; 
      break; 
      case 66: 
      x=15;y=9; 
      break; 
      case 67: 
      x=16;y=9; 
      break; 
      case 68: 
      x=17;y=9;    
      break; 
      case 69: 
       x=14;y=10; 
      break; 
      case 70: 
      x=15;y=10; 
      break; 
 
      case 71: 
      x=16;y=10; 
      break; 
      case 72: 
      x=17;y=10; 
      break; 
      } 
    Serial.println(x); 
    Serial.println(y); 
    if(vals.charAt(1)=='1'||vals.charAt(1)=='2'||vals.charAt(1)=='3'||vals.charAt(1)=='4'){ 
        //下面拿貨 ex 貨櫃A1(2,1) 
        Ansx=x-Ax;//拿貨x   Ax起點(0) x貨櫃(2) Ansx拿貨(2) 
        Ansy=y-Ay-1;//拿貨y Ay起點(0) y貨櫃(1) Ansy拿貨(0) 
        } 
      else{//上面拿貨 ex 貨櫃A5(2,2) 
        Ansx=x-Ax;//拿貨x   Ax起點(0) x貨櫃(2) Ansx拿貨(2) 
        Ansy=y-Ay+2;//拿貨y Ay起點(0) y貨櫃(2) Ansy拿貨(4) 
        } 
        //要去(2,4)座標 
        AAnsx=Ansx-(Ax); //Ansx拿貨座標(2) Ax起點(0) AAnsx步數(2) 
        AAnsy=Ansy-(Ay); //Ansy拿貨座標(4) Ay終點(0) AAnsy步數(4) 
        Serial.println(AAnsx); 
        Serial.println(AAnsy); 
      for(int q=0;q<=AAnsy;q++) {//直走 
      if(q!=AAnsy) {  
         forward(450); 
         turnLeft(27);//車子會右偏,所以往左校正一些 
      } 
      else {//右轉 
         forward(450); 
         turnRight(650); 
         turnLeft(27);    
      } 
    } 
    for(int w=1;w<=AAnsx;w++) {//右轉後直走 
      if(w!=AAnsx) { 
        forward(500); 
        //turnRight(50); 
      } 
      else {//停下 
        stopward(3000); 
      } 
    } 
    count1=0; 
    vals=""; 
    stopward(100); 
    } 
  } 
} 
↓目前使用3燈,不知是否使用5燈會好點? 
void getSensorData(){ 
  leftIn=digitalRead(A1); 
  center=digitalRead(A2); 
  rightIn=digitalRead(A3); 
  } 
   switch(IRStatus){ 
    case 0: 
         stopward(100); 
    break; 
    case 1:  
         turnLeft(250); 
         break; 
    case 2: 
          stopward(100); 
    break; 
    case 3:  
         turnLeft(300); 
         break; 
    case 4:  
         turnRight(250); 
         break; 
    case 5: 
         forward(450); 
    break; 
    case 6:  
         turnRight(300); 
         break; 
    case 7: 
          stopward(100); 
    break; 
    } 
  } 
int backward(int delaytime){ 
  servoRight.writeMicroseconds(1300); 
  servoLeft.writeMicroseconds(1700); 
  delay(delaytime); 
  } 
int turnLeft(int delaytime){ 
  servoRight.writeMicroseconds(1300); 
  servoLeft.writeMicroseconds(1300); 
  delay(delaytime); 
  } 
int turnRight(int delaytime){ 
  servoRight.writeMicroseconds(1700); 
  servoLeft.writeMicroseconds(1700); 
  delay(delaytime); 
  } 
int forward(int delaytime){ 
  servoRight.writeMicroseconds(1700); 
  servoLeft.writeMicroseconds(1300); 
  delay(delaytime); 
} 
  } 
int stopward(int delaytime){ 
  servoRight.writeMicroseconds(1500); 
  servoLeft.writeMicroseconds(1500); 
  delay(delaytime); 
  } |   
 
 
 
 |