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 22 lip 2025, o 05:35


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
    Autor Wiadomość
    PostNapisane: 21 lip 2018, o 12:35 
    Offline
    Użytkownik

    Dołączył(a): 13 paź 2015
    Posty: 303
    Lokalizacja: Rybnik
    Pomógł: 10

    Witam wszystkich,

    Po oglądnięciu poradników video Pana Mirka na temat pamięci EEPROM staram się wykorzystać tą wiedzę na kolorowej diodzie RGB. Już od dłuższego czasu staram się napisać program na zestawie uruchomieniowym ATB wraz z ATB SHIELD IO. Założenie działania programu jest takie:
    Przyciskiem zmieniać kolory diody RGB oraz wraz z każdą zmianą koloru procesor powinien zapisać dany kolor do pamięci EEPROM, aby po resecie włączył się zapamiętany kolor diody.

    Częściowo się to udało. Zmieniam kolory i zapisuje je do pamięci EEPROM, ale podczas resetu nie wszystkie kolory są prawidłowo zapamiętane. Problem jest z kolorem białym, czerwonym i żółtym.

    Poniżej zamieszczam kod programu (Nie uporządkowany bo w fazie testów). Jakby ktoś mógł sprawdzić na swoim zestawie i może będzie wiedział o co chodzi:

    main.c
    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.


    common.c
    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.


    common.h
    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  
    PostNapisane: 21 lip 2018, o 13:40 
    Offline
    Użytkownik

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

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


    Nie analizowałem dokładnie całego kodu, ale to co zauważyłem "na pierwszy rzut oka". Masz wewnątrz funkcji niezainicjowany wskaźnik wsk i zapisujesz go do EEPROM? Raczej to nie zadziała tak jak zakładasz. Wskaźnik będzie zawierał przypadkowe dane. Kompilator nie zgłaszał zastrzeżeń?

    W ogóle nie bardzo rozumiem co chcesz zrobić. Po co używasz funkcji atoi()? Po co te warunki? Co tak naprawdę chcesz wpisać do tej struktury? Jeśli chcesz zapisać do EEPROM aktualną zawartość struktury ram_cfg wywal zupełnie tę funkcję RBG() i w jej miejscu użyj od razu funkcji copy_ram_to_eem(), przykładowo:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    ...a nawet można jej użyć tylko raz, po zakończeniu tych wszystkich instrukcji if.

    W pętli głównej, zamiast tego szeregu if'ów lepiej użyć switch. Tak jak jest też będzie działać, ale ze switch będzie czytelniej.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    EDIT:
    Jeszcze nie zauważyłem jednej rzeczy. Przykładowo makro DLEDR_ON masz zdefiniowane jako PORTB &= ~LEDR_PIN.
    Później używasz zapisu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Co zostanie rozwinięte przez preprocesor (tak w uproszczeniu) do:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Niewykluczone, że to jakoś zadziała, ale nie sądzisz, że to dość dziwny zapis?
    Do ustawienia koloru w strukturze używaj raczej wartości liczbowych (0 lub 1, bo zakładam, że nie sterujesz jasnością poszczególnych kolorów) np.:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    i dopiero później na podstawie tej wartości zmieniaj stan pinu, tak jak to masz na początku funkcji main().


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lip 2018, o 11:45 
    Offline
    Użytkownik

    Dołączył(a): 13 paź 2015
    Posty: 303
    Lokalizacja: Rybnik
    Pomógł: 10

    Dziękuję Ci bardzo andrews, wprowadziłem poprawki według Twoich wskazówek i teraz kod działa tak jak sobie założyłem.

    Funkcją atoi() chciałem zamienić parametr na liczbę i wpisać ją do struktury, widać musze poczytać na temat tej funkcji, widziałem ją w poradniku i też próbowałem z niej skorzystać. Jednak na działaniach liczbowych nie bardzo :p



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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