From d99473505cbb4f49c12bea4299dd59a5fe17bf8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20Zi=C3=B3=C5=82kowski?= Date: Tue, 8 Mar 2022 23:36:03 +0100 Subject: [PATCH 1/2] Closes #1. Make the code cleaner and simpler, add state machine --- Artur_Ziolkowski/main.cpp | 113 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 Artur_Ziolkowski/main.cpp diff --git a/Artur_Ziolkowski/main.cpp b/Artur_Ziolkowski/main.cpp new file mode 100644 index 0000000..31777c3 --- /dev/null +++ b/Artur_Ziolkowski/main.cpp @@ -0,0 +1,113 @@ +#include +#include +#include +#include + + +const int blueled = 6; +const int redled = 4; +const int greenled = 5; +const int button1 = 2; +const int button2 = 3; +void button1_service(); +void button2_service(); +int timer = 0; +void disco(); + +enum States { UNKN , // nie wiadomo co sie dzieje + DISABLED , // wylaczona dioda + LEDR , // zapal c z e r w o n + LEDG , // zapal z i e l o n + LEDB , // zapal n i e b i e s k + DISCO }; + +States state = UNKN; + +void setup() { + pinMode(redled, OUTPUT); + pinMode(greenled, OUTPUT); + pinMode(blueled, OUTPUT); + + pinMode(button1, INPUT_PULLUP); + pinMode(button2, INPUT_PULLUP); + attachInterrupt(0, button1_service, FALLING); + attachInterrupt(1, button2_service, FALLING); + Serial.begin(9600); +} + +void loop() { + + switch ( state ){ + case UNKN : + break ; + case DISABLED : + digitalWrite(redled, LOW); + digitalWrite(blueled, LOW); + digitalWrite(greenled, LOW); + break ; + case LEDR : + digitalWrite(redled, HIGH); + digitalWrite(blueled, LOW); + digitalWrite(greenled, LOW); + break ; + case LEDG : + digitalWrite(redled, LOW); + digitalWrite(blueled, LOW); + digitalWrite(greenled, HIGH); + break ; + case LEDB : + digitalWrite(redled, LOW); + digitalWrite(blueled, HIGH); + digitalWrite(greenled, LOW); + break ; + case DISCO : + disco(); + break ; + } +} + +void button1_service() +{ + state = DISABLED; +} + +void button2_service() +{ + switch ( state ){ + case UNKN : + state = LEDR; + break ; + case DISABLED : + state = LEDR; + break ; + case LEDR : + state = LEDG; + break ; + case LEDG : + state = LEDB; + break ; + case LEDB : + state = DISCO; + break ; + case DISCO : + state = LEDR; + break ; + } +} +void disco() +{ + int r = 0; + int g = 0; + int b = 0; + int del = 10; + while(state == DISCO){ + r = (r + 7) % 255; + g = (g + 13) % 255; + b = (b + 11) % 255; + del = (del + 3) % 23; + analogWrite(redled, r); + analogWrite(blueled, g); + analogWrite(greenled, b); + delay(del); + } +} From 82d37605fab7bd9094e55d0b0c3001bfaf23b27c Mon Sep 17 00:00:00 2001 From: ArturZiolkowski1999 <63076661+ArturZiolkowski1999@users.noreply.github.com> Date: Tue, 8 Mar 2022 23:41:19 +0100 Subject: [PATCH 2/2] #1. Make the code cleaner and simpler, correct disco function --- Artur_Ziolkowski/main.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Artur_Ziolkowski/main.cpp b/Artur_Ziolkowski/main.cpp index 31777c3..a9dd213 100644 --- a/Artur_Ziolkowski/main.cpp +++ b/Artur_Ziolkowski/main.cpp @@ -96,18 +96,16 @@ void button2_service() } void disco() { - int r = 0; - int g = 0; - int b = 0; - int del = 10; - while(state == DISCO){ - r = (r + 7) % 255; - g = (g + 13) % 255; - b = (b + 11) % 255; - del = (del + 3) % 23; + int r = 45; + int g = 179; + int b = 78; + for(int i = 0; i < 6; ++i){ + r = (r + 83) % 255; + g = (g + 91) % 255; + b = (b + 57) % 255; analogWrite(redled, r); analogWrite(blueled, g); analogWrite(greenled, b); - delay(del); + delay(50); } }