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



Teraz jest 28 mar 2024, o 16:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 15 wrz 2018, o 11:28 
Offline
Użytkownik

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

Witam szanownych kolegów.
Od jakiegoś czasu "męczę" się z pewnym projektem. Obecnie na obiekcie jest układ załączający i wyłączający światło na parkingu. Układ ten reaguje na czujkę zmierzchową i po godzinie 21 ręcznie wyłączamy dwa obwody światła. Ale wiadomo, że raz przypomni się o 21 a raz o godzinie 24 i wtedy wyłącza się światło. Zbudowałem układzik oparty na atmedze 8 i DS1307, który podaje mi czas nawet po wyłączeniu prądu i podaje mi stan niski na PD7(LED_IN) atmegi. Właściwie to wszystko działa ale chciałbym zapytać szanownych kolegów czy można inaczej a przede wszystkim prościej sformułować warunki podawania tego stanu niskiego (wyłączenia światła). Ja powołałem sobie takie zmienne "hours_al = 21" i "minutes_al = 20 " godzina i minuta wyłączenia i "zalacz_hours = 11", która daje mi możliwość załączenia światła czyli podaje stan wysoki na LED_IN i po zadziałaniu zmierzchówki włączy światło na parkingu oraz hours, minutes.
Fragment kodu odpowiedzialny za wyłączanie:

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


I teraz zadam powyższe pytanie czy można prościej inaczej a może powinienem iść całkowicie inną drogą?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 wrz 2018, o 13:29 
Offline
Użytkownik

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

zubik napisał(a):
No ale co chcesz uprościć? Możesz rozpisać to na kolejne if-y ale czy ja wiem czy to coś zmieni, jeśli ten warunek jest dla ciebie czytelny to w porządku

Warunki są czytelne i do mojego projektu pasują bo stan niski na PD7 ma mi się pojawić po godzinie 21 i załączyć możliwość załączenia światła w ciągu dnia (przed zmrokiem) i tak jest. Jednakże nie są to warunki uniwersalne bo jak hours_al ustawię na 00 to już mi to nie działa. Myślałem, że ktoś miałby pomysł nie na if-ach i mnie naprowadził.



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

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

Daj warunek w programie, który sprawdza i zamienia 00 na 24, który widoczny będzie tylko dla programu. To chyba najprostsze rozwiązanie.


Autor postu otrzymał pochwałę

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 wrz 2018, o 14:40 
Offline
Użytkownik

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

A nie lepiej ustawić flagę ze światło jest włączone, a potem tylko sprawdzać ją? W ten sposób tylko raz wejdziesz do bloku wykonawczego.

Wysłane ze srajfona

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 wrz 2018, o 19:40 
Offline
Użytkownik

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

Po pierwsze to muszę napisać, że nie jestem biegły w te klocki i każdy problem muszę dużo wałkować aby zrozumieć i rozwiązać.
wachcio napisał(a):
Warunki sprawdzasz co minutę czy sekundę lub częściej?
Warunki przedstawione powyżej mam w pętli głównej i można by powiedzieć sprawdzam ciągle. Dokładność i szybkość działania nie jest mi potrzebna bardziej pewność działania.
Harry napisał(a):
A nie lepiej ustawić flagę ze światło jest włączone, a potem tylko sprawdzać ją? W ten sposób tylko raz wejdziesz do bloku wykonawczego.
Jeśli to jest klucz do stworzenia lepszego uniwersalnego warunku a także nauczenia się czegoś nowego to muszę to zgłębić tylko od czego zacząć?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2018, o 03:35 
Offline
Użytkownik

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

Miałem na myśli coś w tym stylu, ale musisz oczywiście sprawdzić
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

mam nadzieję że zrozumiesz coś z tego

sorry za formatowanie, ale o 3:30 poprostu mi się nie chce :P

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2018, o 08:29 
Offline
Użytkownik
Avatar użytkownika

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

Witam,
Strasznie dużo tego && || :/
Myślę że znacznie uprości logikę,
wkiteanie minut i godzin w jedną zmienną.
Cztery starsze bity to godziny a młodsze to minuty. (Przesunięcie bitowe).
Łatwiej jest tak sklejony czas porównywać.
Oczywiście sklejanie bieżącego czasu i porównywanie co minutę, a sklejanie ustawionego w momencie ustawiania.
Taka myśl.
Możliwe że coś nie doczytałem. :?
Pozdrawiam.

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


Autor postu otrzymał pochwałę


Ostatnio edytowano 18 wrz 2018, o 10:47 przez Daro69, łącznie edytowano 1 raz

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

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

A może od razu z "detekcją" przejścia przez północ

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


Autor postu otrzymał pochwałę

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



Ostatnio edytowano 7 paź 2018, o 09:39 przez Harry, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 wrz 2018, o 11:27 
Offline
Użytkownik

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

Daro69 Harry to może być to :) muszę to jeszcze prześledzić jak będę miał chwilę wolną. Dam znać co z tego wyszło. Dzięki chłopaki. No i przede wszystkim muszę to zrozumieć, na razie założenia rozumiem, jeszcze raz dziękuję.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2018, o 09:38 
Offline
Użytkownik

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

Chciałem odpowiedzieć co wyszło z moich wypocin i kolegów podpowiedzi. Przede wszystkim chciałem Wam podziękować za podpowiedzi. Trzy razy zamieniłem dwie zmienne w jedną i dużo to uprościło kod. Nie działa mi to jeszcze gdy czas wyłączenia światła mam ustawiony po północy ale w tym projekcie nie jest mi to potrzebne i na razie to zostawię wstawię kandę i w przyszłości może wgram coś lepszego.
Tak wygląda moja funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jest chyba prościej prawda?
Harry poznajesz ten kodzik?
Jeszcze raz dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2018, o 09:45 
Offline
Użytkownik

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

Nie musisz kopiować całości, ale chociaż zastosuj flagi, bo teraz z każdym obiegiem pętli wysyłasz tekst na wyświetlacz. Obawiam się że przy takiej eksploatacji padnie po max kilku miesiącach.

Wysłane ze srajfona

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2018, o 09:58 
Offline
Użytkownik

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

Funkcja jest wywoływania w przerwaniu i jest wywoływania co 1 sek, nie wiem czy to jest dobrze? Wyświetlacz będzie w urządzeniu tylko kontrolne powinno to działać. Dioda i wyjście na moduł przekaźnika jest na stałe. Ale może jeszcze coś poćwicze z flagą.
Dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 paź 2018, o 10:49 
Offline
Użytkownik

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

Jeżeli odświeżasz wyświetlacz tylko co sekundę, to i tak daje Ci to 86400 razy na dobę, ogólnie żywotność wyświetlaczy to jakieś 50-100 tysięcy godzin, pytanie tylko czy ilość odświeżeń nie skróci ich żywotności.
Generalnie w przerwaniu nie powinno być obsługi wyświetlaczy, ani innych zasobożernych operacji.
Obliczenia czasów włączenia/wyłączenia wyrzuć sobie z pętli, bo to niema żadnego sensu - przecież nie przestawiasz zegara co sekundę, a tam zostaw tylko czas aktualny.

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



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 2 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