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



Teraz jest 2 gru 2024, o 16:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: Problem z menu
PostNapisane: 17 mar 2016, o 09:18 
Offline
Nowy

Dołączył(a): 13 gru 2013
Posty: 19
Pomógł: 0

Witam Wszystkich forumowiczów,
temat dość często przewijający się tutaj, a mianowicie menu.
Potrzebuję do małego projektu dodać proste szybkiem menu, dodałem więc (przesyłam część kodu) menu switch()
oraz funkcje obsługi klawiszy. Problem z tym ze mogę zwiększyć menu o 1 i potem cofnąć do 0, a menu ma więcej pozycji.

Wczesniej funkcje obsługiwały mi termostat i bez problemu zwiększałem lub zmniejszałem zadaną temp.

Proszę o pomoc bo siedzę przy tym już jakiś czas i nie wiem co jest nie tak. (Zaczynam przygodę z AVR i może dla jednych żecz prosta okazała się dziś dla mnie wielką górą)

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


Tak więc w pętli nieskończonej mam
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

tu część kodu obsługi minutnika i termostatu
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: 17 mar 2016, o 11:20 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1081
Pomógł: 73

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

warunek mógł się wykonać. (Pozycja musi przyjąć wartości mniejsze od zera)

------------------------ [ Dodano po: 7 minutach ]

W ogóle zmienne pozycja i nastawa, zrób typu uint8_t a warunek
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmień na if(pozycja == 255) {pozycja = 6;}



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 14:16 
Offline
Nowy

Dołączył(a): 13 gru 2013
Posty: 19
Pomógł: 0

Zmieniłem na zmienną int8_t i efekt jest identyczny
Przesuwa menu do case 1: i z powrotem do case 0:
Albo popełniłem gdzieś błąd albo czegoś nie rozumiem wrrr..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 14:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

A jak działa Ci funkcja key_press? Jeżeli naciśniesz dwa razy zwieksz to będziesz miał na zmianę wartości 1 i 0, czy zatrzyma się na 1?
Jeśli zatrzyma się, nie wykrywasz braku wciśnięcia przycisku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 14:41 
Offline
Nowy

Dołączył(a): 13 gru 2013
Posty: 19
Pomógł: 0

zatrzymuje się na jeden
do zera wraca funkcją zmniejsz

------------------------ [ Dodano po: 3 minutach ]

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


------------------------ [ Dodano po: 20 minutach ]

Hmm, czym dalej w las to ciekawiej się robi.
OK, idzie sobie pokoleji menu czy to w góre czy w dół

jednak problem jest taki że pomiędzy kolejnymi naciśnięciem klawisza musi być długa przerwa.
a w projekcie nie ma delay-ów

------------------------ [ Dodano po: 22 minutach ]

Co ciekawe też wcześniej pod tymi funkcjami które przewijam menu były zmienne do termostatu i działały płynnie (szybko)



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

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

W 11 linijce w ostatnim listningu zmień (*klock)++; na (*klock)=(*klock)+5;
Zmniejszysz 5-krotnie czas pomiędzy naciśnięciami.
Rozumiem, że w tym momencie działa dobrze, tylko pomiędzy naciśnięciami jest długi czas?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 15:07 
Offline
Nowy

Dołączył(a): 13 gru 2013
Posty: 19
Pomógł: 0

Dokładnie tak

------------------------ [ Dodano po: 3 minutach ]

Jest lepiej czas sie skrócił, ale płynnie nie jest



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

Chodzi o to, że w tej linii zwiększasz wartość zmiennej klock. Kolejne wciśniecie przycisku jest wykrywane, jeśli ta wartość jest równa 0. Czyli po przepełnieniu zmiennej ( u Ciebie typu uint8_t). Możesz zamiast "+5" dać większą wartość, przetestuj na kilku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 mar 2016, o 17:07 
Offline
Nowy

Dołączył(a): 13 gru 2013
Posty: 19
Pomógł: 0

TAK, zmiany w zmiennej klock rozwiązały mój problem. Dziękuję bardzo za pomoc !!!!

Pozdrawiam. :)



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 1 gość


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