void motor(char pin,char pwmpin,char state,int val) { pinMode(pin, OUTPUT); if(state==1) { analogWrite(pwmpin,val); digitalWrite(pin,1); } else if(state==2) { analogWrite(pwmpin,val); digitalWrite(pin,0); } else if(state==0) { analogWrite(pwmpin,0); digitalWrite(pin,0); } } void runfoward(int i) //前進 { motor(4,5,1,i); motor(7,6,1,i); } void runback(int j) //后退 { motor(4,5,2,j); motor(7,6,2,j); } void turnL(int m) //左轉 { motor(4,5,1,m); motor(7,6,0,m); } void turnR(int n) //右轉 { motor(4,5,0,n); motor(7,6,1,n); } void stop() //停止 { motor(4,5,0,0); motor(7,6,1,0); } void setup() { Serial.begin(9600); } void loop() { char num1,num2,num3; num1=digitalRead(11); num2=digitalRead(12); num3=digitalRead(2); if((num1==0)&&num2&&num3) { turnL(180); //檢測到左邊傳感器遇到黑線,說明小車右偏了,立即往左轉一點 delay(2); while(1){ num2=digitalRead(12); //循環判斷中間傳感器度數, if(num2==1) { turnL(180); //如果num2==1說明還沒有轉到中間位置,繼續左轉 delay(2);} else break; //檢測到num2==0說明轉過頭了,跳出循環,檢測三個傳感器的狀態再做出相應動作 } //后面道理相同 } else if(num2&&num1&&(num3==0)) { turnR(180); delay(2); while(1) { num2=digitalRead(12); if(num2==1){ turnR(180); delay(2);} else break; } } else { runfoward(250); delay(2); } }
|