ATNEL tech-forum https://forum.atnel.pl/ |
|
Cuda dziwy? https://forum.atnel.pl/topic23992.html |
Strona 1 z 1 |
Autor: | Marhef [ 23 paź 2021, o 13:34 ] |
Tytuł: | Re: Cuda dziwy? |
Jeśli: 1) podłączysz przycisk pomiędzy pin (u Ciebie) PC5 i GND 2) ustawisz wewnętrzne podciągnięcie do Vcc na tym pinie 3) wciśniesz przycisk to właśnie wtedy BUTTON_PRESSED będzie miało wartość 0 |
Autor: | Rnext [ 23 paź 2021, o 17:07 ] |
Tytuł: | Re: Cuda dziwy? |
Hm, tylko wówczas pierwszy warunek [if] powinien być przecież niespełniony, czyli na terminal w ogóle nie powinno pójść [Serial.print]. A tu zazwyczaj, kiedy naciskam przycisk BUTTON_PRESSED jest 1, czyli tak jak powinno być, skoro jest negacją [!(PINC & BUTTON)]. Czyli domyślny stan linii to 1, zwieram przyciskiem = 0, PINC to same 1 co z zanegowaną maską przycisku daje 1&&1. A tu jednak wypisuje 0 i w ogóle wykonuje ten fragment kodu. To wszystko w terminalu to efekt po naciśnięciu przycisku. ps. jeśli ostatni linijka dodaje "zwłokę" postaci: else if (key_lock && !BUTTON_PRESSED) key_lock++; to wszystko jest w porządku. Tzn. jak dotychczas nie udało mi się wyłapać "zera". |
Autor: | mario2015 [ 23 paź 2021, o 19:18 ] |
Tytuł: | Re: Cuda dziwy? |
Bo to jest reakcja na wciśnięcie przycisku. To i zawsze po wciśnięciu dostaniesz 1 czyli naciśnięto przycisk. Jak chcesz wyłapać zero, to po else if zrób klamry i te twoje serial.print i powinno pokazać zero. Tak jak piszę, to jest TYLKO reakcja na wciśnięcie przycisku a nie na jego zwolnienie. Mirek dokładnie wyjaśnia to na swoim blogu. Poczytaj tu: http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html Z resztą, ty nie masz oczekiwać zera, ty masz wykonać jakieś zadanie pod wpływem jakieś reakcji. I teraz już zgłupiałem o jakie zero ci chodzi? Zero będziesz miał nie naciskając klawisza. |
Autor: | Rnext [ 24 paź 2021, o 05:03 ] |
Tytuł: | Re: Cuda dziwy? |
No to wyspałem się i widzę gdzie była pułapka - w potraktowaniu makra BUTTON_PRESSED jako stałej/przypisanej wartości na czas wykonywania jednej pętli. Przecież to jest odczyt aktualnego/chwilowego stanu portu. O ile w chwili wciśnięcia przycisku, spełnia warunek w pierwszym {if}, więc program jest "wpuszczany" do tego bloku warunkowego, to będąc już w nim, wskutek drgań styków, daje się podczas wykonywania "przyłapać" na rozwartych, co pokazuje ponowny odczyt rejestru z maską [BUTTON_PRESSED to przecież (PINC & (1<<PC5))] na potrzeby wypisania do terminala. |
Autor: | Marhef [ 24 paź 2021, o 09:18 ] |
Tytuł: | Re: Cuda dziwy? |
Zauważ, że warunek (PINC & (1<<PC5)) to jest iloczyn bitowy, czyli sprawdzasz TYLKO wejście PC5, ignorując pozostałe |
Autor: | Rnext [ 24 paź 2021, o 15:46 ] |
Tytuł: | Re: Cuda dziwy? |
@Mahref, tak, tak, oczywiście - stąd maska. W sumie nie interesują mnie stany pozostałych bitów. Ale przynajmniej snu z powiek nie mam spędzonych tym, dlaczego (pozornie) nie spełniając warunku {if'a} to działało |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |