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



Teraz jest 28 paź 2024, o 18:16


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 41 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 3 sie 2012, o 14:24 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Witam! Umieszczam ten temat ponieważ rozkładam ręce i nie mogę połączyć funkcji SuperDebounce() ze sterowaniem w czasie rzeczywistym. Mój projekt wykorzystuje 4 klawisze (prawo, lewo, enter, escape). Po wciśnięciu przycisku ENTER chciałbym, żeby w określonych godzinach paliła się dioda ( docelowo będzie to karta przekaźnikowa). Menu działa i czas też jest wyświetlany. Prosiłbym o wskazówkę i naprowadzenie jak rozwiązać ten problem.

Próbowałem zmienna np. godziny>18 wkleić funkcji klawisz_enter() aby wyświetlił się odpowiedzi tekst na LCD ale bez skutku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 14:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No i bądź mądry i pisz wiersze ..........
Kodzik poprosimy, bo my nie wróżki ......

Ale jakie pytanie, taka odpowiedź ........... użyj flagi ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:03 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Dokładnie, pokaż swój kod z main.c bez umieszczania bibliotek z książki bo każdy tu je posiada w zasadzie ;)

albo chociaż jakieś istotne fragmenty tego kodu, które powodują wg ciebie problem to łatwo będzie pomóc OK ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:12 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

OK



Ostatnio edytowano 10 sty 2013, o 11:24 przez rafkins22, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Umieść kod w znacznikach c

------------------------ [ Dodano po: kilkunastu sekundach ]

Jak dobrze rozumiem to chcesz żeby po wciśnieciu klawisza enter o z góry okreslonej godzinie zapaliła ci się dioda. Czy dobrze zrozumiałem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:36 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Nie do końca. Zależy mi aby jakieś zadanie, w tym przypadku palenie się diody lub wyświetlenie jakiegoś napisu na lcd (obojętnie, zależy mi na poznaniu w jaki sposób to zrobić) było wykonywane w przedziale czasowym np. od 18:00 do 01:00



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

Ok. no to jeszcze wypadałoby trzymać gdzieś te przedziały czasowe razem z flagą np:

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


Klawiszem enter ustawiasz flagę w takiej tablicy na 1 dla danego rekordu.

np: alarmy[1].flaga=1

a później w pętli sprawdzasz czy któryś alarm ma flagę na 1 jeżeli tak to sprawdzasz czy aktualny czas mieści się w zadanym czasie "start","koniec" i odpowiednio reagujesz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 16:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

rafkins22 napisał(a):
Nie do końca. Zależy mi aby jakieś zadanie, w tym przypadku palenie się diody lub wyświetlenie jakiegoś napisu na lcd (obojętnie, zależy mi na poznaniu w jaki sposób to zrobić) było wykonywane w przedziale czasowym np. od 18:00 do 01:00


Panowie zapamiętajcie sobie że najlepszym sposobem na porównywanie czasu jest zamiana go na pojedynczą liczbę z takiej postaci 18:00 ;) albo 18:13 (już od wszech czasów w komputerach to się stosuje więc warto podglądać rozwiązania, nawet datę można trzymać w tej samej liczbie ... ale ok dla uproszczenia i zrozumienia

chcesz aby coś się załączyło pomiędzy 13:07 a 14:23 ;)

uint16_t przedzial_dolny = (13*60)+7;
uint16_t przedzial_gorny = (14*60)+23;

;)

no i potem gdzieś w kodzie - załóżmy że czas masz w zmiennych hh i mm

if( przedzial_dolny > (hh*60)+mm ) wlacz_przekaznik();

if( przedzial_gorny > (hh*60)+mm ) WYLACZ_przekaznik();

to taki super uproszczony przykład żeby zrozumieć jak można się tym posługiwać ;) łatwo się domyśleć że można tu jeszcze dodać sekundy np:

uint32_t przedzial_dolny = (hh*60*60)+(mm*60)+ss;

i potem się tylko takimi liczbami całkowitymi do porównań posługujemy ;) a nie jakaś tam zabawa po kolei co jest w hh, potem co jest w mm i co jest w ss ;)

------------------------ [ Dodano po: kilkunastu sekundach ]

oczywiście do tego jakieś flagi mogą się przydać, że coś już jest włączone albo wyłączone żeby cały czas w warunku tego czegoś nie załączać ;) lub wyłączać

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 16:49 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Spróbowałem na szybko sprawdzić czy zadziała wyświetlenie napisu "PRACA" gdy licznik=1, przycisk enter jest wciśnięty. Czekam do momentu gdy czas będzie większy niż 18:10 ale napis się nie wyświetla :(



Ostatnio edytowano 10 sty 2013, o 11:25 przez rafkins22, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 16:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2012
Posty: 55
Pomógł: 0

Bo jeszcze nie ma 18.10 :lol:

------------------------ [ Dodano po: kilkunastu sekundach ]

sorry, żarcik taki :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 17:00 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Wytłumacz mi to bo coś mi tu nie gra"
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 17:12 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Nie tu pies jest pogrzebany. Wyświetliłoby napis "praca" przed 18:10, więc nie wiem w czym tkwi problem. Próbowałem też zrobić instrukcje:

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



Ale nadal żadnego skutku. Wydaje mi się,że problem leży gdzie indziej. Tylko gdzie? :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 17:40 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Krauser napisał(a):
Wytłumacz mi to bo coś mi tu nie gra"


Masz rację - za szybko to pisałem ;) ... ale chodziło tylko o pokazanie idei - jak sobie radzić z porównywaniem czasu.

------------------------ [ Dodano po: 4 minutach ]

rafkins22 napisał(a):
Nie tu pies jest pogrzebany. Wyświetliłoby napis "praca" przed 18:10, więc nie wiem w czym tkwi problem. Próbowałem też zrobić instrukcje:

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



Ale nadal żadnego skutku. Wydaje mi się,że problem leży gdzie indziej. Tylko gdzie? :(


Czy ty nie możesz mniejszych wcięć robić ??????

ale ok - skoro ci to nie działa czyli chyba wniosek jest prosty jak drut panie kolego - zmienna licznik NIGDY nie osiąga wartości = 1 albo godziny nigdy nie są = 18, ale chociaż CLS powinien się zrobić ..... no nie wiem jak tego nie można tu zauważyć

sprawdzaj to etapami a nie naładujesz tysiąc warunków a potem patrzysz na całość i nie wiesz o co chodzi

najpierw sobie sprawdź

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


i zatrzymujesz kod programu za pomocą while(1); bo w przeciwnym wypadku PANIE kochany to inna część programu może ci nagle to nadpisać albo skasować. Tak się zakłada najprostsze pułapki programowe

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 17:56 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Źle konfigurujesz rejestry timera, a dokładniej to jest źle:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w drugiej linii koniecznie musi być |= inaczej wyzerujesz ustawiony wcześniej bit WGM21

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 18:02 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Każdy robi wcięcia jak mu wygodnie :)

Ale nie będziemy się nad tym rozwodzić.

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


Kod działa i licznik też działa. Problem jest z godziną



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 18:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

rafkins22 napisał(a):
Kod działa i licznik też działa. Problem jest z godziną


No no no ;) ale mi to nic nie mówi - co za problem - może wypadałoby napisać ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 18:27 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Krauser dzięki za znalezienie błędu :D

Na przykład jeżeli mam godzinę 17:59:45 i napiszę:

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


wyświetla mi napis praca w 2 lini, z kolei gdy napisze:


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


Napis praca się nie wyświetli

Więc według mnie problem polega na tym, że po wejściu do obsługi klawisza ENTER zegar staje w miejscu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sie 2012, o 21:10 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

rafkins22 napisał(a):
Więc według mnie problem polega na tym, że po wejściu do obsługi klawisza ENTER zegar staje w miejscu.

Ciekawa teoria. Nie znajdziesz odrobiny miejsca żeby na Lcd wyświetlić chociażby sekundy. Jakbyś umieścił cały kod po poprawkach to może ktoś dopatrzy się jeszcze jakiegoś błędu, bo co funkcja klawisz_enter może mieć wspólnego z odczytem zegara.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 14:29 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Gdy mam poniższy kod "sekundy ok" nie wyświetlą się automatycznie,tylko jeżeli sekundy są w przedziale 55-59 i nacisnę przycisk enter wtedy pojawi się napis.

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: 4 sie 2012, o 15:33 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

rafkins22 napisał(a):
Gdy mam poniższy kod "sekundy ok" nie wyświetlą się automatycznie,tylko jeżeli sekundy są w przedziale 55-59 i nacisnę przycisk enter wtedy pojawi się napis.


No tylko żebym ja wiedział jeszcze czy to jest pytanie ? czy to jest stwierdzenie to byłoby super.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 16:49 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Stwierdzenie. Pytaniem jest dlaczego tak się dzieje?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 17:31 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A dlaczego miało by być inaczej? Wyświetlanie masz przecież w funkcji obsługi klawisza Enter.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 18:42 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Wydawało mi się, że po JEDNO-krotnym wciśnięciu przycisku powinien pojawić się pusty ekran i gdy sekundy będą większe niż 55 sekund, powinien wyświetlić się napis "sekundy ok". Ale jest inaczej. Musze wcisnąć drugi raz przycisk w przedziale 55-59 aby napis był widoczny na LCD.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 18:46 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Ten fragment wykonywany jest w momencie wciśnięcia przycisku. Jeśli chcesz to ustaw tam flagę, a w pętli głównej jak ta flaga jest ustawiona to sprawdzaj warunek czasu i jak się spełni to wyświetl napis i wyzeruj flagę.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sie 2012, o 20:10 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

A jakiś przykład mógłbyś pokazać :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:07 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Czyżby coś było niejasne. Tam gdzie teraz sprawdzasz ten warunek z sekundami to ustaw flagę, a w pętli głównej gdzie odczytujesz RTC dodaj sprawdzanie tej flagi i warunku z sekundami i wyzeruj flagę.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 08:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

Krauser napisał(a):
Czyżby coś było niejasne. Tam gdzie teraz sprawdzasz ten warunek z sekundami to ustaw flagę, a w pętli głównej gdzie odczytujesz RTC dodaj sprawdzanie tej flagi i warunku z sekundami i wyzeruj flagę.


Krauser - SUPER UZNANIE dla Ciebie (poważnie), że orientujesz się jeszcze w tych pytaniach, ja już dawno się pogubiłem.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 10:17 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Nie bardzo rozumiem jak te flagi działają. Czy mógłby mi ktoś to wytłumaczyć. W którym miejscu w książce można na ten temat przeczytać bo nie mogę za bardzo znaleźć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 10:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27306
Lokalizacja: Szczecin
Pomógł: 1041

rafkins22 napisał(a):
Nie bardzo rozumiem jak te flagi działają. Czy mógłby mi ktoś to wytłumaczyć. W którym miejscu w książce można na ten temat przeczytać bo nie mogę za bardzo znaleźć.


To co radzi Ci i słusznie kolega Krauser, z tymi flagami - nie ma nic wspólnego z działaniem samej funkcji SuperDebounce. Chodzi po prostu o wprowadzanie pewnego rodzaju tzw "maszyny stanów" do swoich programów, która ma zapamiętać właśnie pewne stany związane z akcjami w twoim programie...

Ja pewnie bym mógł coś pomóc, no ale nie przy tak zdawkowo zadawanych pytaniach bo jak pisałem wyżej wymiękam ;) Ale może kolega Krauser jeszcze sobie poradzi z tym dalej ? zobaczymy.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sie 2012, o 10:51 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 104
Pomógł: 0

Napis został wyświetlon[syntax=c]


Tylko napis nie gaśnie po przekroczeniu 50 sekund :(



Ostatnio edytowano 10 sty 2013, o 11:26 przez rafkins22, łącznie edytowano 1 raz

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