Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // You can use this code on:
- // https://wokwi.com/projects/new/arduino-uno
- // name: demo__one_button_mode.ino
- // settings: diagram.json
- const byte BUTTON_PIN = 2;
- const byte LEDS_PIN[5] = { 13, 12, 11, 10, 9 };
- const byte LEDS_PIN_REVERS[5] = { 9, 10, 11, 12, 13 };
- const byte LEDS_PIN_COUNT = 5;
- const byte MAX_MODE = 6;
- void setup() {
- //Serial.begin(115200);
- for (byte led: LEDS_PIN)
- pinMode(led, OUTPUT);
- pinMode(BUTTON_PIN, INPUT_PULLUP);
- }
- byte buttonLastState = LOW;
- byte mode = 0;
- void loop() {
- byte buttonCurrentState = digitalRead(BUTTON_PIN);
- if (buttonLastState != buttonCurrentState) {
- buttonLastState = buttonCurrentState;
- if (buttonCurrentState == LOW) {
- mode += 1;
- if (mode > MAX_MODE) mode = 0;
- //Serial.println(mode);
- }
- }
- switch (mode) {
- case 1: ledLightsSolid(); break;
- case 2: ledLightsOff(); ledLightsBlinkInLine(); break;
- case 3: ledLightsOff(); ledLightsBlinkInLineRevers(); break;
- case 4: ledLightsOff(); ledLightsBlinkInPingPong(); break;
- case 5: ledLightsFadeInOut(); break;
- case 6: ledLightsFromMiddleSolid(); break;
- default: ledLightsOff(); // mode = 0
- }
- }
- void ledLightsOff() {
- for (byte led: LEDS_PIN)
- digitalWrite(led, LOW);
- }
- void ledLightsSolid() {
- for (byte led: LEDS_PIN)
- digitalWrite(led, HIGH);
- }
- void ledLightsBlinkInLine() {
- for (byte led: LEDS_PIN) {
- digitalWrite(led, HIGH);
- if (delayLoop(150)) return;
- digitalWrite(led, LOW);
- }
- }
- void ledLightsBlinkInLineRevers() {
- for (byte led: LEDS_PIN_REVERS) {
- digitalWrite(led, HIGH);
- if (delayLoop(150)) return;
- digitalWrite(led, LOW);
- }
- }
- void ledLightsBlinkInPingPong() {
- ledLightsBlinkInLine();
- ledLightsBlinkInLineRevers();
- }
- void ledLightsFadeInOut() {
- ledLightsOff();
- if (delayLoop(200)) return;
- ledLightsSolid();
- if (delayLoop(500)) return;
- }
- void ledLightsFromMiddleSolid() {
- byte middle = (byte) LEDS_PIN_COUNT / 2;
- ledLightsOff();
- if (delayLoop(200)) return;
- digitalWrite(LEDS_PIN[middle], HIGH);
- if (delayLoop(200)) return;
- for (byte i=1; i<=middle; i++) {
- digitalWrite(LEDS_PIN[middle - i], HIGH);
- digitalWrite(LEDS_PIN[middle + i], HIGH);
- if (delayLoop(200)) return;
- }
- if (delayLoop(500)) return;
- }
- boolean delayLoop(unsigned int delayInterval) {
- unsigned long startMillis = millis();
- do {
- if (digitalRead(BUTTON_PIN) == LOW) return true;
- } while (millis() - startMillis < delayInterval);
- return false;
- }
Add Comment
Please, Sign In to add comment