Ahoj, chtěl jsem zkusit naprogramovat jednoduchý prográmek na přepínání stavů jedním tlačítkem, ale zaboha to ne a ne rozjet. Prosím mrkněte se na to a napiště co dělám špatně. Děkuju
Cau,co to ma presne delat ? nak sem to nepochopil
asi takle …?a = PORTA;
a = a & 0b00000100;
if(a) {
if(ok_1)ok_1=0;
else ok_1=1;
}
ten delay tam je jako nejaky osetreni ?
No jde o to, aby se 1 a 0 v ok_1 měnila při stisknutí tlačítka. Prostě On/Off jedním tlačítkem. Už jsem z toho tak zblblej, že jsem zkoušel psí kusy a jde to udělat jednoduše.
Díky za příklad, funguje to, ale když tam dám to zpoždění, bez něj to tam skáče jak to chce.
set bit a |= 1 << x; //bit do 1
clear bit a &= ~(1 << x); //bit do 0
toggle bit a ^= 1 << x; //přepínání 1 - 0 - 1 - 0
test bit a & (1 << x); //čtení stavu bitu
ten poslední řádek už jsi vlastně použil pro zjištění stavu vstupu x by v tvém případě bylo 2 - a & =(1 << 2); je to samé jako **a=a & (1 << 2); **- stejně jako tvoje a = a & 0b00000100;
to zpoždění tam musíš mít kvůli tomu, že bez něj se ti procesor na stav vstupu zeptá “milionkrát” za sekundu a je jen na náhodě v jakém stavu tlačítko zastihne.
Můžeš taky třeba počkat, dokud tlačítko nerozepne:
if(a) ok_1 ^= 1;
while(a); // čeká na rozepnutí tlačítka
ten delay a cekani na rozepnuti tlacitka je opravdu nestastny…
staci si zapamatovat posledni stav vstupu a pri dalsim cteni je porovnat jestly je zmena nebo ne
asi taklea = PORTA;
aktualni _stav= a & 0b00000100;
if(!(stary_stav==aktualni _stav)){
stary_stav=aktualni _stav;
if(aktualni _stav) {
if(ok_1)ok_1=0;
else ok_1=1;
}
Děkuji moc za rady a připomínky. DObrej programátor ze mě asi nikdy nebude, ale spíš se snažím jenom zkoušet blbůstky, ale hasičský stopky jsem naprogramoval a dokonce fungujou