I'm so sorry I didn't have time to reply sooner.
@wildbill it's late here so I won't run any tests right now but thanks for the idea and I'll do it. If I find any hardware issues I'll post them.
@slipstick So you mean like at the start of void loop() where I only set in2 and in4 I should also set in1 and in3 again even though I already used digitalWrite() in setup? Does it only work within that function and the fact that I didn't reset makes my motor driver "throw up its hands in disgust" and mess up the rest of the code? I went through my code to check for those errors and added comments where I added a line. But since it's really too late to be writing in code or normal English for that matter I probably missed some. I can't test to see if my robot works now because it's kind of loud and everyone else is being smart and sleeping. Sorry if my post is incoherent. I can't even tell because I'm not sure how awake I am. Here's the revised code:
const int pwm1 = 11;//left motor
const int in1 = 10;//left backward
const int in2 = 9;//left forward
const int pwm2 = 6;//right motor
const int in3 = 5;// right backward
const int in4 = 4;// right forward
const int led = 13;
const int pingPin = 7;
void setup() {
pinMode (pwm1, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(pwm2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(in2, HIGH);//left motor forward
digitalWrite(pwm1, HIGH);
digitalWrite(in4, HIGH);//right motor forward
digitalWrite(pwm2, HIGH);
delay(1000);
digitalWrite(in2, LOW);
digitalWrite(pwm1, LOW);
digitalWrite(in4, LOW);
digitalWrite(pwm2, LOW);
delay(1000);
digitalWrite(in1, HIGH);// left motor backwards
digitalWrite(pwm1, HIGH);
digitalWrite(in3, HIGH);//right motor backwards
digitalWrite(pwm2, HIGH);
delay(1000);
digitalWrite(in1, LOW);
digitalWrite(pwm1, LOW);
digitalWrite(in3, LOW);
digitalWrite(pwm2, LOW);
digitalWrite(led, HIGH);//led on for five seconds
delay(5000);
digitalWrite(led, LOW);// led off
Serial.begin(9600);// stops doing what i want it to do here
}
void loop(){
digitalWrite(in1, LOW);//added
digitalWrite(pwm1, LOW);//added
digitalWrite(in3, LOW);//added
digitalWrite(pwm2, LOW);//added
digitalWrite(in2, HIGH);//left motor forwards
digitalWrite(pwm1, HIGH);
digitalWrite(in4, HIGH);//left edit that should be right motor forwards
digitalWrite(pwm2, HIGH);
uint8_t i;
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin,HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
duration = pulseIn(pingPin, HIGH);
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
Serial.print("cm");
Serial.println();
if (cm >10){
digitalWrite(in1,LOW);//added
digitalWrite(in2, LOW);//left motor, backwards
digitalWrite(pwm1, LOW);
digitalWrite(in1, HIGH);
digitalWrite(pwm1, HIGH);
//for (i=0; i<255; i++){ i can't even remember why i commented this out. any ideas?
// delay(10);}
digitalWrite(in3,LOW);//added
digitalWrite(in4, LOW);// right motor, backwards
digitalWrite(pwm2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(pwm2, HIGH);
for (i=0; i<255; i++){
delay(10);}
digitalWrite(in3, LOW);//start both motors forward again
digitalWrite(pwm2,LOW);// added is this one of the parts you were talking about?
digitalWrite(in4, HIGH);
digitalWrite(pwm2, HIGH);//added
digitalWrite(in2, LOW);
digitalWrite(pwm1,LOW);//added
digitalWrite(in1, HIGH);
digitalWrite(pwm1, HIGH);//added
delay(30);
}
else{
digitalWrite(in1, LOW);//added
digitalWrite(pwm1, LOW);//added
digitalWrite(in2, HIGH);//keep going straight
digitalWrite(pwm1, HIGH);
digitalWrite(in3, LOW);//added
digitalWrite(pwm2, LOW);//added
digitalWrite(in4, HIGH);
digitalWrite(pwm2, HIGH);
}
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29/ 2;}
I'll test my robot tomorrow or actually today and post the results.
-p.