Odpověď na: Časovane spinaní pinu
Úvodní stránka › Fórum › Vaše projekty › Arduino › Časovane spinaní pinu › Odpověď na: Časovane spinaní pinu
1.4.2017 v 22:25
#10945
Účastník
měl jsem trochu honku, ale viděl bych to takto:
// casovac s 3 predvolbou casu
// by JP. 2017
// v01
#define LED 13 // led dioda
#define TLACITKO1 10 // tlacitko proti zemi
#define TLACITKO2 11 // tlacitko proti zemi
#define TLACITKO3 12 // tlacitko proti zemi
void setup()
{
pinMode(LED, OUTPUT);
pinMode(TLACITKO1, INPUT);
pinMode(TLACITKO2, INPUT);
pinMode(TLACITKO3, INPUT);
}
void loop()
{
if(digitalRead(TLACITKO1) == 0){
// po stistku tlacitka 1 volej funkci caosvace se zpozdenim 5s
casovac(TLACITKO1, 5000);
}
if(digitalRead(TLACITKO2) == 0){
// po stistku talcitka 2 volej funkci caosvace se zpozdenim 10s
casovac(TLACITKO2, 10000);
}
if(digitalRead(TLACITKO3) == 0){
// po stistku tlacitka 3 volej funkci caosvace se zpozdenim 15s
casovac(TLACITKO3, 15000);
}
}
void casovac(int TLACITKO, unsigned long ZPOZDENI)
{
// rozsvit LED a zapis si cas startu
unsigned long OLDTIME = millis();
digitalWrite(LED, HIGH);
// cekej dokud neni uvolnene tlacitko
while(digitalRead(TLACITKO) == 0)
{
delay(100); // odstraneni zakmitu tlacitka
}
// cekej dokud nepretece nastaveny cas
while(millis() < (OLDTIME + ZPOZDENI))
{
// pokud stisknu nejake tlacitko ukonci casovac tim ze vynulujes nastavenou dobu zpozdeni
if(digitalRead(TLACITKO1) == 0 || digitalRead(TLACITKO2) == 0 || digitalRead(TLACITKO3) == 0)
{
ZPOZDENI = 0;
}
}
// zhasni LED
digitalWrite(LED, LOW);
delay(1000); // zabraneni nechtenemu startu noveho cesovani
}