
Problém s pauzou při změně stavu relé
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Problém s pauzou při změně stavu relé
Zdravím, potřeboval bych prosím Vás poradit s kódem. Používám tento kód
a děkuji za jakoukoliv radu.
ale mám ho upraveny pro ultrazvukový modul kterým ovládám LED pasek. Když je vzdálenost menši než je nastavena po dobu 500ms tak relé mění stav ale mění svůj stav vždy po 500ms což je dost rychle přeblikávání. Potřeboval bych jestli by mi někdo mohl na tomhle kódu kdy se relé ovládá tlačítkem ukázat jak nastavit po každé změně stavu relé pauzu na par sekund ať proste tlačítko i po stisknuti (v mém případě ultrazvuk ) nemůže měnit stav na opačný. Doufám že se dotaz dá pochopit 
Re: Problém s pauzou při změně stavu relé
Můžete se odrazit od milis(). To ke příkaz který vrátí jak dlouho je arduino zapnuté (v milisekundách).
Při stisknutí tlačítka si tedy můžete zapsat aktuální hodnotu milis()
Pak si jen do podmínky přidáte zda je aktuální čas o Xms větší než ten minulý.
Tlačítko tu u mě reprezentuje váš ultrazvuk. "caspauzy" je ta hodnota pauzy v milisekundách.
Při stisknutí tlačítka si tedy můžete zapsat aktuální hodnotu milis()
Kód: Vybrat vše
int milis_old = 0;
If(stisknu){
milis_old=milis();
//vas kod
}
Kód: Vybrat vše
int milis_old = 0;
If(stisknu && milis() > (milis_old + casPauzy){ //Pokud je tlacitko stisknute a aktualni cas je o "casPauzy" vetsi nez ten stary tak pokracuj do smycy
milis_old=milis();
// vas kod
}
Tlačítko tu u mě reprezentuje váš ultrazvuk. "caspauzy" je ta hodnota pauzy v milisekundách.
Re: Problém s pauzou při změně stavu relé
Děkuji za radu, kód funguje ale k mému nepochopeni relé mění stav vždy jen párkrát. Zatím testuji jen se žárovkou a ta se vždy při přiloženi ruky před ultrazvuk rozsvítí a zhasne jak by měla, pauza mezi změnou stavu je dodržena jak je nastaveno ale vždy to reaguje jen +- 6x a konec, nic se dále neděje.
Re: Problém s pauzou při změně stavu relé
Ale já vím proč
mojí blbostí. Deklaroval jsem vám milis_old jako int ale ten má max hodnotu +-32000 tzn. pouze 32 sekund, poté proměnná přeteče a program přestane fungovat. Změňte int na unsigned long a vše bude v pořádku.

Re: Problém s pauzou při změně stavu relé
Děkuji moc, nyní zcela funkční 

Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů