Witam. Chcę obsłużyć AT8 dwoma klawiszami. W tym celu w pętli głównej sprawdzam, czy któryś z nich (a może oba) nie zostały naciśnięte. Do tego służy mi:
Klawisz() różny od 0 przenosi mnie do:
I wszystko jest bardzo pięknie póki używam pojedynczego klawisza. Przy wciśnięciu dwóch na raz (prawie na raz bo nigdy nie uda się wcisnąć idealnie) cały misternie wymyślony plan bierze w łeb. Raz przechodzi do obsługi case 1, innym razem do 2. A jak już uda mu się trafić w 3 to też trzeba mieć szczęście by przejść do tego, które akurat jest potrzebne z 4 - 5. Przyznaję, że są to moje początki z AVR-ami, ale mam nadzieję, że przy pomocy dobrych ludzi z Elektrody uda mi się je polubić.
unsigned char klawisz (void) //który klawisz
{
unsigned char aktyw = 0;
PINB |= _BV(1) | _BV(2);
_delay_ms(30);
if (bit_is_clear(PINB,1))
{
aktyw = aktyw + 1;
}
if (bit_is_clear(PINB,2))
{
aktyw = aktyw + 2;
}
return (aktyw);
}Klawisz() różny od 0 przenosi mnie do:
void nastawy (unsigned char poziom) //menu ustawienia
{
switch (poziom)
{
case 1: // ustaw program
break;
case 2: // karmienie ręczne
break;
case 3: //czasy
poziom += klawisz();
switch (poziom)
{
case 4: //zegar
break;
case 5: //czas karmienia
break;
}
break;
}
}I wszystko jest bardzo pięknie póki używam pojedynczego klawisza. Przy wciśnięciu dwóch na raz (prawie na raz bo nigdy nie uda się wcisnąć idealnie) cały misternie wymyślony plan bierze w łeb. Raz przechodzi do obsługi case 1, innym razem do 2. A jak już uda mu się trafić w 3 to też trzeba mieć szczęście by przejść do tego, które akurat jest potrzebne z 4 - 5. Przyznaję, że są to moje początki z AVR-ami, ale mam nadzieję, że przy pomocy dobrych ludzi z Elektrody uda mi się je polubić.