Stránka 1 z 1

Tlačítko jako hlavní vypínač

Napsal: 21 úno 2018, 21:26
od Xandys
Dobrý den, prosím o radu. Jsem začátečník a peru se s jedním problémem.
Mám desku na které jsou čtyři tlačítka Jedno se má chovat jako hlavní vypínač. Stiskem se aktivují ostatní tři tlačítka, které řídí další módy. Dalším stiskem tohoto tlačítka se opět tři tlačítka zdeaktivují. Nevím si s tím rady, třeba je to banální, ale jak jsem psal jsem začátečník.
Díky za rady.

Re: Tlačítko jako hlavní vypínač

Napsal: 21 úno 2018, 21:57
od jankop
Stiskneš aktivační tlačítko a nastavíš příznak - flag. A dokud je flag nastaven, tak ta zbývající tlačítka prostě nečteš, dáš podmínku, že se jejich čtení vynechává. Dalším stiskem tlačítka příznak smažeš.
To čtení tlačítka by mohlo vypadat třeba nějak takhle:

Kód: Vybrat vše

#define BUTTONPIN 5
char ButtonCount;
bool Flag;
void setup() {
  // put your setup code here, to run once:
pinMode(BUTTONPIN, INPUT);
}
void loop() {
  // put your main code here, to run repeatedly:
 GetButton();
}

void GetButton(void) {
  if (digitalRead(BUTTONPIN) == false ) ++ButtonCount;
  if (digitalRead(BUTTONPIN) == true && ButtonCount > 1 && ButtonCount < 100 ) {
    Flag = !Flag;
    delay(10);
  }
  if (digitalRead(BUTTONPIN) == true ) ButtonCount = 0;
}
Trochu jsem to upravil, mělo by to jít volat i přímo z hlavní smyčky.

Re: Tlačítko jako hlavní vypínač

Napsal: 21 úno 2018, 22:25
od petan
A nebo můžeš použít pin, který podporuje přerušení. A stejný způsobem měnit flag. Bylo by dobrý, aby tlačítko nezakmitávalo.

Kód: Vybrat vše

bool flag;

void setup() {
  pinMode(2, INPUT);
  attachInterrupt(2, ToogleFlag, RISING);
}

void ToogleFlag(){
 flag = !flag;
}
Pak je tu varianta hlídání náběžné hrany vstupu pomocí kódu (určitě na to existuje i několik knihoven).

Re: Tlačítko jako hlavní vypínač

Napsal: 22 úno 2018, 10:41
od Xandys
Děkuji, moc jste mi pomohli :-)