ATNEL tech-forum
https://forum.atnel.pl/

!++key_lock nie rozumiem tego warunku.
https://forum.atnel.pl/topic23874.html
Strona 1 z 1

Autor:  11jacekj [ 4 sie 2021, o 20:16 ]
Tytuł:  !++key_lock nie rozumiem tego warunku.

Witam. Czytałem dziś na blogu Mirka artykuł o drganiu styków http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html. Jest tam jeden taki kod
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zwolnienie przycisku ma zmieniać stan diody LED. Wybaczcie mi proszę, nie jestem w stanie zrozumieć tej pętli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dla mnie to wygląda tak: w pierwszym ifie sprawdzam czy przycisk jest wciśnięty, jeżeli jest to
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jeżeli nie jest to wychodzi program z pętli. Jeżeli jest wciśnięty i trzymany to też program wychodzi z pętli.
Ale jeżeli był wciśnięty i jest puszczony to: to jest sprawdzany drugi if ten po else. W nim warunek zwraca TRUE bo key_lock po wciśnięciu przycisku przycisku przyjął wartość 1 a skoro jest puszczony to
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
też daje 1, w związku z tym przechodzimy do kolejnego ifa. A w jego warunku
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
key_kock miał wartość 1 po wciśnięciu przycisku i dodatkowo jest preinkrementowany czyli ma wartość 2 ale po zanegowaniu ma wartość 0. I z mojego myślenia wychodzi żeby warunek był spełniony to key_kock w drugim ifie musiał by mieć wartość -1 wtedy po inkrementacji i zanegowaniu miał by wartość 1. Proszę wytłumaczcie mi jak to działa bo najwyraźniej źle myślę.

Autor:  mirekk36 [ 4 sie 2021, o 23:15 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
Wybaczcie mi proszę, nie jestem w stanie zrozumieć tej pętli

Spokojnie ;) wybaczamy - ale przede wszystkim TO nie jest pętla tylko WARUNEK IF ... a to spora róznica - także dla ciebie w myśleniu

11jacekj napisał(a):
Dla mnie to wygląda tak: w pierwszym ifie sprawdzam czy przycisk jest wciśnięty, jeżeli jest to

tu dobrze myślisz

11jacekj napisał(a):
jeżeli nie jest to wychodzi program z pętli.

No a tu już mieszasz sobie i plączesz że aż strach ...

z jakiej pętli wychodzi ? Z głównej pętli programu while(1) { } ... ???? zobacz jak to opisałeś i pomyśl

nie, tu nie wychodzi z żadnej pętli tylko po else - zwiększa się key o JEDEN i jednocześnie jest sprawdzane czy nie jest równe zero !++key_lock w czasie gdy key_lock ma wartość pomiędzy 1 a 255 i gdy przycisk jest już zwolniony else if( key_lock && (PINC & KEY1 ) ) {

Autor:  11jacekj [ 5 sie 2021, o 05:09 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

Oczywiście że warunek nie pętla, nie wiem dlaczego tak napisałem. Przepraszam za to. W takim razie źle zrozumiałem ten warunek po else:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj. A z tego co Mirku piszesz powinienem to odczytać jako: "zwiększ o JEDEN i sprawdź czy jest różne od ZERA"?

Autor:  mirekk36 [ 5 sie 2021, o 08:51 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
A z tego co Mirku piszesz powinienem to odczytać jako: "zwiększ o JEDEN i sprawdź czy jest różne od ZERA"?

Bo DOKŁADNIE tak jest ;) pewnie zapomniało ci się o tym jak działają dwuczłonowe operatory ++ albo -- w PRE-INKREMENTACJI albo PRE-DEKREMENTACJI ... co masz opisane w Bluebooku ... więc krótko przypomnę ale sięgnij do BB żeby więcej doczytać

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w związku z powyższym chyba już widzisz, że w warunku

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


masz do czynienia z PRE-INKREMENTACJĄ a nie POST-INKREMENTACJĄ, a zatem NAJPIERW zmienna key_lock zostanie zwiększona o JEDEN, następnie zostanie zanegowana za pomocą wykrzyknika i dopiero to wyrażenie (ta wartość) będzie brana pod uwagę w IF()

Autor:  11jacekj [ 5 sie 2021, o 09:10 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

mirekk36 napisał(a):
a zatem NAJPIERW zmienna key_lock zostanie zwiększona o JEDEN, następnie zostanie zanegowana za pomocą wykrzyknika i dopiero to wyrażenie (ta wartość) będzie brana pod uwagę w IF()

:| Już mi się chyba cos z głową dzieje, bo w związku z powyższym rozumiem to tak: jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE. jeżeli w kolejnym kroku zostanie zanegowane to otrzymamy FALSE. Czyli warunek nie zostanie spełniony.
Za chwilę wyrwę sobie ostatniego włosa. Albo jestem jakiś ostatni matoł.

Autor:  mirekk36 [ 5 sie 2021, o 11:16 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
Za chwilę wyrwę sobie ostatniego włosa. Albo jestem jakiś ostatni matoł.

a przestań ;) czasem się człowiek zatnie i co zrobić - ja też tak mam - szczególnie teraz gdy po raz pierwszy piszę softy do ESP ;)

11jacekj napisał(a):
bo w związku z powyższym rozumiem to tak: jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE.

Tu ci zabrakło już tylko "jednego patyczka" :lol: ... Pomyśl, key_lock będzie wciąż zwiększany o JEDEN .. i wg ciebie ZAWSZE będzie większy od zera ? ;) ... a co się stanie wg ciebie gdy już dojdzie do wartości 255 ( a PAMIĘTAJ że to zmienna 8-bitowa!) ... i zwiększy się jej wartość o JEDEN - to ILE BĘDZIE panie kochany ? no ile ?

;) .... TAK! w końcu będzie upragnione ZERO które po zanegowaniu da oczekiwane TRUE !!! ;)

Autor:  11jacekj [ 5 sie 2021, o 11:45 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

No tak, to oczywiste, zdałem sobie sprawę przy analizowaniu tego programu że po 255 będzie 0. ale nie dopuszczałem do głowy że to o to chodzi, coś mnie przyblokowało i nie zrobiłem kolejnego kroku do przodu. Przepraszam. Mózg zamknąłem w Mrokach Średniowiecza, dziś zapomniałem logi i hasło do najważniejszego programu u mnie w pracy.
Wiem że szykujesz rewelację w ESP, może nie wiele się udzielam na forum ale czytam na bieżąco :D.
A jeszcze wtrącę pytanie o ESP. Od jakiegoś czasu chodzi za mną żeby kupić do potestowania, pobawienia się, trochę już poczytałem. Którą wersję polecił byś mi kupić, tak żeby była kompatybilna z tym co planujesz?
Obrazek ta chyba jest najbardziej wypasiona przynajmniej w wyglądu i opisu pinów ale nie wiem czy się nadaje do czegokolwiek.

Autor:  mirekk36 [ 5 sie 2021, o 12:11 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
Którą wersję polecił byś mi kupić, tak żeby była kompatybilna z tym co planujesz?


Proponuję przed zakupem poczekać na start tej akcji - bo już w pierwszym poradniku wideo będę przede wszystkim wyjaśniał cały ten mętlik z ogromną ilością i różnorakich modułów ESP - że człowiek jak ma zacząć to nie wie co wybrać i w co ręce włożyć no nie ? ;) Ja też tak miałem 2-3 miesiące temu - że aż kociej mordy dostałem :lol: .... dlatego szkoda że nie mogłem trafić nigdzie na taki poradnik wideo czy pisany - jaki ja teraz zrobię - bo MNÓSTWO ci się wyjaśni - zobaczysz - więc spokojnie czekaj - proponuję śmiało

Autor:  11jacekj [ 5 sie 2021, o 12:26 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

To powiedz chociaż czy dasz listę komend AT z polskim opisem. I na tym kończę moje pytanie o ESP w tym temacie, bo to nie to miejsce.

Autor:  mirekk36 [ 5 sie 2021, o 13:02 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
To powiedz chociaż czy dasz listę komend AT z polskim opisem.

No a jak może być inaczej ? ;) Do ATNEL WIFI232-T nie było w wersji PL ? Było - tak i tu będzie ! ;) .... ale to pikuś w porównaniu do opisu w PL ;) w porównaniu do tego co będzie poza tym ... na razie tylko tak mogę powiedzieć ;)

Autor:  Marhef [ 18 sie 2021, o 22:34 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

11jacekj napisał(a):
Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj
Ja się jeszcze do tego odniosę. To nie do końca jest "zwiększ o 1 i zaneguj". To jest "zwiększ o 1 i sprawdź, czy nie jest FALSE". Operator '!' nie neguje zmiennej (od negacji jest '~')

Autor:  mirekk36 [ 19 sie 2021, o 09:21 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

Marhef napisał(a):
11jacekj napisał(a):
Ja to co jest w nawiasie rozumiem jako key_lock zwiększ o JEDEN i zaneguj
Ja się jeszcze do tego odniosę. To nie do końca jest "zwiększ o 1 i zaneguj". To jest "zwiększ o 1 i sprawdź, czy nie jest FALSE". Operator '!' nie neguje zmiennej (od negacji jest '~')


No nie do końca tak jak piszesz ... dlaczego?

Pomyśl sobie - warunek IF( wyrażenie ) ...

sprawdza ZAWSZE CAŁE WYRAŻENIE, czy jest ono TRUE czy FALSE, a więc jeśli wyrażeniem jest jakieś działanie, to najpierw trzeba je zrealizować, a zatem

1. zwiększ wartość zmiennej o JEDEN
2. ZANEGUJ tę wartość po zwiększeniu

3. WYNIK wyrażenia będzie wzięty pod uwagę przez IF

Wykrzyknik to operator negacji ale LOGICZNEJ a nie bitowej, dlatego nie ważne czy w zmiennej masz liczbę 1, 4 czy 237 to po zanegowaniu przyjmie wartość FALSE, a TYLKO w jednym przypadku przyjmie wartość TRUE, gdy zmienna osiągnie wartość zero.

Autor:  Marhef [ 24 sie 2021, o 17:19 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

Masz rację, Mirku, źle to sformułowałem. Może ja źle zrozumiałem autora wątku, ale to miało być odniesienie do tego fragmentu:
11jacekj napisał(a):
key_kock miał wartość 1 po wciśnięciu przycisku i dodatkowo jest preinkrementowany czyli ma wartość 2 ale po zanegowaniu ma wartość 0. I z mojego myślenia wychodzi żeby warunek był spełniony to key_kock w drugim ifie musiał by mieć wartość -1 wtedy po inkrementacji i zanegowaniu miał by wartość 1. Proszę wytłumaczcie mi jak to działa bo najwyraźniej źle myślę.
I jeszcze do wypowiedzi w jednym z kolejnych wpisów:
11jacekj napisał(a):
jeżeli key_lock zostaje zwiększone o JEDEN to zawsze będzie TRUE. jeżeli w kolejnym kroku zostanie zanegowane to otrzymamy FALSE. Czyli warunek nie zostanie spełniony.
Zrozumiałem to tak, że autor (11jacekj) zrozumiał, że wynik negacji jest przypisany do zmiennej key_lock, co nie jest prawdą. Bo, tak jak piszesz, zmienna jest inkrementowana i wynik inkrementacji jest przypisany do zmiennej, natomiast negacja zmiennej key_lock nie jest przypisana do zmiennej, ten wynik jest brany pod uwagę tylko w ifie (dokładnie tak, jak wyjaśniłeś).
Mam nadzieję, że nie namieszałem tym wpisem?

Autor:  mirekk36 [ 24 sie 2021, o 19:47 ]
Tytuł:  Re: !++key_lock nie rozumiem tego warunku.

Cytuj:
Mam nadzieję, że nie namieszałem tym wpisem?

Ale dlaczego miałeś namieszać ? Po to jest forum żeby sobie podyskutować i czasem zwrócić uwagę na inne rozwiązanie czy podejście ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/