Vizitator GeorgeTrisina Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 (editat) Asta e codul si nu functioneaza temporizarea unsigned long currentTime; unsigned long loopTime; void setup() { currentTime = millis(); loopTime = currentTime; pinMode(46, OUTPUT); //Initialize pin 46 as status LED pinMode(A15, INPUT); // Our button pin } void loop() { if (digitalRead(A15) == LOW) // Switch is closed to start LED timer { digitalWrite(46, HIGH); // LED comes On currentTime = millis(); } else //Hits each pass that switch is not pressed { if (currentTime >= (loopTime + 5000)); { digitalWrite(46, LOW); // LED goes off loopTime = currentTime; // Updates loopTime } } } timer buton.doc Editat Aprilie 4, 2018 de GeorgeTrisina Link spre comentariu
digix Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 currentTime = millis(); este actualizat numai daca este butonul apasat... Link spre comentariu
Vizitator GeorgeTrisina Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 Are vreo legatura cu long currentTime? Eu as fi vrut sa temporizeze la apasare scurta. Link spre comentariu
nico_2010 Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 (editat) Incearca acest cod: #define interval 5000UL const int LED_pin = 13; const int Button = 8; const int Time_delay = 1000UL; int duration = 0; long switchTime() { static unsigned long startTime = 0; static boolean state; if (digitalRead(Button) != state) { state = ! state; startTime = millis(); } if ( state == LOW) return millis() - startTime; else return 0; } void setup() { pinMode(LED_pin, OUTPUT); //Initialize pin 46 as status LED digitalWrite(LED_pin, LOW); pinMode(Button, INPUT_PULLUP); // Our button pin waitUntil += interval; } void loop() { static boolean stare1, stare2 = false; duration = switchTime(); if (duration > Time_delay) { stare2 = true; stare1 = false; } else if((duration <= Time_delay) && (duration > (Time_delay - 800UL))) { stare1 = true; stare2 = false; } if (stare1) { digitalWrite(LED_pin, HIGH); delay(interval); digitalWrite(LED_pin, LOW); stare1 = false; } if (stare2) { while (digitalRead(Button) == LOW) { digitalWrite(LED_pin, HIGH); } digitalWrite(LED_pin, LOW); stare2 = false; } } Editat Aprilie 4, 2018 de nico_2010 Link spre comentariu
Vizitator GeorgeTrisina Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 Multumesc! am sa incerc. Link spre comentariu
nico_2010 Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 Te rog sa verifici, eu nu prea am timp. Link spre comentariu
nico_2010 Postat Aprilie 4, 2018 Partajează Postat Aprilie 4, 2018 Si mai poti incerca cu acest cod: #define interval 5000UL const int LED_pin = 13; const int Button = 8; const int Time_delay = 1000UL; const int longTime_delay = 3000UL; const int debounce = 100; int count_ms = 0; int duration = 0; long switchTime() { static unsigned long startTime = 0; static boolean state; if (digitalRead(Button) != state) { state = ! state; startTime = millis(); } if ( state == LOW) return millis() - startTime; else return 0; } void setup() { pinMode(LED_pin, OUTPUT); //Initialize pin 46 as status LED digitalWrite(LED_pin, LOW); pinMode(Button, INPUT_PULLUP); // Our button pin } void loop() { if (switchTime() >= longTime_delay) { if (switchTime() > Time_delay){ while (digitalRead(Button) == LOW) { digitalWrite(LED_pin, HIGH); } digitalWrite(LED_pin, LOW); } } if (switchTime() < longTime_delay) { if ((switchTime()>debounce) && (switchTime() < Time_delay)) { digitalWrite(LED_pin, HIGH); delay(5000); digitalWrite(LED_pin, LOW); } } } Link spre comentariu
Vizitator GeorgeTrisina Postat Aprilie 10, 2018 Partajează Postat Aprilie 10, 2018 La 04.04.2018 la 13:40, nico_2010 a spus: Incearca acest cod: #define interval 5000UL const int LED_pin = 13; const int Button = 8; const int Time_delay = 1000UL; int duration = 0; long switchTime() { static unsigned long startTime = 0; static boolean state; if (digitalRead(Button) != state) { state = ! state; startTime = millis(); } if ( state == LOW) return millis() - startTime; else return 0; } void setup() { pinMode(LED_pin, OUTPUT); //Initialize pin 46 as status LED digitalWrite(LED_pin, LOW); pinMode(Button, INPUT_PULLUP); // Our button pin waitUntil += interval; } void loop() { static boolean stare1, stare2 = false; duration = switchTime(); if (duration > Time_delay) { stare2 = true; stare1 = false; } else if((duration <= Time_delay) && (duration > (Time_delay - 800UL))) { stare1 = true; stare2 = false; } if (stare1) { digitalWrite(LED_pin, HIGH); delay(interval); digitalWrite(LED_pin, LOW); stare1 = false; } if (stare2) { while (digitalRead(Button) == LOW) { digitalWrite(LED_pin, HIGH); } digitalWrite(LED_pin, LOW); stare2 = false; } } O mica eroare a avut la instructiunea waitUntil trebuia declarata si linia waitUntil += interval merge fara + si =. Pana la urma a functionat. Multumesc. La 04.04.2018 la 16:14, nico_2010 a spus: Si mai poti incerca cu acest cod: #define interval 5000UL const int LED_pin = 13; const int Button = 8; const int Time_delay = 1000UL; const int longTime_delay = 3000UL; const int debounce = 100; int count_ms = 0; int duration = 0; long switchTime() { static unsigned long startTime = 0; static boolean state; if (digitalRead(Button) != state) { state = ! state; startTime = millis(); } if ( state == LOW) return millis() - startTime; else return 0; } void setup() { pinMode(LED_pin, OUTPUT); //Initialize pin 46 as status LED digitalWrite(LED_pin, LOW); pinMode(Button, INPUT_PULLUP); // Our button pin } void loop() { if (switchTime() >= longTime_delay) { if (switchTime() > Time_delay){ while (digitalRead(Button) == LOW) { digitalWrite(LED_pin, HIGH); } digitalWrite(LED_pin, LOW); } } if (switchTime() < longTime_delay) { if ((switchTime()>debounce) && (switchTime() < Time_delay)) { digitalWrite(LED_pin, HIGH); delay(5000); digitalWrite(LED_pin, LOW); } } } Codul asta a functionat din prima fara interventii. Multumesc. Mai am o intrebare: Cum fac sa nu-mi ruleze automat? Dupa incarcarea codului imi face comanda automat prima data si abea dupa aia asteapta co0menzi de la buton. Asta se intampla la ambele variante. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum