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



Teraz jest 3 sty 2025, o 01:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 27 ] 
Autor Wiadomość
PostNapisane: 20 mar 2014, o 10:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Witam


Zamierzam zrobić menu

Ekran główny powiedzmy jakiś napis "WITAMY"
przełączenie na ustawienia
> czujnik ON/OFF
> regulacja czasu > regulacja ++ lub --
> czas on/off
Po zwłoce czasowej bezsoczności 10s powrót do menu głównego.

Nie mam pomysłu jak się za to zabrać próbowałem coś z switch() ale nie bardzo to idzie .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 10:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

Może być troszkę zawile, ale coś powinno zobrazować: http://www.stsystem.pl/programowanie/avr/100-multimenu#



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 10:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 mar 2013
Posty: 236
Lokalizacja: Warszawa
Pomógł: 5

Cięzko pomóc, ale no to ja bym zrobil tak, jakies przerwanie, który zlicza jak długo wciśnieto switch:

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


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

Możesz sobie w peli sprawdzac czy króto wciśnięto i wtedy sobie zwiększac jakiś parametr do regulacji, np. press_up++ lub press_down--;

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 10:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

icer_cmg juz to widziałem przeglądałem nasze forum i w google ale jakoś nic takiego prostego może pominą powrót po czasie do głównego menu
a jak powinna wyglądać struktura obsługi typu ustawienia >czujnik >on/off

przyciski zdefiniowane ma 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  
PostNapisane: 20 mar 2014, o 11:04 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Bedi napisał(a):
...Nie mam pomysłu jak się za to zabrać próbowałem coś z switch() ale nie bardzo to idzie .


Z wykorzystaniem switch i case robiłem swoje pierwsze tzw menu ;)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Minus mojego menu jest taki że muszę "przelecieć" ;) wszystkie pozycje menu żeby znowu dostać się do pierwszej. No ale że mam tylko cztery takie pozycje to nie za bardzo mi to przeszkadzało.
Co do zwłoki czasowej, to odpaliłbym timera programowego w którym bym ustawił flagę na te 10s, a w menu po każdorazowym naciśnięciu przycisku zerowałbym zmienne odpowiedzialne za zliczanie tych dziesięciu sekund.
Tak zrobiłbym ja. No ale mam świadomość że jest to dość prostacki i prymitywny sposób na menu :)

------------------------ [ Dodano po: 17 minutach ]

Bedi napisał(a):
icer_cmg juz to widziałem przeglądałem nasze forum i w google ale jakoś nic takiego prostego może pominą powrót po czasie do głównego menu
a jak powinna wyglądać struktura obsługi typu ustawienia >czujnik >on/off ...


Ustawienie stanu czujnika rozwiązałbym w ten sposób. Na przykład przyciskiem SW3 wchodziłbym do menu, następnie przyciskiem SW1 zmieniałbym stan czujnika z ON na OFF. Samo ustawienie stanu czujnika zamknąłbym w funkcji w której właśnie przyciskiem SW1 przełączałbym z ON na OFF.

Poniżej przykład jak wygląda jedna z funkcji w której ustawiam jasność koloru z wcześniejszego postu:

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


W Twoim wypadku było by tylko istotne co się dzieje ze zmienną "blue", dodatkowo ja wykorzystuję tutaj dwa przyciski. Jednym zwiększam a drugim zmniejszam wartość "blue". Naciśnięcie SW3 powoduje że zmienna "w" wykorzystywana w switch() się zwiększa o jeden, czyli wychodzę z ustawiania "blue" i przechodzę do kolejnej pozycji "menu".

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 11:36 
Offline
Użytkownik
Avatar użytkownika

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

ja robilem podobne do twojego zamiast napisu jest data i godzina plus 2 temp. w menu ustawiam jasnosc podswietlenia lcd. wlacz / wylacz pokazanie daty i takie tam inne opcje.

pytasz jak zrobic on off.
nic prostrzego deklarujesz zmienna np uint8_t czy_data = 0;
w petli nieskończonej sprawdzasz czy jest 1 czy 0 jak 1 wykonaj akcje. w menu ustawiasz czy ma byc 1 czy 0.
ja dodatkowo zapisuje w eeprom i w petlo sprawdzam jak jest ustawione dzieki temu po zaniku zasilania i jego powrocie wszystko wraca do zadanych ustawien.

mam nadzieje ze pomoglem?

Wysłane z telefonu

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Nic mi to nie dało sam zaczynam od podstawy >>

efekt taki aktualnie problem że przyciski nie reagują płynie kombinuje coś z timerem ale nie widać rezultatów












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



Ostatnio edytowano 20 mar 2014, o 13:24 przez Bedi, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:24 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

No a gdzie zmienna "s" zmienia swoją wartość?

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

już poprawiłem z "s' na 'a' ale nadal to samo



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:31 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Nigdzie nie realizujesz eliminacji drgania styków. Poszukaj na Mirka blogu jak łatwo można to rozwiązać w programowy sposób. Zresztą już w przykładach które podałem wcześniej jest ta eliminacja drgań styków zawarta, chodzi o zmienną "key_lock" No ale na Mirka blogu jest to konkretnie opisane.
Brak tej eliminacji może powodować że zmienna "a" przyjmuje różne dziwne wartości. Sprawdź to sobie próbując np zwiększanie tej zmiennej wyświetlić na LCD.

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Testowałem już to w 1 momencie samym kondensatorem teraz zrobiłem pełne 10k i100nF jest lepiej ale nadal brak pyszności



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 13:43 

Pomógł: 0

No to nie jest żadna eliminacja drgań, poczytaj co ci kolega wyżej podesłał, a zrozumiesz o co chodzi.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 15:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Poprawiłem ale teraz proszę o wskazówki do menu cel jest taki że z głównego menu do ustawień i potem czujnik

I jak rozwiązać jeszcze ON/OFF

ON to np ustawienie na wyjściu PB1 jedynki a off to zero logiczne







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: 20 mar 2014, o 16:43 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Zrobiłbym to tak że Twój obecny case0 bym zostawił, natomiast rozbiłbym case1. A więc gdy z==0 case0 ekran początkowy, gdy z==1 case1 USTAWIENIA no i teraz albo chwila zwłoki i "z" przyjmuje automatycznie wartość 2 a co za tym idzie przechodzi do case2 albo z==2 po naciśnięciu przycisku i dopiero wtedy do case2. W case2 zostanie ustawienie czujnika np tak czujnik_on; i czujnik_off; :) Przed main musisz zdefiniować te dwie instrukcje #define czujnik_on PORTB |= (1<<PB1) oraz #define czujnik_off PORTB &= ~(1<<PB1)
Mam nadzieję że w miarę zrozumiale napisałem i że się nigdzie nie walnąłem :)

------------------------ [ Dodano po: 9 minutach ]

Jednak się pomyliłem zamiast "a" miałem pisać "z".

_________________
http://www.marcingibas.pl



Ostatnio edytowano 20 mar 2014, o 16:54 przez Marcin_G, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 16:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Tylko zobacz
case 0
case 1
case 2
to to jest zmienna "z" a nie "a"

" a " jest tylko w funkcji " if "
" a " ma służyć jako enter zatwierdzanie czyli wchodzę w ustawienia I tam np nie jeden czujnik a 2 i wybieram który przyciskami up down i zatwierdzam enter ukazuje mi się ON OFF wybieram i zatwierdzam (tutaj przydał by się ptaszek które zostało wybrane)

" z " poruszam się jako gorą duł UP DOWN czyli Ekran główny >> Ustawienia>> i w przyszłości inne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 16:56 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Edytowałem właśnie post, zauważyłem babola :(

_________________
http://www.marcingibas.pl



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

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Zobacz zrobiłem coś takiego

Ale efekt jest taki ze wystarczy ze wcisnę z głównego menu przycisk od zmiennej a i od razu mam wyświetlony czujnik


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: 20 mar 2014, o 17:20 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

No a jak ma być inaczej skoro menu główne obsługujesz zmienną "z" w switch a w menu czujnika już zmienną "a" w switch. Skoro więc jesteś w menu głównym, domyślam się że na ekranie początkowym, a naciskasz przycisk od zmiennej "a" to przyjmuje ona wartość 1 i dlatego od razu jesteś w menu czujnika.

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 mar 2014, o 17:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Wiem o tym

ale nie wiem jak to zniwelować jest trochę lepiej >



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: 20 mar 2014, o 18:55 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Dlaczego cały czas używasz switch(a) ? Piszesz że do tej zmiennej masz przypisany przycisk. To nie jest chyba dobry pomysł. Jak będziesz miał więcej czujników to do obsługi każdego zamontujesz osobny przycisk? No raczej nie :)
Tak więc mając te cztery przyciski zrobiłbym to tak że np trzeci wykorzystałbym do poruszania się po menu, czyli zmienia wartość "z", z==1 to EKRAN POCZĄTKOWY, z==2 to USTAWIENIA, z==3 to CZUJNIK. Po wejściu w CZUJNIK przyciskiem pierwszym i drugim zmieniałbym wartość "a", czyli ustawiał czujnik_on lub czujnik_off , a to ustawianie zamknąłbym np w takim warunku:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To jest oczywiście tylko przykład, pisany tak na sucho no i jest to menu raczej liniowe.

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 11:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Właśnie że ma być po wybraniu ustawień rysunek wszystko zobrazuje >>

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 11:49 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Kurcze nikt inny się nie wypowiada :( Moja wiedza jest marna, a co za tym idzie menu też nie będzie najwyższych lotów :(
No ale skoro zacząłem pisać to spróbuję jakoś to skończyć.
Patrząc na diagram który rozrysowałeś, zrobiłbym tak:
EKRAN GŁÓWNY -> z==0 naciskasz DOWN -> z==1, DOWN -> z==2, UP -> z==1, czyli poruszamy się po głównym MENU. Przy z==1 czyli USTAWIENIA, naciskasz OK -> a==1 i jesteś w pozycji CZUJNIK1. Chcąc wejść w opcje konfiguracji CZUJNIK1 naciskasz OK -> a==2 i tu ustawiasz ON lub OFF przyciskami UP i DOWN. Po dokonaniu wyboru naciskasz OK ->a==1, czyli znowu jesteś w menu gdzie wybierasz czujniki. Teraz chcąc przejść do następnego czujnika czyli CZUJNIK2 naciskasz DOWN -> a==3, naciśnięcie OK -> a==4 i ustawiasz kolejny czujnik, naciśnięcie OK -> a==3 i znowu jesteś w menu czujników.
To by chyba było wszystko w kwestii tego co narysowałeś. Pojawia się jednak problem powrotu do menu głównego czyli USTAWIENIA, INNE, itd. Ja bym dołożył kolejny przycisk np BACK, którym wracałbym do menu głównego.
Tak jak pisałem problem z tym menu jest taki że będziesz musiał na kartce dokładnie sobie wszystko rozrysować i pamiętać jakie wartości przyjmują konkretne zmienne w konkretnych pozycjach menu żeby nic się nie popierniczyło.

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 12:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

To nie takie łatwe jednak jak się wydaje
Bo trzeba gdzieś zapisać stan czujnika w jakim się znajduje żeby po rozłączeniu zasilania nadal był ustawiony stan zapamiętany a nie restart ustawień .
co do 4 przycisku jak najbardziej BACK się przyda wchodzimy w czujnik wybieram OFF i nie cofa mnie do menu czujników tylko trzeba by dodać jakiś znacznik że został rzeczywiste wyłączony i dopiero cofam przyciskiem BACK.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2014, o 12:45 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

No nie jest łatwe ;) Żeby ustawienia zostały zapamiętane to musisz zapisać je do EEPROM-a. Obejrzyj poradnik Mirka EPPROM I STRUKTURY http://www.youtube.com/watch?v=ix0EBtdiviY tam jest pokazany zapis do tej pamięci.
W przykładzie który Ci napisałem wyżej, jak wejdziesz w CZUJNIK1 w celu ustawienia ON lub OFF, to tam już poruszasz się przyciskami UP i DOWN i dopiero naciśnięcie OK sprawi że wybrany stan zostanie zapisany i znowu będziesz w menu CZUJNIKÓW. Co do znacznika możesz zamiast tego wyświetlać tylko napis ON lub OFF w zależności od opcji jaką wybierzesz korzystając z przycisków UP i DOWN.

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 mar 2014, o 13:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Aktualnie uzyskałem coś takiego :
nie zeruje nigdzie zmiennych .
po chwili ustawienia nakładają się na czujnik ;/









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: 24 mar 2014, o 16:13 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Sorry że pytam, ale czytasz to co pisałem wcześniej? :)
Przecież pisałem że powinieneś kolejne poziomy menu robić w oparciu o "case". Spójrz na swój kod. Zwiększasz zmienną "b" przechodząc w ten sposób do menu USTAWIENIA, case == 1. Następnie w tymże właśnie "case" masz warunki do zupełnie innej zmiennej które to mają spowodować wyświetlanie kolejnych pozycji menu w linii gdzie jest wyświetlany napis USTAWIENIA. Czemu więc się dziwisz że po chwili na napis "CZUJNIK 1" nakłada się napis "USTAWIENIA"? Przecież case == 1 cały czas, czyli napis USTAWIENIA ma być widoczny. Co z tego że zwiększysz "c" , skoro przy kolejnym "obrocie" pętli program znowu sprawdzi sobie "case" i zobaczy że case == 1 , czyli trzeba wyświetlić napis USTAWIENIA, następnie sprawdzi sobie zmienną "c" i wyświetli to co będzie wynikało z warunku dotyczącego zmiennej "c".
Spróbuj naprawdę zrobić sobie prostackie menu gdzie każda pozycja będzie w innym "case" i jak to zadziała, to kombinuj dalej, ulepszaj itd. :)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2014, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 lut 2014
Posty: 42
Pomógł: 1

Robiłem już tak jak radzisz ale to wtedy wszystko jest po kolej można powiedzieć takie najprostsze menu a ja chce efekt jaki narysowałem .

Switch() chyba średnio się do mojego zastosowania nadaje może macie jakieś inne rady dla mnie albo ktoś mi podrzuci kawałek kodu bo już 5 dzień jak stoję na menu a gdzie RC5 Termometr i inne

Aktualnie wygląda to tak >>




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

Strefa czasowa: UTC + 1


Kto przegląda forum

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