const int EnableL = 5; const int HighL = 7; // LEFT SIDE MOTOR const int LowL =6; const int EnableR = 10; const int HighR = 8; //RIGHT SIDE MOTOR const int LowR =9; const int D0 = 0; //Raspberry pin 21 LSB const int D1 = 1; //Raspberry pin 22 const int D2 = 2; //Raspberry pin 23 const int D3 = 3; //Raspberry pin 24 MSB int a,b,c,d,data; void setup() { pinMode(EnableL, OUTPUT); pinMode(HighL, OUTPUT); pinMode(LowL, OUTPUT); pinMode(EnableR, OUTPUT); pinMode(HighR, OUTPUT); pinMode(LowR, OUTPUT); pinMode(D0, INPUT_PULLUP); pinMode(D1, INPUT_PULLUP); pinMode(D2, INPUT_PULLUP); pinMode(D3, INPUT_PULLUP); } void Data() { a = digitalRead(D0); b = digitalRead(D1); c = digitalRead(D2); d = digitalRead(D3); data = 8*d+4*c+2*b+a; } void Forward() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,180); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,180); } void Backward() { digitalWrite(HighL, HIGH); digitalWrite(LowL, LOW); analogWrite(EnableL,255); digitalWrite(HighR, HIGH); digitalWrite(LowR, LOW); analogWrite(EnableR,255); } void Stop() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,0); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,0); } void Left1() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,160); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,255); } void Left2() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,90); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,255); } void Left3() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,50); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,255); } void Right1() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,255); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,160); //200 } void Right2() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,255); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,90); //160 } void Right3() { digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL,255); digitalWrite(HighR, LOW); digitalWrite(LowR, HIGH); analogWrite(EnableR,50); //100 } void UTurn() { analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(400); analogWrite(EnableL, 250); analogWrite(EnableR, 250); //forward delay(1000); analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(400); digitalWrite(HighL, HIGH); digitalWrite(LowL, LOW); digitalWrite(HighR, LOW); // left digitalWrite(LowR, HIGH); analogWrite(EnableL, 255); analogWrite(EnableR, 255); delay(700); analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(400); digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); digitalWrite(HighR, LOW); // forward digitalWrite(LowR, HIGH); analogWrite(EnableL, 255); analogWrite(EnableR, 255); delay(900); analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(400); digitalWrite(HighL, HIGH); digitalWrite(LowL, LOW); digitalWrite(HighR, LOW); //left digitalWrite(LowR, HIGH); analogWrite(EnableL, 255); analogWrite(EnableR, 255); delay(700); analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(1000); digitalWrite(HighL, LOW); digitalWrite(LowL, HIGH); digitalWrite(HighR, LOW); digitalWrite(LowL, HIGH); analogWrite(EnableL, 150); analogWrite(EnableR, 150); delay(300); } void loop() { Data(); if(data==0) { Forward(); } else if(data==1) { Right1(); } else if(data==2) { Right2(); } else if(data==3) { Right3(); } else if(data==4) { Left1(); } else if(data==5) { Left2(); } else if(data==6) { Left3(); } else if (data==7) { Stop(); delay(5000); } else if (data==8) { analogWrite(EnableL, 0); analogWrite(EnableR, 0); delay(4000); // stop sign detection analogWrite(EnableL, 150); analogWrite(EnableR, 150); delay(1000); } else if(data>8) { Stop(); } }