Odpověď na: Časovane spinaní pinu
Úvodní stránka › Fórum › Vaše projekty › Arduino › Časovane spinaní pinu › Odpověď na: Časovane spinaní pinu
2.4.2017 v 13:59
#10954
posjirka
Účastník
máš pravdu. v poslední době používám simulator arduina místo HW řešení a nedocvaklo mě, že používá pro vstupy tlačítek přímo log.1/0, nikoliv spínače na zem.
Patří tam do setup() při nastavení modu pinu použít „INPUT_PULLUP“ místo „INPUT“ u všech tlačítek.
// casovac s 3 predvolbou casu
// by JP. 2017
// v02 - doplnení pull up interních odporu
#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_PULLUP);// v02
pinMode(TLACITKO2, INPUT_PULLUP);// v02
pinMode(TLACITKO3, INPUT_PULLUP);// v02
}
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
}
snad tě to někam posunulo a budeš mít z čeho čerpat.