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 5 cze 2025, o 03:13


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
    Autor Wiadomość
    PostNapisane: 11 gru 2021, o 17:56 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Witam serdecznie. Jestem początkujący i wiem że pytanie jest pewnie banalne jednak proszę o pomoc. Napisałem w celach treningowo-edukacyjnych krotki kod ktory w pętli ma zaswiecac kolejno diodyod 1 do 8 podłączone do portu C Atmegi32. Wszystko działa chociaż pewnie dałoby się to lepiej zrobić. Chciałbym jednak żeby po zapaleniu ostatniej diody, diody zmieniły kierunek,to znaczy żeby "płynęły" od lewej do prawej i znów od prawej do lewej i tak w nieskonczonosc. Proszę o zerknąć na kod i podpowiedzieć mi jak to zrobić. Będę bardzo wdzięczny za pomoc i sugestie

    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.


    chodzi mi żeby przesuniecie bitów na porcie C zadziałało w drugą stronę po zaleniu ostaniej 8 diody



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 gru 2021, o 20:04 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Dodajesz zmienną kierunek. Jeśli kierunek ==0 to przesuwasz w lewo, jeśli 1 to w prawo.
    I dodajesz dwa warunki zamiast tego, który masz. Jeżeli przesuniecie = 128, to kierunek = 1, jeśli przesuniecie = 0, to kierunek = 0 (albo warunki odwrotnie).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 10:02 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Bardzo dziękuję za podpowiedź, jednak nie za bardzo rozumiem jak ma to działać. Mógłbyś wkleić kawałek kodu jak powinno to wyglądać ? Z góry dziękuję

    ------------------------ [ Dodano po: 32 minutach ]

    Zmieniłem warunek i teraz diody płyną od lewej do prawej po czym ostatnia dioda zapala się i tak zostaje. Kolejne diody nie zapalają się
    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.


    Niestety nie wiem jak uzyć zmiennej kierunek w tym przypadku



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 13:29 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Prawie dobrze :)
    Tylko teraz tak: w każdym kroku przesuwasz w lewo (linijka 22). A jak przesuniecie będzie >128 dodatkowo w prawo :P
    Linijki od 22 do 24 zamień na:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    i w dowolnym miejscu w pętli while:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    Piszę z głowy, więc może trzeba będzie lekko zmienić ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 14:30 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Bardzo dziękuję....niby proste a jednak wymaga doświadczenia....kod wygląda teraz tak...lecz jeszcze są jeszcze 2 małe problemy

    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.


    a mianowicie....
    po załączeniu diody "płyną" od lewej do prawej lecz zaczynając od drugiej diody (pierwsza się nie zapala), a drugi problem że diody "płyną w lewo później w prawo i gasną a ja bym chciał żeby ta pętla pracowała w nieskonczoność ? Bardzo dziękuję koledze za poświęconą uwagę i czas (to w dzisiejszych czasach trudne do przecenienia)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 14:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Pierwszy problem rozwiążesz, jeśli najpierw wyślesz wartość na port, a później przesuniesz (czyli linijkę 30 przesuń przed 23).
    A drugi... spróbuj w linijce 28 zmienić 0 na 1.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 18:06 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Teraz wszystko działa jak chciałem. Jeszcze raz bardzo dziękuję. Teraz spróbuję dodać obsługę przycisków. Wkleję później kod z moimi wypocinami



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2021, o 19:21 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Rób po kolei jak w blue booku. Na pewno ogarniesz :)
    A co do pomagania... po to jest forum. Kiedyś ja potrzebowałem pomocy w podstawach, teraz sam mogę pomóc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 gru 2021, o 16:47 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Teraz postanowiłem wzbogacić mój program o obsługę 3 przycisków...Przycisk 1 ma ustawiać czas na 100ms drugi na 250 a trzeci na 500. Kod wygląda 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.


    Niestety mam 3 błędy kompilacji:

    main.c:(.text.startup.main+0x14): undefined reference to `klawisz_wcisniety'
    main.c:(.text.startup.main+0x30): undefined reference to `klawisz_wcisniety'
    main.c:(.text.startup.main+0x4c): undefined reference to `klawisz_wcisniety'

    Co robię źle i jak ewentualnie to naprawić ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 gru 2021, o 18:00 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Masz funkcję klawisz_wcisniety wewnątrz funkcji main.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2021, o 15:02 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Faktycznie pomogło. Wielkie dzięki. Teraz program działa jednak nie tak jak chciałem. To znaczy diody płyną co 100 ms jak nacisnę i trzymam przycisk 2 to zwalniają, jak naciśnę przycisk i trzymam to zwalniają jeszcze bardziej. Chciałem jednak osiągnąć efekt trwały, żebym nacisnieciem przycisku zmieniał czas i nie musiał go trzymać. Ale to chyba wyższa szkoła jazdy i nie zrealizuję tego w ten sposób. Jak można to najłatwiej rozwiązać ?
    Oto obecny kod:

    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: 14 gru 2021, o 18:44 
    Offline
    Nowy

    Dołączył(a): 22 lis 2021
    Posty: 7
    Lokalizacja: Szwajcaria
    Pomógł: 0

    Myślałem żeby to zrobić za pomocą pętli do...while ale nie wiem czy to dobry pomysł



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2021, o 18:52 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1171
    Lokalizacja: Kraków
    Pomógł: 93

    Napisz sobie swoją funkcję delay (Mirek gdzieś taką pokazał).
    W funkcji wywołujesz _delay_ms(1) w pętli, a ilość obiegów pętli (czyli czas opóźnienia) podajesz jako argument tej funkcji.

    Bo Twój program działa tak, jak jest napisany :P
    Jeżeli nie naciskasz przycisku, to wywołujesz CZAS1.

    Spróbuj sam, jak nie dasz rady, ktoś pomoże :)



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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