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 16 lip 2025, o 11:50


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
    Autor Wiadomość
    PostNapisane: 25 mar 2017, o 22:14 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    Witam.
    Piszę sobie mały programik do obsługi klawisza i ledów z zestawu ATB i mam problem , bo nie wiem czy ja coś źle robię, czy moja funkcja jest abstrakcją jak obrazy niektórych malarzy. Czy to w ogóle ma prawo działać? Przytoczę przykład -ciało funkcji dla lepszego zobrazowania sytuacji:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    wszystko jest pisane dosyć liniowo, ponieważ uczę się posługiwania funkcjami i if-ami, ale jeśli moja funkcja migacz_foor(); jest funkcją typu void i jest wpisana do funkcji, która także jest typu void, to czy to w ogóle będzie działaś? Funkcja migacz_foor() jest typowym robakiem, czyli przesuwa zapaloną diodę z lewa na prawo. w

    _________________
    Nikt nie mówił,że będzie łatwo...



    Ostatnio edytowano 25 mar 2017, o 22:39 przez wojciechgorzolka, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 mar 2017, o 22:36 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2014
    Posty: 46
    Lokalizacja: okolice JOWISZA czasami PL
    Pomógł: 7

    funkcja migacz_foor() zadziała gdy KLAWISZ_WCISNIETY da wartość prawda czyli >0, tylko pytanie kiedy się to wykona...
    u ciebie jest tak :


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


    nic nie piszesz o podłaczeniu hardware przyciski diody czy co tam masz dalej pomagać bedzie trudno .....
    ps do umieszczenia kodów używaj znaczników syntax=c /syntax



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 mar 2017, o 22:41 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    podłączenie diod jak w zestawie ATB czyli katodą do uC, załączają się stanem niskim. kod już poprawiłem.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 mar 2017, o 22:46 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2014
    Posty: 46
    Lokalizacja: okolice JOWISZA czasami PL
    Pomógł: 7

    OK ale podpiąć możesz do dowolnego portu ATMEGI ...
    napisz proszę Ledy port B przycisk pin PC2 czy jak ?

    Najlepiej daj cały kod ...

    funkcja void może być wywoływana w innej funkcji.
    przecież funkcja main jest typu void (na AVR oczywiście).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 mar 2017, o 23:09 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, już kopiuję cały kod, chociaż nie chętnie, ponieważ nie chciał bym, aby inni mnie oskarżyli o pójście na łatwiznę :D . Nie oczekuję konkretnego rozwiązania, ponieważ w taki sposób się nie nauczę pisać 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.


    Pytałem o to , czy funkcje jedna w drugiej będą działać, ponieważ chciałem sobie uprościć to co jest w pętli głównej i zastąpić większość kodu nowymi dwiema funkcjami (od pierwszego klawisza i drugiego). Ogólnie rzecz biorąc, to chcę uzyskać efekt następujący:
    Gdy wcisnę klawisz pierwszy, to ma mi się wykonać robal trzy razy, to samo na drugim klawiszu. Jednak nie jest to takie proste dla mnie. Gdy napiszę instrukcję dla jednego klawisza, to działa pięknie, problem mam też z tym, aby w drugim klawiszu to samo się wykonywało.
    Podaję przykład jaka jest moja koncepcja na dwa klawisze, niestety po wgraniu kodu nie działa mi to poprawnie :
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Czy mogę połączyć obsługę dwóch klawiszy operatorem iloczynu && ?


    Gdy klawisze nie są wciśnięte, to PORTB ma stan 0,
    gdy wcisnę klawisz i osczekam 80ms , sprawdzę stan klawisza, to robal wykona się trzy razy. i koniec:) :D

    Dodam jeszcze,że myślałem o koncepcji drugiej :
    if.........
    else if..........
    else if.........

    ------------------------ [ Dodano po: 14 minutach ]

    taka koncepcja, ale w niej działa tylko pierwszy klawisz, drugi niestety nie uruchamia robala, tylko dlaczego?
    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.


    po kompilacji błędy n ie wyskoczyły. a mimo to nie działa.

    ------------------------ [ Dodano po: 30 minutach ]

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


    źle zdefiniowałem KLAWISZ_2. ufff:))
    znów jest satysfakcja ;) zwłaszcza,że jestem bardzo zielony z programowania :mrgreen: :mrgreen: :mrgreen: :mrgreen:


    Bardzo Ci dziękuję za zainteresowanie moim pytaniem :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 01:19 
    Offline
    Użytkownik
    Avatar użytkownika

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

    hejka, :)
    brat_kamyka napisał(a):
    OK ale podpiąć możesz do dowolnego portu ATMEGI ...
    napisz proszę Ledy port B przycisk pin PC2 czy jak ?

    Najlepiej daj cały kod ...

    @brat_kamyka
    Normalnie wróżka jesteś. :lol:
    (bez fotki i kompletnego kodu)-...
    Jakim cudem domyśliłeś się że problemem jest definicja przycisku. ?? :shock: :) :D

    @Wojtek,
    Widzę że zaczynasz ogarniać pisanie własnych funkcji. - super. :)
    Przy najbliższej okazji proponuję zainteresować się timerami :D , bo widzę że używasz jeszcze delaye. ;)
    Wbrew pozorom timery to nie straszydło - tylko tak wygląda na pierwszy rzut oka. :) a są bardzo przydatne.
    Jak wejdą w krew,
    to nawet mruganie jedną diodą chce się pisać z wykorzystaniem timera. :D

    Pozdrawiam Darek.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 07:35 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    oo cześć Darku. na timerki przyjdzie czas :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 10:35 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2014
    Posty: 46
    Lokalizacja: okolice JOWISZA czasami PL
    Pomógł: 7

    Daro69 napisał(a):
    @brat_kamyka
    Normalnie wróżka jesteś. :lol:
    (bez fotki i kompletnego kodu)-...
    Jakim cudem domyśliłeś się że problemem jest definicja przycisku. ?? :shock: :) :D


    bo błędów logicznych w funkcjach nie znalazłem ...
    to jak nie kod ???? to co ???? HARDWARE !!!

    Teraz pytanie do autora wątku po co tworzy się funkcje???
    Odp. aby poprawić czytelność kodu,
    funkcja to cześć kodu realizująca konkretne zadanie ( np. lcd_init(); itd....),
    ja przeważnie jak pisze to bardzo podobnie do Mirka,
    wpierw wszystko {co dotyczy jednego problemu} w funkcji main testuję czy działa zgodnie z założeniami,
    potem przenoszę kod do osobnej funkcji ale uwaga nazwa funkcji musi mi mówić co ona robi (np: send_spi(string mojstring);)
    i wszystko jasne nie.
    Innymi słowy :
    Programowanie to jak budowanie z klocków LEGO wpierw małe dzieci uczą składać klocki DUPLO (każdy klocek to prosta funkcja na przykład: void zapal_diode1(void);)
    potem przychodzi czas na zwykłe klocki LEGO (np viod send_spi(string mojstring); która używa klocka DUPLO viod sendchar_spi(char A);)
    Następnie dostajemy zestaw Lego Technic (np funkcja która ma za zadanie wysłanie napisów do wyświtlacza graficznego podpiętego po SPI ....)
    a LEGO mindstorm to już wszystko (np prosty system czasu pseudo rzeczywistego -- timery programowe Mirka czy inne sposoby uruchamiania klocków lego Technic).

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


    Pozdrawiam brat_kamyka.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 11:18 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    dziękuję za cenne rady

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 13:23 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2014
    Posty: 46
    Lokalizacja: okolice JOWISZA czasami PL
    Pomógł: 7

    witaj ponownie,

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

    a diodami bawisz się w kodzie bezpośrednio :( --- ciężko się to czyta,
    spróbuj użyć tej samej techniki programowania ( preprocesora )

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



    da to takie zalety w jednym miejscu definiujesz "hardware" w sposób bardzo przejrzysty (zwiększasz przenośność kodu na inne połączenia (poprawiasz tylko deklaracje #define )
    po za tym łatwiej będzie ten kod analizować
    później w kodzie używasz
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Proszę poczytaj w BB rozdział 4.4 strona 187 do 192.
    tam masz wszystko jak na tacy podane ..... ( rozbuduj o inne LEDY do robala)
    :)



    Między wierszami czytam że diody na PORTB masz zapięte tylko pytanie co jest na PORTC pinie PC0



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 mar 2017, o 16:58 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    na C był buzer, ale go zlikwidowałem, to jest kod gdzie ćwiczę język C, więc jest trochę bałaganu. Dzisiaj bawiłem się z wyświetlaczem LCD i prawie pół dnia mi to zajęło. muszę to dokładnie rozgryźć :) to strasznie wciąga tak, tak że prawie cała niedziela przeleciała hehe. teraz chcę sobie coś wyświetlać na lcd, ale muszę jeszcze o tym poczytać. Ten kod , który jest wyżej sam sobie pisałem, więc jest w miarę czytelny, najgorsze jest to,że strasznie się męczyłem z drugim klawiszem i szukałem dlaczego nie działa, kombinowałem z kodem,a okazało się ,że miałem źle zdefiniowany pin. i na tym człowiek najwięcej traci czasu. Ale są tego plusy, ponieważ po drodze można się nauczyć czegoś innego. I tak powoli do przodu :)

    _________________
    Nikt nie mówił,że będzie łatwo...



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    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