Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 gru 2024, o 12:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 1 paź 2016, o 10:48 
Offline
Nowy

Dołączył(a): 28 wrz 2015
Posty: 7
Pomógł: 0

Witam,
programowaniem mikroprocesorów zajmuje się od niedawna wiec proszę o wyrozumiałość.
Napisałem krótką funkcję do wyświetlania na lcd menu (void wyswietlanie_menu(void)), która ma prezentować wprowadzony wcześniej czas załączania i wyłączania pompki do akwarium. Po naciśnięciu klawisza pilota (command =40) program powinien przeskakiwać do następnego wyświetlanego parametru. Problem polega na tym, że samoczynnie bez oczekiwania na klawisz pilota, program wychodzi z pętli do while. Dzieje się tak w przed ostatniej pętli do while która wyświetla czas wylaczania pompki.
Proszę o pomoc w rozwiązaniu tego problemu.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 12:16 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

W tym warunku gdzie ustawiasz flagę wyzeruj zmienną command - tak na szybko co rzuca mi się w oczy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 14:22 
Offline
Nowy

Dołączył(a): 28 wrz 2015
Posty: 7
Pomógł: 0

Niestety to rozwiązanie zapętla program na drugiej pętli do while.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 15:02 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

Po spełnieniu warunku w lini 18. "flaga == 1", następuje wyjście z pętli i przejście do drugiej pętli do..while, niestety zmienna flaga=1, (bo nie została ustawiona na 0), dlatego pętla 2 do..while "samoczynnie", kończy swój cykl przed wcześnie.

Zauważ, że przy 3 pętlą do..while masz już ustawione flaga=0 :)

wystarczy zmienną "flaga" wyzerować przed 2 pętlą do..while.

pozdrawiam,
Tomek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

A po co Ci tyle pętli while ?

Wysłane z mojego LIVE przy użyciu Tapatalka

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 15:39 
Offline
Nowy

Dołączył(a): 28 wrz 2015
Posty: 7
Pomógł: 0

Zrobiłem tak jak poradził mi kolega Tomek86. Teraz kod wygląda tak:

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


i co dziwne efekt jest ten sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:03 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

Zapomniałem dopisać, że tak jak kolega @Rafał555 napisał, że musisz wyzerować zmienną command, np command = -1.

Bo zwróć uwagę, kiedy na pilocie wciśniesz guzik z kodem 40, to przy kolejnej pętli do..while, ta zmienna ma dalej 'command=40'.

Więc dodatkowo musisz "zerować" (bądź ustawić inną wartość) zmienną command.

Bo jak tego nie zrobisz, to druga pętla w lini 32.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wykona się :) i zostanie ustawiona flaga = 1;

pozdrawiam,
Tomek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 16:33 
Offline
Nowy

Dołączył(a): 28 wrz 2015
Posty: 7
Pomógł: 0

Wyzerowanie zmiennej command spowodowało że program sie zawiesza lub zapętla na drugim do while:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 paź 2016, o 18:38 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

ciężko jest mi coś więcej doradzić ... kod który tu przedstawiłeś jest niekompletny, w sumie do tematu menu należało by podejść inaczej.

spróbuj przebudować swój kod w taki sposób:

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


Po wyświetleniu menu oczekuje na wykonanie się przerwania do obsługi pilota podczerwieni (tu tylko domyślam się, że poruszasz się po menu przy pomocy pilota)
I po odebraniu odpowiedniego "kodu guzika" przekazujesz odpowiedni typ enum POMPKA do funkcji void wybor_opcji_menu(POMPKA zmienna).
Powinno to być znacznie czytelniejsze :)

pozdrawiam,
Tomek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO