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 6 cze 2025, o 20:19


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 32 ]  Przejdź na stronę 1, 2  Następna strona
    Autor Wiadomość
    PostNapisane: 6 wrz 2017, o 20:29 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Proszę o pomoc dotarłem wreszcie do multipleksowania i chciałem przećwiczyć wykorzystanie licznika na razie program ma zliczać do 1-10 w pętli później następne dwa wyświetlacze a docelowo chcę napisać program obsługi zegara i jak zwykle problem :mrgreen: wyszedł mi licznik PREDATORA :o .
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 wrz 2017, o 07:01 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Witam,
    Ten kawałek kodu nie odpowiada za
    efekt PREDATORA.
    Pomyszkuj w ustawieniach stanów wysokich i niskich bo są zamienione,
    W kodzie możesz ratować się tyldą. ~ .
    Pozdrawiam.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 01:01 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Licznik działa poprawnie ALE ! Liczy do 99 ma być od 0 do 10, gdy odliczy 99 wyświetlacz 3 bawi się w Predatora wyświetlacz 4 liczy poprawnie do 0-9 , do końca nie rozumiem wyrażeń :
    z4 = (licznik - (z3*10) );
    z4 = (licznik - ( z1*1000)-(z2*100)-(z3*10));
    cyfra[3]= z4;
    Foldery do obsługi wyświetlacza;
    multipleks.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.

    multipleks.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.

    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.

    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 02:16 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Daro68 napisał(a):
    #include<avr/io.h> <--- to
    #include <avr/interrupt.h>
    #include<util/delay.h> <--- i to


    A to się w ogóle kompiluje? Bo wg mnie kompilator powinien puścić pawia.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 10:48 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Witam,
    Z4=......
    Tu jest wyliczana wartość cyfry.
    Np. Jeżeli licznik( ten z malin.c),
    ma wartość 68 :) to jak znaleźć znak pierwszej cyfry ?
    Trzeba licznik podzielić na 10. :)
    Wynikiem będzie 6.
    A wartość jednostek ?
    Od licznika trzeba odjąć wartość dziesiątek. tak jak w matmie. :)
    I teraz zerknij na licznik++ w maine.c ??
    Jeżeli licznik przekroczy wartość dwucyfrową to wyniki będą poza oczekiwanymi od 0 do 9.
    Jak zrozumieć założenia ??:
    W maine.c
    if ( ! licznik ) licznik=0; // jeżeli licznik ma wartość 0, to wpiszemy mu 0. ;)
    Pozdrawiam.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 11:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 09 gru 2014
    Posty: 1540
    Pomógł: 269

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

    (!licznik) oznacza tyle co (0==licznik)
    W tym momencie sprawdzasz warunek logiczny, że jeśli licznik jest równy zero to wyzeruj licznik! ;)
    Trochę to nie ten teges, prawda?

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

    Teraz gdy licznik jest większy od 10 do licznik ma przyjąć wartość początkową czyli 1.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 14:07 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

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


    A jak to działa, jeżeli np z4 przyjmie wartość powyżej 10?
    Czy deklaracja licznika raz jako uint16, a w przerwaniu jako uint8 nie powoduje jakiś błędów?

    Sorry że pytam, ale dla mnie C to jeszcze czarna magia.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 16:22 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Harry napisał(a):
    A jak to działa, jeżeli np z4 przyjmie wartość powyżej 10?

    Ano o to własnie chodzi żeby licznik (ten z main.c) nie przekroczył liczby dwucyfrowej,
    wtedy z4 nie przekroczy 9 (dziewiąty element w tablicy przechowujący znak cyfry 9) :)
    Harry napisał(a):
    Czy deklaracja licznika raz jako uint16, a w przerwaniu jako uint8 nie powoduje jakiś błędów?

    nie powoduje.
    efekt jest taki że licznik z pętli main jest niewidoczny w przerwaniu a licznik z przerwania jest nie widoczny w pętli main. :)

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

    gdyby się okazało że powołaliśmy zmienną przed "mainem", jako globalną uint16_t licznik = 1; ,
    to zmienna w pętli przerwania jakby przykryje ważność nazwy tej zmiennej nową nazwą nowej zmiennej wewnętrznej, która ma identyczną nazwę.
    :D takie masło maślane mi wyszlo, ale mam nadzieję że wiadomo o co chodzi.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 17:00 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Dzięki, zamotałem się z tym dzieleniem przez 10 ;)
    Jest jakieś uzasadnienie żeby nie używać innej nazwy zmiennej, chodzi o zajętość pamięci, bo jakoś nie lubię sobie utrudniać życia stosując maślankę ;)

    Wysłane ze srajfona.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 18:46 
    Offline
    Użytkownik
    Avatar użytkownika

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

    @Harry,
    jeżeli używamy takiej samej , to utrudniamy sobie. :) nic poza tym. ;)
    i tak komórki musza być na tę zmienną zarezerwowane bez względu na to jaką ma nazwę.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 wrz 2017, o 18:57 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Już nie mówiąc że takim zabiegiem nawet się traci bajt, im mniejszy chaos tym lepiej, ale może niektórzy lubią :)

    Wysłane ze srajfona.

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2017, o 15:37 
    Offline
    Użytkownik
    Avatar użytkownika

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

    W tym przykładzie akurat tak bardzo nie przeszkadza. ;)
    Zmienna powołana jest kilka linijek wcześniej , poza tym w przerwaniu w innym pliku. ;)


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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 wrz 2017, o 23:08 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Program zadziałał poprawnie zlicza od 1-10 dzięki za pomoc , jeszcze czy dobrze rozumiem np. liczba :2317
    z1 (2x1000)=2000
    z2 (3x100 )= 300
    z3 (1x10 )= 10
    z4 (7x1 )= 7
    –--------------------------
    2317
    Proszę jeszcze o sprawdzenie poprawności zapisu , program zlicza od 1-60 podczas zliczania od 1-9 ma być zapalone „0” przed 1...9 program działa poprawnie jak można zapisać to inaczej i czy w ogóle jest to prawidłowy zapis
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    a teraz mój końcowy cel stworzenie prostego zegara rozpisałem sobie to w ten sposób
    3600/3600=1sek
    3600/60=60sek=1min
    3600/1=3600sek=1godz
    3600x24=doba
    czy takie założenie jest prawidłowe

    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 17 wrz 2017, o 02:50 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Witam,
    Daro68 napisał(a):
    Program zadziałał poprawnie zlicza od 1-10 dzięki za pomoc , jeszcze czy dobrze rozumiem np. liczba :2317
    z1 (2x1000)=2000
    z2 (3x100 )= 300
    z3 (1x10 )= 10
    z4 (7x1 )= 7
    –--------------------------
    2317

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

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

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

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

    nie wiem czy o to chodziło. ?
    Daro68 napisał(a):
    a teraz mój końcowy cel stworzenie prostego zegara rozpisałem sobie to w ten sposób
    3600/3600=1sek
    3600/60=60sek=1min
    3600/1=3600sek=1godz
    3600x24=doba
    czy takie założenie jest prawidłowe

    Tu już się pogubiłem w założeniach. :?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 wrz 2017, o 23:22 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    To może jeszcze raz
    liczba = 3600;
    godz = liczba / 1; //tyle sekund w godzinie
    min=liczba / 60; // w min
    sek= liczba / 3600; //1 sek
    to teraz powyższy przykład 2317 to jest 23:17 jak rozbić na minuty i godziny
    godziny
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    myślałem w ten sposób to podzielić czyli:
    z1= godz1
    z2=godz2
    z3=min1
    z4=min2
    a kropka to będzie sekundnik , wiem że do budowy zegara są inne układy ale chciałbym lepiej zrozumieć i przećwiczyć to sobie.
    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 wrz 2017, o 06:54 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Ok. to jest jasne. :)
    Chodzi mi o tworzenie wartości sekund total.
    Jeżeli inkrementacja, to trzeba pamiętać o tym że :
    59 + 1 = 100.
    159 + 1 = 200.
    ...
    :D

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 wrz 2017, o 16:03 
    Offline
    Użytkownik
    Avatar użytkownika

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

    zerknij, podałeś dwa założenia.
    jedno to liczba jako ilość minut. np......... liczba_1 = 250 . czyli 4h,10min. (250min)
    drugie założenie liczba jako cyfry czasu.....liczba_2 = 410 . czyli 4h,10min. (4.10)
    wg założeń czas się zgadza ale liczby są różne.
    stąd moje dociekania o Twoje zamysły. :)



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

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Daro69 napisał(a):
    zerknij, podałeś dwa założenia.
    jedno to liczba jako ilość minut. np......... liczba_1 = 250 . czyli 4h,10min. (250min)
    drugie założenie liczba jako cyfry czasu.....liczba_2 = 410 . czyli 4h,10min. (4.10)

    Bardzo ciekawe zagadnienie i słuszna uwaga nigdy nie patrzyłem na to w ten sposób ja chcą sobie stworzyć prosty zegar żeby posunąć się w nauce jeden krok dalej .
    Stworzyłem prosty kod odliczający sekundy biorąc pod uwagę podpowiedzi kod działa sekundy wyświetlają się poprawnie od 0-59 ale docelowo tę funkcję ma przejąć kropka , teraz muszę uruchomić minuty i godziny
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 wrz 2017, o 11:20 
    Offline
    Użytkownik
    Avatar użytkownika

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

    No dobrze. :)
    To teraz kroczek dalej.
    Widzę że nie stosujesz przerwania, ale to nic. Potem to ogarniesz. :)
    Rizbij sobie kod na dwa podprogramy.
    W jednym wyliczaj wartości min i godzin,
    a w drugim wyświetlaj je na wyswietlaczu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    a oddzielnie: np.

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

    możliwe że brakuje gdzieś orientacyjnych klamer, ale piszę z tapataka i niewiele widzę. poza tym nie wiem gdzie tu jest syntax c.
    wieczorem poprawię .
    Ale zasadę pewnie odczytasz. :)

    Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka
    ........ok poprawiłem......... :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2017, o 23:06 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Ja zrobiłem coś takiego ale oczywiście nie działa , teraz zabiorę się za twój poprawiony 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.

    proszę o pokazanie gdzie popełniłem błędy :( po wgraniu wyświetlają się same zera
    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 wrz 2017, o 07:15 
    Offline
    Użytkownik
    Avatar użytkownika

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

    W przerwaniu co sekundę.
    Jeżeli sekundy<59 to:
    sek++;
    else:
    {
    Sek=O;
    Min++; // <•••••tego brakuje
    }
    Potem:
    Jeżeli min > 59 to
    {
    min=O;
    godziny++;
    }

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 wrz 2017, o 07:42 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Ogólnie: sekundy się kręcą ale nie napędzają minut a minuty godzin które wyświetlacz ;)

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 wrz 2017, o 23:51 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Licznik ożył to już coś ale na początku wyświetla 16-5 nie wiem dlaczego potem minuty odliczają czas jak sekundy jednocześnie godziny zachowują się w ten sam sposób czyli odliczają czas od 1-23 w sekundowych odstępach
    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.

    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 1 paź 2017, o 09:10 
    Offline
    Użytkownik
    Avatar użytkownika

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

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

    albo:
    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  
    PostNapisane: 3 paź 2017, o 23:09 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Po wielu próbach dalej stoję w miejscu , ostatnie wypociny też nie przyniosły zamierzonego celu :(

    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.

    Poz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 4 paź 2017, o 08:06 
    Offline
    Użytkownik
    Avatar użytkownika

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

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

    :)

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 paź 2017, o 23:31 
    Offline
    Użytkownik

    Dołączył(a): 08 cze 2016
    Posty: 204
    Lokalizacja: Katowice
    Pomógł: 0

    Troch mnie na parę dni odstawiło na boczny tor (kłopoty zdrowotne) ale chciałbym skończyć temat zegara Daro69 podsunął coś takiego
    Daro69 napisał(a):
    if(sek < 59) sek++; else { sek=0; min++;}
    if(min > 59) { min= 0; godziny++;}
    if(godziny>23) godziny=0;i

    jakoś nie chce to zadziałać myślę że rozbija się to o odliczanie sekund tylko nie umie tego rozwiązać ja zrobiłem coś takiego
    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.

    Poz



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 paź 2017, o 06:55 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Witam, :)
    Odniosę się do skrawka pod gwiazdkami. ;)
    Pierwszy if else. OK

    Drugi if else także będzie wykonywany co 500ms. ! ( zakładam że 500 zamiast 1000 ma przyspieszyć testy )
    Dlaczego w else są zerowane sekundy ?

    Trzeci if, też będzie sprawdzany co 500ms. (a nie co oczekiwaną od kodu godzinę)
    Zobacz co ten if robi co 500ms. :
    Jeżeli godzina mniejsza od 23 to za każdym razem ( godzina = 0; zwiększ godzinę o jeden. Czyli robi z godziny ciągle 1 ).
    Pozdrawiam. :)


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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 paź 2017, o 15:21 
    Offline
    Użytkownik

    Dołączył(a): 22 kwi 2017
    Posty: 99
    Lokalizacja: Piła
    Pomógł: 4

    Jeśli mógłbym się przyłączyć do dyskusji to chciałbym coś wtrącić.
    W drugim if masz if(min<59)min++; czyli zawsze jak minuty są mniejsze od 59 (czyli co każdy obieg pętli)zwiększy Ci liczbę minut o 1, a powinno być ja obieg pętli doliczy sekundy do 59 to zwiększy liczbę minut o 1; a więc if (sek=0) min++, i analogicznie w następnym if-ie. Nie sprawdzałem w Eclipsie ale chyba tak powinno być.
    Ja zrobiłem sobie zegar trochę inaczej. powołałem zmienną uint16_t licznik= 11*60 i zamieniłem tą zmienną na sekundy dzieląc przez odpowiednią liczbę.
    O coś w tym stylu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    oczywiście on odlicza mi sekundy i minuty ale analogicznie można zrobić z godzinami.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 paź 2017, o 17:38 
    Offline
    Użytkownik
    Avatar użytkownika

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

    Witam, :)
    pozwoliłem sobie dopisać w komentarzach co się dzieje w Twoim kodzie.
    Daro68 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.


    albo podmień testowo na taki wzorowany na Twoim , np.

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

    Zwróć uwagę że pierwsze else obejmuje kod aż do _delay'a , drugie też, i trzecie też. :)
    a if'y kolejne są wewnątrz poprzednich else. (czyli ostatni if jest wewnątrz poprzednich dwóch else)
    czyli jeżeli właśnie są wartości:
    sek = 59, min = 59 oraz godz = 23, to program przeleci przez wszystkie else w jednym obiegu pętli,
    zerując sek,min,godz. :)
    ale wystarczy że sekundy będą mialy wartość np. 58 , to cała reszta się nie wykona, tylko zostanie zwiększona zmienna sek o 1. na 59.
    pozdrawiam i życzę owocnej rozkminki. :)



    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: 32 ]  Przejdź na stronę 1, 2  Następna strona

    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