#include <Servo.h>
/* Sofia Rodriguez 300374853
12-Feb-2024
Arduino Midterm Prep Exercises
Exercise 3:
1. While push button A is pushed, incrementally rotate the servo motor back and forth between 15° and 120°,
momentarily stopping at each single degree position for 2 to 5 milliseconds.
2. Clicking push button B should turn on the blue LED and rotate the servo to 90°. After 3 seconds the LED
must turn off and the servo must return to the 0° position.
3. While push button C is pressed, sequentially blink each LED twice in any order you like.
4. While push button D is pressed, alternate between the following two system states:
- Rotate the servo to 30° and alternately blink the blue and green LEDs twice.
- Rotate the servo to 120° and alternately blink the orange and red LEDs three times.
*/
int pos = 0;
int count = 0;
Servo myservo;
void setup() {
// put your setup code here, to run once:
//designate all LED pins
pinMode(5, OUTPUT); //amber led
pinMode(6, OUTPUT); //blue led
pinMode(9, OUTPUT); //red led
pinMode(10, OUTPUT); //green led
//designate all push button pins
pinMode(2, INPUT); //push button a (red)
pinMode(12, INPUT); //push button b (green)
pinMode(8, INPUT); //push button c (blue)
pinMode(7, INPUT); //push button d (yellow)
//designate pin 11 to servo motor
myservo.attach(11);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
//turn off all the LEDs
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
//while button A is pushed, servo motor goes back and forth from 15 to 120 degrees, stopping for 5 ms between each degree
while (digitalRead(2) == HIGH){
//goes from 15 to 119 degrees
for (pos=15; pos<120; ){
myservo.write(pos);
//5ms delay before going to the next degree
delay(5);
pos++;
myservo.write(pos);
//goes out the while loop when button A is not pressed
if (digitalRead(2) == LOW)
break;}
//goes from 120 to 16 degrees
for (pos=120; pos>15; ){
myservo.write(pos);
//5ms delay before going to the next degree
delay(5);
pos--;
myservo.write(pos);
//goes out the while loop when button A is not pressed
if (digitalRead(2) == LOW)
break;
}
}
//Button B: turns on blue led and rotates servo mtor to 90 degrees, after 3 sec, turns off the led and rotates servo to 0 degrees
if (digitalRead(12) == HIGH){
//turns on blue led
digitalWrite(6, LOW);
//rotate servo to 90 degrees
myservo.write(90);
//3 second delay
delay(3000);
//turns off blue led
digitalWrite(6, HIGH);
//rotate servo back to 0 degrees
myservo.write(0);
}
//Button C: sequentially blinks twice the LEDs
while (digitalRead(8) == HIGH){
//blink twice amber LED
digitalWrite(5, LOW);
delay(150);
digitalWrite(5, HIGH);
delay(150);
digitalWrite(5, LOW);
delay(150);
digitalWrite(5, HIGH);
delay(300);
//blink twice blue LED
digitalWrite(6, LOW);
delay(150);
digitalWrite(6, HIGH);
delay(150);
digitalWrite(6, LOW);
delay(150);
digitalWrite(6, HIGH);
delay(300);
//blink twice red LED
digitalWrite(9, LOW);
delay(150);
digitalWrite(9, HIGH);
delay(150);
digitalWrite(9, LOW);
delay(150);
digitalWrite(9, HIGH);
delay(300);
//blink twice green LED
digitalWrite(10, LOW);
delay(150);
digitalWrite(10, HIGH);
delay(150);
digitalWrite(10, LOW);
delay(150);
digitalWrite(10, HIGH);
delay(300);
}
//Button D
while (digitalRead(7) == HIGH){
//rotate servo to 30 degrees
myservo.write(30);
for (count = 0; count<2; count++){
//turn on blue and green LEDs
digitalWrite(6, LOW);
digitalWrite(10, LOW);
//delay 150 ms (miliseconds)
delay(150);
//turn off blue and green the LEDs
digitalWrite(6, HIGH);
digitalWrite(10, HIGH);
//delay 200 ms (miliseconds)
delay(200);
}
//rotate servo to 120 degrees
myservo.write(120);
for (count = 0; count<3; count++){
//turn on orange and red LEDs
digitalWrite(5, LOW);
digitalWrite(9, LOW);
//delay 150 ms (miliseconds)
delay(150);
//turn off orange an red the LEDs
digitalWrite(5, HIGH);
digitalWrite(9, HIGH);
//delay 200 ms (miliseconds)
delay(200);
}
}
}