const int buttonPin = 2; // nyomógomb
int buttonState = 0; //nyomógomb állapotát örző változó
unsigned long husz_masodperc_start;
unsigned long Piros_LED_bekapcsolasanak_pillanata;
unsigned long Piros_LED_kikapcsolasanak_pillanata;
unsigned long Piros_LED_bekapcsolt_allapot_ideje;
unsigned long Piros_LED_kikapcsolt_allapot_ideje;
unsigned long Piros_LED_kikapcsolt_allapot_novekmenye;
byte husz_masodperc_folyamatban;
byte Piros_LEDnek_kell_vilagitania = 1;
int novekmeny_szamlalo=0;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(7, OUTPUT); // 20 sec-et jelző LED kimenetre.
pinMode(buttonPin, INPUT);
husz_masodperc_start = 0;
husz_masodperc_folyamatban = 0;
Piros_LED_bekapcsolasanak_pillanata = 0;
Piros_LED_bekapcsolt_allapot_ideje = 1000; // Ennyi ideig lesz bekapcsolva a LED
Piros_LED_kikapcsolt_allapot_ideje = 100; // Ennyi ideig lesz kikapcsolva elsőként
Piros_LED_kikapcsolt_allapot_novekmenye = 200; // Ennyivel nő a kikapcsolt idő
Piros_LEDnek_kell_vilagitania = 1;
}
void loop() {
if (husz_masodperc_folyamatban == 0) {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
husz_masodperc_folyamatban = 1;
husz_masodperc_start = millis();
}
}
if (husz_masodperc_folyamatban == 1) {
// 20 másodperc
if (millis() - husz_masodperc_start < 20000) {
digitalWrite(4, HIGH); // Zöld LED világít
if (Piros_LEDnek_kell_vilagitania == 1) {
if (millis() - Piros_LED_bekapcsolasanak_pillanata < Piros_LED_bekapcsolt_allapot_ideje) {
digitalWrite(LED_BUILTIN, HIGH);
} else {
Piros_LEDnek_kell_vilagitania = 0; //hogy legközelebb az else ág fusson le, ahol kikapcsolva tartjuk
digitalWrite(LED_BUILTIN, LOW);
Piros_LED_kikapcsolasanak_pillanata = millis();
//Szünet növekmény számlálójának növelése:
novekmeny_szamlalo+=1;
}
} else {
if (millis() - Piros_LED_kikapcsolasanak_pillanata < (novekmeny_szamlalo*Piros_LED_kikapcsolt_allapot_novekmenye+ Piros_LED_kikapcsolt_allapot_ideje)) {
//Ezzel a változóval valójában kikapcsolva tartjuk, mert a felső if -be nem fut bele
Piros_LEDnek_kell_vilagitania = 0;
} else {
//A kikapcsolási idő lejárta után, ezzel a változóval ismét az if ágba futunk bele, ahol bekapcsolva tartja
Piros_LEDnek_kell_vilagitania = 1;
//Kell a pontos időpont, hogy lehessen számolni vele, illetve fontos, hogy csak itt kapjon értéket
//mert máshol esetleg minden esetben kapna, így a feltétel mindig teljesülne.
Piros_LED_bekapcsolasanak_pillanata=millis();
}
}
} else {
//Minden érték kinullázása és minden LED kikapcsolása.
digitalWrite(4, LOW);
digitalWrite(LED_BUILTIN, LOW);
husz_masodperc_folyamatban = 0;
Piros_LEDnek_kell_vilagitania = 0;
novekmeny_szamlalo=0;
}
}
}