Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Arduino Multitasking
- Author : CircuitDigest (circuitdigest.com)
- */
- int led1 = 6; // led1 connected at pin 6
- int led2 = 7; // led1 connected at pin 7
- int toggleLed = 5; // push button controlled led connected at pin 5
- int pushButton = 2; // push butoon connected at pin 2 which is also interrupt pin
- int ledState1 = LOW; // to determine the states of led1 and led2
- int ledState2 = LOW;
- unsigned long previousMillis1 = 0; //store last time LED1 was blinked
- const long period1 = 1000; // period at which led1 blinks in ms
- unsigned long previousMillis2 = 0; //store last time LED2 was blinked
- const long period2 = 200; // period at which led1 blinks in ms
- int debouncePeriod = 20; // debounce delay of 20ms
- int debounceMillis = 0; // similar to previousMillis
- bool buttonPushed = false; // interrupt routine button status
- int ledChange = LOW; // to track the led status last
- int lastState = HIGH; // to track last button state
- void setup() {
- pinMode(led1, OUTPUT); // define pins as input or output
- pinMode(led2, OUTPUT);
- pinMode(toggleLed, OUTPUT);
- pinMode(pushButton, INPUT);
- attachInterrupt(digitalPinToInterrupt(pushButton), pushButton_ISR, CHANGE); // use interrupt pin2
- }
- void pushButton_ISR()
- {
- buttonPushed = true; // ISR should be as short as possible
- }
- void loop() {
- unsigned long currentMillis = millis(); // store the current time
- if (currentMillis - previousMillis1 >= period1) { // check if 1000ms passed
- previousMillis1 = currentMillis; // save the last time you blinked the LED
- if (ledState1 == LOW) { // if the LED is off turn it on and vice-versa
- ledState1 = HIGH; //change led state for next iteration
- } else {
- ledState1 = LOW;
- }
- digitalWrite(led1, ledState1); //set LED with ledState to blink again
- }
- if (currentMillis - previousMillis2 >= period2) { // check if 1000ms passed
- previousMillis2 = currentMillis; // save the last time you blinked the LED
- if (ledState2 == LOW) { // if the LED is off turn it on and vice-versa
- ledState2 = HIGH;
- } else {
- ledState2 = LOW;
- }
- digitalWrite(led2, ledState2);//set LED with ledState to blink again
- }
- if (buttonPushed = true) // check if ISR is called
- {
- if ((currentMillis - debounceMillis) > debouncePeriod && buttonPushed) // generate 20ms debounce delay to avoid multiple presses
- {
- debounceMillis = currentMillis; // save the last debounce delay time
- if (digitalRead(pushButton) == LOW && lastState == HIGH) // change the led after push button is pressed
- {
- ledChange = ! ledChange;
- digitalWrite(toggleLed, ledChange);
- lastState = LOW;
- }
- else if (digitalRead(pushButton) == HIGH && lastState == LOW)
- {
- lastState = HIGH;
- }
- buttonPushed = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement