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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 8 cze 2025, o 19:40


    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 ] [ Zaznacz wszystko ]
    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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

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

    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 :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27407
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO