unsigned long timestart; unsigned long timeend; unsigned long timetotal; int a=80;//speed for one motor int b=85; int t1=1; int bumper=1;//setup bumper not pressed long randNumber; int x=1;//current read value to be determined in setup int x1=0;//first of multiple reads int x2=0; int x3=0; int x4=0; int x5=0; int y=0;//counts for overcurrent rather than spike int z=0;//storage area for temporary current reads const int pwmA=3; const int pwmB=11; const int brakeA=9; const int brakeB=8; const int dirA=12; const int dirB=13; void setup() { pinMode (dirA,OUTPUT); pinMode (brakeA,OUTPUT); pinMode (dirB,OUTPUT); pinMode (brakeB,OUTPUT); pinMode (2,INPUT); digitalWrite (2,HIGH); randomSeed (analogRead(0)); digitalWrite(brakeA,LOW); digitalWrite(brakeB,LOW); digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(2000);//get motors started x1=analogRead(A0);//set normal motor value delay(10); x2=analogRead(A0); delay(10); x3=analogRead(A0); delay(10); x4=analogRead(A0); delay(10); x5=analogRead(A0); x=((x1+x2+x3+x4+x5)/5); timestart=millis(); } void loop() { bumper=digitalRead(2); if (bumper==0) {//bumper depressed randNumber=random(1,4); if(randNumber==1) { digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,150); analogWrite(pwmB,150);//reverse power delay(1000); analogWrite(pwmB,0); delay(1500); analogWrite(pwmA,0);//stop digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); } if (randNumber==2) { digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,150); analogWrite(pwmB,150);//reverse power delay(1000); analogWrite(pwmA,0); delay(1500); analogWrite(pwmB,0);//stop digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); } if (randNumber==3) { digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,150); analogWrite(pwmB,150);//reverse power delay(1000); digitalWrite(dirB,HIGH); analogWrite(pwmB,150); delay(1000); analogWrite(pwmA,0);//stop analogWrite(pwmB,0); digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); }} //main body of action if (t1=0) { timestart = millis(); t1=1; } if (t1=1) { timeend = millis(); timetotal= (timeend-timestart); } if (timetotal>40000) { digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,150); analogWrite(pwmB,150);//reverse power delay(1000); digitalWrite(dirB,HIGH); analogWrite(pwmB,150); delay(1000); analogWrite(pwmA,0);//stop analogWrite(pwmB,0); digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); } digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); z=analogRead(A0);//read current if (z>(x+210)) {//turn around and restart digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,150); analogWrite(pwmB,150);//reverse power delay(1000); digitalWrite(dirB,HIGH); analogWrite(pwmB,150); delay(600); analogWrite(pwmA,0);//stop analogWrite(pwmB,0); digitalWrite(dirA,HIGH);//go forward one second digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); } }