Witam, piszę program na Atmega8 i mam problem z przyciskiem. Część kodu zaprezentowałem poniżej. Po przyciśnięciu przycisku na wyświetlaczu pojawiają się kolejne cyfry. Jednak musze przytrzymać przycisk z 2 sekundy żeby zmienna licznik wzrosła o jeden. Jeśli usunę tą druga pętlę if (sprawdzającą czy zmienna sprawdz = 1) wówczas przycisk działa normalnie. Jedno krótkie wciśniecie powoduje zwiększenie licznika... Co robie nie tak? Czy takie pętle inaczej się piszę w main-ie?
Dodano po 31 [minuty]:
dodam że drugi if jest bardzo czasochłonny... w nim ma miejsce odczyt wyniku z czujnika, konwersje itd.
nie da się skrócić tych czasów, bo tak wymaga producent czujnika...
przez to cierpi m. in. obsługa przycisku... jak to zrobić żeby jednocześnie była możliwa obsługa czujnika i odczyt z czujnika?
int button_is_pressed(void)
{
if(bit_is_clear(PINB, 0))
{
delay(25);
if(bit_is_clear(PINB, 0))
{
// delay(50);
return 1;
}
}
return 0;
}
int main(void){
///konfiguracja dla przycisku
DDRB &= ~_BV(0);
PORTB |= _BV(0);
while(1)
{
if(button_is_pressed())
{
licznik++;
itoa(licznik, result, 10);
gotox(0x4D);
writestr(result);
}
if(sprawdz == 1)
{
// ..............
}
} // while
return 0;
} // mainDodano po 31 [minuty]:
dodam że drugi if jest bardzo czasochłonny... w nim ma miejsce odczyt wyniku z czujnika, konwersje itd.
nie da się skrócić tych czasów, bo tak wymaga producent czujnika...
przez to cierpi m. in. obsługa przycisku... jak to zrobić żeby jednocześnie była możliwa obsługa czujnika i odczyt z czujnika?