// EPOCH PROJECT#3 "INPUTS AND OUTPUTS AND THE FOR LOOP" // THIS PROJECT BUILDS OFF OF PROJECT#2. THE GOAL HERE IS TO FLASH THREE LEDS IN A SPECIFIC SEQUENCE WHEN A BUTTON IS PRESSED. WE IMPLEMENT A "FOR LOOP", WHICH IS TALKED ABOUT IN DEPTH BELOW IN THE "NOTES" SECTION. // CONNECT THE RLED (RED LED) PIN TO GPIO PIN#2 ON CHIP(A) // CONNECT THE YLED (YELLOW LED) PIN TO GPIO PIN#4 ON CHIP(A) // CONNECT THE GLED(GREEN LED) PIN TO GPIO PIN#5 ON CHIP(A) // CONNECT THE NL "NORMALLY LOW" BUTTON OUTPUT PIN TO GPIO PIN 3 ON CHIP(A). THE VOLTAGE ON THIS PIN IS 0V (LOW) WHEN NOT PRESSED. WHEN THE BUTTON IS PRESSED AND HELD DOWN, THE VOLTAGE ON THIS PIN WILL BE 5V(HIGH) #define REDLED 2 // LET'S CALL GPIO#2 BY THE NAME "REDLED". #define YELLOWLED 4 // LET'S CALL GPIO#4 BY THE NAME "YELLOWLED". #define GREENLED 5 // LET'S CALL GPIO#5 BY THE NAME "GREENLED". #define NL 3 // LET'S CALL GPIO#3 BY THE NAME "NL" FOR "NORMALLY LOW BUTTON" void setup() { pinMode(REDLED,OUTPUT); // SET "REDLED" AS AN OUTPUT pinMode(YELLOWLED,OUTPUT); // SET "YELLOWLED" AS AN OUTPUT pinMode(GREENLED,OUTPUT); // SET "GREENLED" AS AN OUTPUT pinMode(NL,INPUT); // SET "NL" AS AN INPUT. WE CAN NOW INSTRUCT THE CODE TO LOOK AT THE HIGH (5 VOLT) OR LOW (0 VOLT) LOGIC ON THIS INPUT. } void loop() // WHEN THE NL BUTTON IS PRESSED, A "FOR LOOP" WILL BE EXECUTED. WE'LL TALK ABOUT THAT MORE DOWN BELOW. { if(digitalRead(NL) == HIGH) // THIS IS AN "if" STATEMENT. IF THE CONDITIONS IN THIS STATEMENT ARE MET, THEN THE FOLLOWING CODE WILL BE EXECUTED. THE DIGITALREAD COMMAND READS THE STATE OF THE NL PIN. IF PRESSED (HIGH), FLASH THE LED FOR ONE SECOND. { for (int i = 0; i < 5; i++) // SEE THE NOTES SECTION BELOW FOR A MORE IN DEPTH DECRIPTION OF A "FOR LOOP" { digitalWrite(REDLED,HIGH); // THOS FOLLOWING SECTION WILL EXEUTE 5X TIMES BASED ON THE SETTINGS IN THE ABOVE FOR LOOP. TURN THE RED LED ON FOR 200ms. delay(200); digitalWrite(YELLOWLED,HIGH); // AFTER 200ms, TURN ON THE YELLOW LED delay(200); digitalWrite(GREENLED,HIGH); // AFTER ANOTHER 200ms, TURN ON THE GREEN LED delay(200); digitalWrite(GREENLED,LOW); // THEN TURN OFF ALL OF THE LEDS WITH 200ms DELAYS IN BEWEEN EACH STEP delay(200); digitalWrite(YELLOWLED,LOW); delay(200); digitalWrite(REDLED,LOW); delay(200); } } } // THIS IS THE END OF THE LOOP. THE CODE NOW GOES BACK TO THE TOP OF VOID LOOP() // NOTES: // LET'S TALK MORE ABOUT THE "FOR" LOOP: for (int i = 0; i < 5; i++) // THERE ARE THREE KEY THINGS TO LOOK AT HERE. THE FOR LOOP IS USED WHEN YOU WANT TO REPEAT CODE OVER AND OVER UNTIL SPECIFIED CONDITIONS ARE MET. FIRST WE DECLARE AN INTEGER (STORAGE CONDTAINER) and set it to a value of "0": "int i = 0;" // "i < 5;" is the condition at which the FOR LOOP will end. The code will repeat while "i" is less than 5. // "i++" means that "i" will increment each time code is looped. "i++" means essentially "i + 1' // So i starts off at 0 (int i = 0), and the led code above will loop five times, as each time it is looped, int i is incremented by one. // After the first loop, i equals 1. After the second loop, i equals 2, etc. When i equals 5, the loop is over. // Take some time and play around with the FOR LOOP condition. Try changing it from "i < 5" to "i < 10". That will cause the FOR LOOP to loop the LED sequence 10 times instead of 5