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 9 lip 2025, o 11:20


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
    Autor Wiadomość
    PostNapisane: 9 cze 2018, o 04:45 
    Offline
    Użytkownik

    Dołączył(a): 15 gru 2013
    Posty: 213
    Pomógł: 5

    Proszę o podpowiedz w czym tkwi błąd lub niezrozumienie do końca struktur.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Mam taki o to kod, w którym to ma się wyświetlać na linijce LED liczba w zależności od x . W tym problem że na lcd jest wyświetlana liczba x ,lecz ni jak się to ma do odwzorowania na pasku led.
    Jeżeli zamiast x wstawie np. 3 to OK. na linijce jest wyświetlana ta liczba, a jeżeli zamiast niej wpiszę x to jest już zupełnie co innego wyświetlane choć niby to też liczba 3. Czego tu nie kumam w czym problem .
    Proszę o wskazówkę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 07:27 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 183
    Lokalizacja: Kraków
    Pomógł: 30

    Na początku przypisujesz zmiennej x wartość zapisaną w ram_cfg.poziom, następnie masz szereg warunków if() gdzie do zmiennej ram_cfg.poziom wpisujesz jakąś inną wartość w zależności od tego , który if jest spełniony. I teraz powinieneś do x wpisać tą nową wartość ram_cfg.poziom. Tymczasem wyświetlasz na LCD wartość x , która była przypisana na samym początku.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 07:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Witam,
    Chodzi o kolejność.
    Program jest wykonywany linijka po linijce.
    1. ify zapisują do struktury
    2. teraz do x zapisz to co jest w strukturze
    3. wyświetl x.

    Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 08:02 
    Offline
    Użytkownik

    Dołączył(a): 15 gru 2013
    Posty: 213
    Pomógł: 5

    No dobra może inaczej x =3 ,na wyświetlaczu pokazuje 3 czyli ta sama liczba jest w nawiasie kwadratowym to dlaczego z tablicy jest pobierana zupełnie inną wartość.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 08:25 
    Offline
    Użytkownik

    Dołączył(a): 18 kwi 2013
    Posty: 183
    Lokalizacja: Kraków
    Pomógł: 30

    A co w tej tablicy jest zapisane?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 09:09 
    Offline
    Użytkownik

    Dołączył(a): 15 gru 2013
    Posty: 213
    Pomógł: 5

    W tablicy są liczby które mają zapalać ledy na porcie A i tak też działa ale tylko jeżeli wpisze fizycznie jakąś liczbę ale jeżeli za pośrednictwem zmiennej x to już zupełnie inna liczba jest wyświetlana z tablicy. Nie potrafię już jaśniej tego opisać

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

    uint8_t const tablicy[ ] PROGMEM={ 1,2,4,8,16 }
    Tak wygląda tablica.
    Nie mam teraz komputera pod ręką żeby skopiować dokładniej kody



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 09:46 
    Offline
    Użytkownik

    Dołączył(a): 07 cze 2016
    Posty: 563
    Pomógł: 143

    Jeśli zdefiniowałeś tablicę w pamięci FLASH przy użyciu atrybutu PROGMEM, do odczytu jej elementów musisz użyć makra pgm_read_byte():
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Opcjonalnie możesz zdefiniować tablicę we FLASH przy użyciu kwalifikatora __flash i odczytywać jej elementy tak, jak masz w tej chwili:
    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 wybrać, który sposób jest dla Ciebie wygodniejszy ;)


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 cze 2018, o 11:33 
    Offline
    Moderator
    Avatar użytkownika

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

    a ja od siebie dodam, że poza oczywiście słusznymi uwagami kolegów wyżej, NAJWAŻNIEJSZE to nauczyć się jak TESTOWAĆ własny kod ....

    bo jeśli piszesz, że masz x=3 a wyświetla ci się CAŁKIEM inna wartość z tej komórki tablicy to oznacza że robisz jakiegoś TRAGICZNEGO BABOLA ... i co ? a gdyby nie było forum to nie da się tego samemu sprawdzić ? No da się i to bardzo prosto albo chociaż zbliżyć się do problemu.

    OCZYWIŚCIE ZAKŁADAM że ta twoja tablica TabPozytyw[] jest zdefiniowana w pamięci RAM ???? bo jeśli we FLASH - to robisz tego MEGA BABOLA o którym wyżej napisał kolega andrews - czyli nie stosujesz do odczytu pgm_read_byte()

    UWAGA!

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


    i wywalasz na PORTB - i sprawdzasz czy się pokaże na PORTB binarnie liczba 17 .... No toż jeśli mi to zadziała to wiem, że bzdurnie myślałem, że źle tablice obsługuję, że coś nie rozumiem z tablicami - bo działa tak jak ma działać ... TAK czy NIE ?

    Dzięki temu posunąłem się do przodu z rozwiązaniem zagadki bo wiem, że problem leży gdzie indziej w moim kodzie. TAK TAK wiem - to bardzo prosty i niektórzy powiedzą, że durny test - tymczasem niestety początkujące osoby NAWET takiego testu nie są w stanie wymyślić - więc go podpowiadam.

    ---------------------------------

    ok ale co dalej ?

    no to spójrzmy na ten kod z pierwszego postu

    Cytuj:
    uint8_t x = ram_cfg.poziom; // <----- tutaj przypisujesz wartość zmiennej x ze struktury ram_cfg.poziom .... załóżmy że była tam w ram_cfg.poziom wartość = 4

    // no to teraz w tej sekcji - wartość ram_cfg.poziom zmieni ci załóżmy wartość na 6 bo załóżmy że STAN4_ON był wysoki
    // pomijam już fakt, że tu powinny być wszędzie else po pierwszym IF'ie wg mnie
    if(STAN0_ON)ram_cfg.poziom = 0;
    if(STAN1_ON)ram_cfg.poziom = 1;
    if(STAN2_ON)ram_cfg.poziom = 2;
    if(STAN3_ON)ram_cfg.poziom = 3;
    if(STAN4_ON)ram_cfg.poziom = 4;
    if(STAN5_ON)ram_cfg.poziom = 5;
    if(STAN6_ON)ram_cfg.poziom = 6;
    if(STAN7_ON)ram_cfg.poziom = 7;

    // <---- no i teraz czego się spodziewasz ??? jakiej wartości x ??? na pewno będzie to stara wartość jeszcze z przed tych IF'ów
    PORTB = TabPozytyw[x];
    lcd_locate(1,0);
    lcd_int(x);


    ------------------------ [ Dodano po: 6 minutach ]

    a jeśli tablica TabPozytyw() - jest zdefiniowana we Flashu za pomocą PROGMEM to przecież MUSISZ pan to zrobić tak do PORTB

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


    Autor postu otrzymał pochwałę

    _________________
    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  
    PostNapisane: 9 cze 2018, o 17:56 
    Offline
    Użytkownik

    Dołączył(a): 15 gru 2013
    Posty: 213
    Pomógł: 5

    Panowie no i oczywiście działa :D .Wiem to są podstawy i zdaję sobie sprawę że to nawet śmieszne pytać się na forum o takie rzeczy :oops: no ale jakoś nie dałem rady znów wpaść na ten ogromy babol :evil: . zazdroszczę wam takiej wiedzy ale to też mnie motywuje do dalszej nauki, tej pięknej sztuki jaką jest programowanie w "C". Dziękuję Wam 8-)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 cze 2018, o 09:06 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    W skrócie to: książki, czytać, praktykować :)



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

    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