
Arduino timer
Zdravím.
Zkouším timer a asi jsem nepochopil princip
#include "Timer.h"
Timer t;
int pin = 2;
int pin1 = 13;
void setup()
{
Serial.begin(9600);
pinMode(pin1,INPUT_PULLUP);
pinMode(pin,INPUT_PULLUP);
pinMode(pin, OUTPUT);
}
void loop()
{
if (digitalRead(pin1)== LOW){
t.pulse(pin, 10 * 10 * 1000, LOW);
Serial.println("hups");
}
t.update();
Serial.println("ja si dělam co chci");
}
Co je špatně?
A to t.pulse nefunguje mozno aj preto lebo pretazujes vystup, a ta funkcia po uplynuti doby invertuje vystup, a zrejme tak ze si precita stav na vystupe a invertuje ho. Ked ale vystup pretazis ze pri hodnote HIGH cita z neho napatie LOW, tak ten vystup po uplynuti doby ta funkcia "invertuje" na nespravnu hodnotu. Nechce sa mi teraz citat zdrojaky tych fcii ale tipujem ze to robi tak. Zdrojak ktory som dal teraz tu do predch.odpovede nema tento problem.
Ked nieco robis tak to musis chapat, inac nebudes schopny nikdy garantovat ze to na 100% pojde vzdy spravne.
Tak to poslední funguje jak má
už se mi to podařilo udělat i pomocí threadu
if(myThread.shouldRun())
myThread.run();
Tak pouzivaj radsej to posledni, je to asi bezpecnejsie.
Ked spustas thread mechanickym tlacitkom, tak musis aspon urobit delay(10) na debouncing. A samozrejme ze musis aj pamata stav, aby si ten thread nevytvoril 1000x (co sice nemusis vidiet hned, ale za urcitych okolnosti to potom moze uplne rohdoit cely system) T.j. napr.
if(digitalRead(pin) == HIGH && stav == 0)
{
spust thread
stav = 1;
delay(10); // debouncing
}
if(digitalRead(pin) == LOW && stav == 1)
{
stav = 0;
delay(10); // debouncing
}
Nevyhoda takehoto jednoducheho debouncingu je to ze to zastavi cele arduino na 10ms, ale je to takto najjednoduchsie.
Ked na to nemyslis a mas tam napr. debug vystup tak ten urobi opozdenie kludne aj 10ms a myslis si ze vsetko je super aj bez debouncingu a raz vyhodis ten debug vystup a zistis ze zrazu to blbne :)
JJ, děkují