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



Teraz jest 16 wrz 2024, o 21:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
 Tytuł: proste menu
PostNapisane: 2 lut 2012, o 14:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Stworzyłem proste menu które pozwala jednym przyciskiem przeskakiwać pomiędzy trzema wyrażeniami, a mój problem polega na tym że gdy wciskam przycisk to czasami wskakuje na wyrażenie 2 po dłuższym wciśnięciu na wyrażenie 3. Co zrobić aby ta operacja była płynna?
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  
 Tytuł: Re: proste menu
PostNapisane: 2 lut 2012, o 15:06 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

kris napisał(a):
Co zrobić aby ta operacja była płynna?


Przeczytać do końca książkę, zrozumieć zasadę działania z przyciskami z rozdziału, który temu zagadnieniu poświęciłem w szczegółach, zobaczyć i zrozumieć opisaną tam funkcję SuperDebounce a także przeczytać rozdział:

"Wstęp do systemów czasu rzeczywistego"

A wszystko stanie się jasne jak drut i przejrzyste jak słońce. Jednocześnie opisane problemy skończą się jak toporem uciął ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 2 lut 2012, o 15:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

dzięki za wskazówki ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 11:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Stworzyłem coś takiego tylko nie wiem czemu nie działa prawidłowo. Chciałbym aby jednym przyciskiem po kolei poruszać się miedzy test1, test2, test3, proszę o wskazówki ;)
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  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 12:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

Pierwsza uwaga, proszę nie zamieszczać na forach kodów źródłowych z bibliotek z książki. Swój własny można - ale prośba - nie kody z książki OK ? ..... teraz nie mam czasu analizować - kodu ale później wrócę i sprawdzę - może coś mi się nasunie to dam znać.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 15:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Może jest jakiś błąd w pętli którą zdefiniowałem? Bo po wciśnięciu przycisku wywołana zostaje dowolna funkcja, a interesuje mnie kolejno przeskakiwanie z jednej na drugą jednym przyciskiem.
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  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 15:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

wiesz do tej pory uważałem ze do takiego celu jest wygodniejszy encoder , i zwykle to rozwiązanie stosuję
a co do powyższego , wcale mnie to nie dziwi ze wybiera przypadkowo przecież ja tu widzę 3 elementy na jednym przycisku
uruchamiane w pętli jedno po drugim wiec na co trafisz to masz :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 15:37 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

A jeśli tak by wyglądał kod?
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  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 16:11 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

Już tłumaczę, w pierwszym przypadku użyłeś jednej zmiennej k1 dla każdej z funkcji, tymczasem one muszą mieć całkiem oddzielne zmienne.

zdefiniuj sobie więc trzy:

uint8_t k1, k2, k3;

i użyj każdą do oddzielnego wywołania SuperDebounce

bez żadnego robienia dodatkowej pętli for() ;) .... czyli:


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

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 3 lut 2012, o 16:13 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

eeeh nie - skucha całkiem źle - ty wywołujesz je z tym samym klawiszem KEY1_PIN :( ... to trzeba całkiem inaczej...

wprowadzasz sobie jakąś zmienną, która będzie ci wskazywała poziom menu

i wywołujesz tylko raz funkcję SUperDebounce, a funkcja którą wywołujesz będzie jedynie zwiększała wartość tej zmiennej sprawdzając czy nie przekroczyła wartości 2 a jeśli tak to znowu 0

i w tej funkcji dopiero w zależności od tej zmiennej wywołujesz odpowiednią funkcję z pozycją twojego MENU

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 5 lut 2012, o 13:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Stworzyłem coś takiego tylko nie działa, co może być nie tak?
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  
 Tytuł: Re: proste menu
PostNapisane: 5 lut 2012, o 15:26 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

A po co ci ta cała funkcja zmiana? po pierwsze.

A po drugie przeanalizuj sobie jak ona działa. Definiujesz w niej zmienną i tworzoną automatycznie przy wejściu i jest ustawiana zawsze na 2 ... to w ogóle niezrozumiały kod tej funkcji :(

utwórz sobie zmienną lokalną ale statyczną zmiana, ale w funkcji menu, i zwiększaj ją po każdym wejściu o 1, sprawdzając jednocześnie czy jest większa niż 2 i wtedy znowu 0.

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


I na prawdę - proszę mnie zrozumieć i się nie gniewać - ale jeśli dalej w kolejnych kodach kolega będzie wciąż robił inicjalizację LCD w tak dziwnych miejscach programu - to ja się poddaję i przestanę podpowiadać. :(

Przecież pisałem o tym koledze już wcześniej w tym temacie nie mówiąc o tym, że książce wyłożyłem temat wyraźnie na jakie sekcje dzielimy główną funkcję main() i że tam na jej początku dokonujemy inicjalizacji wszystkich modułów. A kolega z uporem godnym podziwu wciąż wkleja w dowolne miejsca kodu tę inicjalizację LCD :(

Zajrzyj do swojego kodu powyżej - pokazałem ci tam wyraźnie jeszcze raz gdzie ma być sekcja inicjalizacji - może teraz kolega zapamięta na zawsze ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 13 lut 2012, o 11:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Menu działa na pojedynczym przycisku, dzięki za pomoc :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 18:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

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


Chciałbym zastosować w nim przejście do funkcji np. temp() jeśli nie zostanie wciśnięty żaden przycisk przez 4 s. W jaki sposób mogę to zrobić?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 18:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

Oj przepraszam ale na takie pytanie w ogóle nie odpowiem. To jest wręcz prośba o napisanie programu. Panie kolego, proszę zaprezentować jakiś konkretny problem, spróbować pokazać swoje rozwiązanie i opisać co w nim konkretnie sprawia kłopot....


a nie zadawać pytania typu - życzenia: "chciałbym żeby w programie było to i to - jak to zrobić?"

sorki ale to dla mnie nie jest pytanie - OK ? (bez urazy proszę - ale pytania też trzeba umieć zadawać)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 18:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jeśli nie wcisne żadnego przycisku to powinno odczekać i wywołać funkcję temp(), a w moim przypadku po 4 sekundach przechodzi do funkcji temp().



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 19:41 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

No teraz lepiej ;)

Ale po pierwsze w takim przypadku pomijając na razie to że nie wykonuje się funkcja temp, to praktycznie ciężko będzie ci w ogóle wywołać któryś klawisz chyba że przy starcie programu będziesz jakiś trzymał wciąż wciśnięty.

A druga sprawa - skoro nie wywołuje ci się funkcja temp to znaczy że masz ją źle napisaną bo to niemożliwe żeby się nie wywołała.

Po trzecie to nigdy nie warto tak pisać programu a szczególnie MENU, że pisze się po kawałku doklecając co chwilę jakąś nową dziwną możliwość. Najpierw to trzeba sobie na kartce papieru rozrysować całe MENU - jak ma działać, co po kolei i skąd wywoływane itd..... czyli prościej mówiąc przygotować sobie algorytm - a potem łatwiej to oprogramować. Tymczasem tak? to wychodzą niestety potworki :(

ale jak mówię - to nie ma nic wspólnego z tym że ci się rzekomo temp() nie wykonuje bo to jakieś nieporozumienie to co napisałeś.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 22:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sty 2012
Posty: 40
Pomógł: 0

Funkcja temp() po 4 sekundach się uruchamia ale nie mam pomysłu w jaki sposób stworzyć coś, może funkcję która rozpozna że nic się w danej chwili nie dzieje np. nie został wciśnięty żaden klawisz przez 4 sekundy i dopiero powinno nastąpić wywołanie funkcji temp(). Nie proszę o gotowy kod tylko o jakieś wskazówki w jaki sposób mogę ten problem rozwiązać :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 23:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 gru 2011
Posty: 110
Lokalizacja: Dolnyśląsk
Pomógł: 0

W książce zobacz taki rozdział jak "8.4 Wstęp do systemów czasu rzeczywistego"
I zwróć uwagę na timery programowe.

Będziesz mógł przy ich wykorzystaniu cały czas przez te cztery sekundy sprawdzać czy nie został wciśnięty któryś z guzików po czym odpali się twoja funkcja.
Zapomnij o liniowym pisaniu i o funkcji _delay warto korzystać z tych timerów. Dużo problemów odchodzi w niepamięć(albo dylematów).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: proste menu
PostNapisane: 14 lut 2012, o 23:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27290
Lokalizacja: Szczecin
Pomógł: 1041

DidekxD napisał(a):
W książce zobacz taki rozdział jak "8.4 Wstęp do systemów czasu rzeczywistego"
.


Bardzo dobra i cenna podpowiedź tym bardziej, że kolega DidekxD już stosuje te mechanizmy w swoich kodach z powodzeniem, a co więcej widać to w kodach w jego postach więc można także podpatrzeć jak inni to robią.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 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