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

Pętla while - warunek
https://forum.atnel.pl/topic21880.html
Strona 1 z 1

Autor:  tokirium [ 16 sty 2019, o 01:03 ]
Tytuł:  Pętla while - warunek

Mam małą zagwozdkę z funkcją while, program nie działa mi tak jak bym tego oczekiwał i trochę się pogubiłem, bo nie jestem pewien gdzie jest błąd.
Jedna pętla while ma się zakończyć, gdy na pinach PA0 i PA1 mikrokontrolera Attiny2313 będzie stan niski, natomiast druga odwrotnie - gdy na obu pinach będzie stan wysoki. Wykombinowałem coś takiego, chyba coś za bardzo namieszałem? Oczywiście to nie cały program, tylko wycinki kodu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Te warunki będą użyte w funkcjach do sterowania mechanizmem wysuwu tacki - wysuwanie/wsuwanie do osiągnięcia skrajnego położenia.

Autor:  andrews [ 16 sty 2019, o 06:45 ]
Tytuł:  Re: Pętla while - warunek

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

Poczytaj o algebrze Boola, o upraszczaniu funkcji boolowskich (w szczególności prawo de Morgana).

Autor:  Daro69 [ 16 sty 2019, o 18:18 ]
Tytuł:  Re: Pętla while - warunek

albo-
skoro masz wybrane PA0 i PA1, to może.

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


może?

Autor:  andrews [ 16 sty 2019, o 19:37 ]
Tytuł:  Re: Pętla while - warunek

Daro69 napisał(a):
albo-
skoro masz wybrane PA0 i PA1, to może.

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


może?


Tak też zapewne zadziała. Zwróć tylko uwagę, że w przypadku konieczności zmiany portu lub pinu w dalszej fazie programu trzeba będzie pamiętać, żeby odnaleźć ten fragment kodu i ręcznie zmienić liczbę 3 lub w ogóle zmienić ten fragment kodu w przypadku, gdy trzeba przenieść się z przyciskiem na inny port. A co jeśli trzeba by było (przy bardziej rozbudowanym programie) zmienić to w kilku miejscach? A jeśli wrócisz do modyfikacji kodu po dłuższej przerwie? Pewnie już nie będziesz pamiętał, gdzie właściwie kod trzeba będzie zmienić.

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

Wtedy w razie potrzeby wystarczy zmienić PINA np. na PINB i/lub zmienić numer bitu, a kod sam się zmodyfikuje.

Ewentualnie (przy założeniu, że piny będą na pewno na tym samym porcie) rozwiązanie kolegi Daro69:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Być może wygląda to nieco bardziej skomplikowanie i trzeba się więcej napisać (ewentualnie nazwy makr można skrócić), ale jeśli w miarę rozwoju projektu trzeba będzie coś zmienić, to taki sposób pisania naprawdę procentuje.

Oczywiście nie ma takiego przymusu, będzie działać też z wpisaną "na sztywno" wartością 3, ale styl jaki przedstawiłem to taka "dobra praktyka". I proszę nie traktować moich uwag jako złośliwość czy wymądrzanie się ;) Moim zdaniem dobrze jest od początku uczyć się dobrych nawyków ;)

Autor:  Daro69 [ 16 sty 2019, o 20:01 ]
Tytuł:  Re: Pętla while - warunek

Tak, masz rację @andrews. :)
Poprawiłem w między czasie logikę w drugim "while", bo niepotrzebnie umieściłem tam '!'.
Nie ma adnotacji "edytowano", bo skorygowałem to zanim umieściłeś post.
(było - póki oba są w stanie niskim !( PINA & 3), zamiast póki nie są oba w stanie niskim ( PINA & 3).) sorka :?

Autor:  tokirium [ 17 sty 2019, o 19:55 ]
Tytuł:  Re: Pętla while - warunek

Też przychylam się do pierwszej propozycji, bo dla mnie jest bardziej przejrzysta, ale wszystkim dziękuję za pomoc. Od razu zadziałało tak jak powinno :)

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