Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 20:36


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