unsigned long timestart; unsigned long timeend; unsigned long timetotal; int a=105;//speed for left? motor, increased from 80 int b=85; int c=650;//value for photoresistor day/night higher = less light to keep going int d=820;//upper voltage value int t1=1; int volt=A1;//bumper input pin int val=0;//initial bumper value int val1=100;//initial value for photocell 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 (A1,INPUT); pinMode (2,INPUT); digitalWrite (2,HIGH); randomSeed (analogRead(0)); digitalWrite(brakeA,LOW); digitalWrite(brakeB,LOW); digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,0);//changed to reflect no overcurrent mode analogWrite(pwmB,0); //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); x=500;//arbitray number timestart=millis(); } void loop() { bumper=digitalRead(2); if (bumper==0) {//bumper depressed randNumber=random(1,5);//changed august 12 from 1,4 if(randNumber==1) { analogWrite(pwmB,0);//check for power station analogWrite(pwmA,0); delay(500);//stop to read val=analogRead(A2); if (val>100) { val1=analogRead(A3); while ((val100) || (val1>c)) {//was 815 instead of 600 val1=analogRead(A3); val=analogRead(A2); delay(100); }} digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,120);//was 150 analogWrite(pwmB,70);//reverse power delay(500); analogWrite(pwmB,0); delay(750); 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) { analogWrite(pwmB,0);//check for power station analogWrite(pwmA,0); delay(500);//stop to read val=analogRead(A2); if (val>100) { val1=analogRead(A3); while ((val100) ||(val1>c)) { val1=analogRead(A3); val=analogRead(A2); delay(100); }} digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,70);//was 150 analogWrite(pwmB,120);//reverse power delay(600); analogWrite(pwmA,0); delay(1000); 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) { analogWrite(pwmB,0);//check for power station analogWrite(pwmA,0); delay(500);//stop to read val=analogRead(A2); if (val>100) { val1=analogRead(A3); while ((val100) || (val1>c)) { val1=analogRead(A3); val=analogRead(A2); delay(100); }} digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,a);//was 150 analogWrite(pwmB,b);//reverse power delay(600); digitalWrite(dirB,HIGH); analogWrite(pwmB,150); delay(800); 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(); } if(randNumber==4) { analogWrite(pwmB,0);//check for power station analogWrite(pwmA,0); delay(500);//stop to read val=analogRead(A2); if (val>100) { val1=analogRead(A3); while ((val100) || (val1>c)) {//was 815 instead of 600 val1=analogRead(A3); val=analogRead(A2); delay(100); }} digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,a);//was 150 analogWrite(pwmB,b);//reverse power delay(500); analogWrite(pwmB,0); delay(1000); analogWrite(pwmA,0);//stop digitalWrite(dirA,HIGH); digitalWrite(dirB,HIGH); analogWrite(pwmA,a); analogWrite(pwmB,b); delay(1000); t1=0; timestart=millis(); } if(randNumber==5) { analogWrite(pwmB,0);//check for power station analogWrite(pwmA,0); delay(500);//stop to read val=analogRead(A2); if (val>100) { val1=analogRead(A3); while ((val100) || (val1>c)) {//was 815 instead of 600 val1=analogRead(A3); val=analogRead(A2); delay(100); }} digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,a);//was 150 analogWrite(pwmB,b);//reverse power delay(400); analogWrite(pwmB,0); delay(800); analogWrite(pwmA,0);//stop 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>30000) { digitalWrite(dirA,LOW); digitalWrite(dirB,LOW);//reverse analogWrite(pwmA,a);//was 150 analogWrite(pwmB,b);//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(); } }