Stonybrook University MEC 101 HW#10 Programming Help

I need help badly. I have an exam on Tuesday and this hw assignment is due Tuesday. I have spent all week trying to do the assignment, but it's hard because I have no background in programming. I need help please if anyone can help me answer this question you will make one stressed out student less stress out.

The question asked is to expand the program given by the instructor:

  1. When the left limit switch is hit by an obstacle, the robot reverses (call reverse() function) for 5 seconds, turns right for 5 seconds and then continues to move forward. Do the same when the right switch is hit, except this time have the bot turn left.
  2. During the time when the robot reverses, have an LED mounted visibly high flash rapidly
  3. Next, follow this tutorial at Overview | Arduino Lesson 10. Making Sounds | Adafruit Learning System to program your Piezo buzzer to play a tone while reversing.

Here is a diagram of my circuit

![](http://HW#10 Q1_bb2.jpg)

please help

/*
1. when the left switch is hit by an obstacle, the robot 
reverses (call reverse() function) for 5 seconds, 
turns right for 5 seconds and then continues to move forward. 
Do the same when the right switch is hit, except this time have 
the bot turn left. 
2.  During the time when the robot reverses, 
have an LED mounted visibly high flash rapidly. 
3.3.  Next, follow this tutorial at
https://learn.adafruit.com/adafruit-arduino-lesson-10-making-sounds 
to program your Piezo buzzer to play a tone while reversing.
*/

int motorspeed1 = 3;
int motorspeed2 = 6;
int forward1 = 8;
int forward2 = 9;
int reverse1 = 5;
int reverse2 = 10;
int led=13;
int leftlimitSwitch=4;
int rightlimitSwitch=7;


void setup() 
{
pinMode(motorspeed1, OUTPUT);
pinMode(motorspeed2, OUTPUT);
pinMode(forward1, OUTPUT);
pinMode(forward2, OUTPUT);
pinMode(reverse1, OUTPUT);
pinMode(reverse2, OUTPUT);
pinMode(7, OUTPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}

void forward(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(forward1, HIGH);
digitalWrite(forward2, HIGH);
digitalWrite(reverse1, LOW);
digitalWrite(reverse2, LOW);
}

void reverse(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse1, HIGH);
digitalWrite(reverse2, HIGH);
digitalWrite(forward1, LOW);
digitalWrite(forward2, LOW);
}

void left(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse1, HIGH);
digitalWrite(reverse2, LOW);
digitalWrite(forward1, LOW);
digitalWrite(forward2, HIGH);
}

void right(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse2, HIGH);
digitalWrite(reverse1, LOW);
digitalWrite(forward2, LOW);
digitalWrite(forward1, HIGH);
}

void breaking() 
{
digitalWrite(motorspeed1, HIGH);
digitalWrite(motorspeed2, HIGH);
digitalWrite(reverse2, LOW);
digitalWrite(reverse1, LOW);
digitalWrite(forward2, LOW);
digitalWrite(forward1, LOW);
}

void accelerate(int i)
{
forward(0);
for(int i=0; i<255; i++)
{
analogWrite(motorspeed1, i);
analogWrite(motorspeed2, i);
delay(10);
} 
}
void decelerate(int i)
{
forward(0);
for(int i=255; i> 0 ; i = i--)
{
analogWrite(motorspeed1, i);
analogWrite(motorspeed2, i);
delay(10);

} 
}

void loop() 
{   
forward(200); // both motor turn on
delay(5000);  // turn off both motors
left(200);    // turn on left motor
delay(5000);
reverse(200);
delay(5000);
right(200);
delay(5000);
accelerate(250);
delay(4500);
decelerate(250);
delay(4500);
}

So, the drill is simple enough:

  1. Edit your post to display your code in code tags as instructed here in Item # 7 here:
    http://forum.arduino.cc/index.php/topic,148850.0.html

  2. Explain what your code is supposed to do (you’ve done that).

  3. Explain what your code actually does and how it is different than what you want.

  4. People on the forum will make suggestions about how to fix / improve your code.

  5. You change your code per the suggestions and try it out.

  6. If the code’s behavior matches your expectations, you’re done.

  7. If the code’s behavior doesn’t match your expectations, go back to Step #3.

Have you posted the instructors example, or your code? Please post both, so we can see that you actually tried.

the code I posted on my first post was the instructors the one below is mine

/*
1. when the left switch is hit by an obstacle, the robot 
reverses (call reverse() function) for 5 seconds, 
turns right for 5 seconds and then continues to move forward. 
Do the same when the right switch is hit, except this time have 
the bot turn left. 
2.  During the time when the robot reverses, 
have an LED mounted visibly high flash rapidly. 
3.3.  Next, follow this tutorial at
https://learn.adafruit.com/adafruit-arduino-lesson-10-making-sounds 
to program your Piezo buzzer to play a tone while reversing.
*/
byte userInput = 0;
int motorspeed1 = 3;
int motorspeed2 = 6;
int forward1 = 8;
int forward2 = 9;
int reverse1 = 5;
int reverse2 = 10;
int leftlimitSwitch=4;
int rightlimitSwitch=7;
int BUTTON_PIN;
int buttonState=13;
int speakerPin = 12;
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
//            mid C  C#   D    D#   E    F    F#   G    G#   A

void setup() 
{
pinMode(motorspeed1, OUTPUT);
pinMode(motorspeed2, OUTPUT);
pinMode(forward1, OUTPUT);
pinMode(forward2, OUTPUT);
pinMode(reverse1, OUTPUT);
pinMode(reverse2, OUTPUT);
pinMode(13, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
pinMode(4, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
}

void forward(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(forward1, HIGH);
digitalWrite(forward2, HIGH);
digitalWrite(reverse1, LOW);
digitalWrite(reverse2, LOW);
}

void reverse(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse1, HIGH);
digitalWrite(reverse2, HIGH);
digitalWrite(forward1, LOW);
digitalWrite(forward2, LOW);
}

void left(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse1, HIGH);
digitalWrite(reverse2, LOW);
digitalWrite(forward1, LOW);
digitalWrite(forward2, HIGH);
}

void right(int ocr) 
{
analogWrite(motorspeed1, ocr);
analogWrite(motorspeed2, ocr);
digitalWrite(reverse2, HIGH);
digitalWrite(reverse1, LOW);
digitalWrite(forward2, LOW);
digitalWrite(forward1, HIGH);
}

void breaking() 
{
digitalWrite(motorspeed1, HIGH);
digitalWrite(motorspeed2, HIGH);
digitalWrite(reverse2, LOW);
digitalWrite(reverse1, LOW);
digitalWrite(forward2, LOW);
digitalWrite(forward1, LOW);
}

void accelerate(int i)
{
 forward(0);
 for(int i=0; i<255; i++)
 {
 analogWrite(motorspeed1, i);
 analogWrite(motorspeed2, i);
 delay(10);
} 
}
void decelerate(int i)
{
 forward(0);
 for(int i=255; i> 0 ; i = i--)
{
 analogWrite(motorspeed1, i);
 analogWrite(motorspeed2, i);
 delay(10);

} 
}

void loop() 
{   
forward(200); // both motor turn on
delay(5000);  // turn off both motors
left(200);    // turn on left motor
delay(5000);
reverse(200);
delay(5000);
right(200);
delay(5000);
accelerate(250);
delay(4500);
decelerate(250);
delay(4500);
buttonState = digitalRead(BUTTON_PIN);
Serial.print (buttonState);
 
//Go forward
 if (userInput == '1') { 
   Serial.println(" moving in...");
   while(digitalRead(leftlimitSwitch) != LOW){
     reverse(200);
   }
   Serial.println(" done");    
 }

 //Go back
 if (userInput == '2'){
   Serial.println(" moving out...");
   while(digitalRead(rightlimitSwitch) != LOW){
     reverse(200);
   }
   Serial.println(" done");
 }
 userInput = 0;
}

Is this Stonybrook, or Stony Brook?

Please remember to use code tags when posting code.

Now, please follow suggestion #1 in reply #1. :slight_smile:

void breaking() The instructor's code ? :o

Where does user input come from?

the "user input" came from an example i found I tried plugging it into my code but it didn't work and all the work i did before was gone cause I saved my program to the one shown

Yes, but where does userInput come from? (Hint)

i dont know the teacher just jumped into the topic without any prior lectures and i learn very slowly and im getting really tired

will this work

while (1==1)
{
  digitalWrite (4, HIGH);
  reverse(200);
  delay(5000);
  right(5000);
  delay(5000);
  forward(200);
}
while (1==1)
{
  digitalWrite (7, HIGH);
  reverse(200);
  delay(5000);
  left(5000);
  delay(5000);
  forward(200); 
}
}

It really depends on what "work" means.

Think about what a while(true) loop does without a "break"

You still haven't told us what YOUR code actually does and how that falls short of what you need it to do.

i need the code to tell my arduino uno that when the left limit or right limit switch hits an object an object the robot will move backwards for 5 seconds, turn right for five seconds, and continues forward.

Have another read of reply #12.
Let it sink in.