Close

Odpověď na: Časovane spinaní pinu

Úvodní stránka Fórum Vaše projekty Arduino Časovane spinaní pinu Odpověď na: Časovane spinaní pinu

#10945
posjirka
Úč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
}