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



Teraz jest 8 lis 2024, o 20:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 14 sty 2015, o 16:12 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Bardzo proszę o pomoc w sprawie czasowego włączania / wyłączania danych urządzeń. Orłem w programowaniu nie jestem i w dodatku świeżakiem więc z góry proszę o wyrozumiałość. Więc póki co rozwiązałem to w tenże sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i dalej gdzieś sobie w programie piszę 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.

Jednak takie rozwiązanie ma wieeelki minus czyli urządzenie musi być non stop włączone żeby natrafić akurat na tą godzinę i minutę. Przy warunku 'większy równy' powstaje problem z przejściem przez godzinę 00:00 itp. itd.

Czy ktoś z Was ma na to jakiś ciekawy patent lub zechce mi pomóc w stworzeniu czegoś bardziej eleganckiego ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 16:34 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Nie bardzo rozumiem co masz na mysli pisząc
Cytuj:
Jednak takie rozwiązanie ma wieeelki minus czyli urządzenie musi być non stop włączone żeby natrafić akurat na tą godzinę i minutę.

Chodzi pewnie o sterownik urządzenia?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 16:42 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Tak dokładnie,

Załóżmy, że jest godzina włączenia urządzenia. Urządzenie się włącza, a następnie sterownik ma małą przerwę w zasilaniu. Po włączeniu sterownika na pin przykładowo PB2 nie zostanie wystawiony stan wysoki (nie załączy przekaźnika), musiał by czekać do następnej doby przykładowo czas włączenia 7:30 warunek włączenia godzina==7 && minuta==30.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 17:47 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

No ale przecież czas pobierasz z RTC, który zapewne masz podtrzymywany bateryjnie. Po włączeniu sterownika pobiera on aktualny czas i sprawdza czy urządzenie ma być włączone czy wyłączone. Nie widzę tu jakiegoś problemu.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 17:54 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego jedyne rozwiązanie przynajmniej mi sie tak wydaje i działa w moim sterowniku od lat to zastosowanie przedziałów czasowych jesli znasz trochę bascom to ci pokazuje mój kod z wyjasnieniami natomiast jeśli nie znasz bascoma to po komentarzach w kodzie powinieneś zrozumieć i napiszesz sam kod w C
Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Przewodnik|Sterownik akwariowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 18:17 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

janusz17 napisał(a):
czas i sprawdza czy urządzenie ma być włączone czy wyłączone.
No właśnie i tu jest problem, że jak zmienne godzina_włączenia i minuta_włączenia przyrównasz do buforów z rtc to sprawdzi się to tylko w przypadku włączonego urządzenia. Jak dasz większe równe to owszem włączy się ale problem wystąpi gdy jest np. 21 urządzenie włączone o 20, ale wyłączone ma być np. o 5 a wyłączy się już o 00:00. Kolego matekogon dzięki.. przejrzę, coś postaram się naskrobać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 18:47 
Offline
Użytkownik

Dołączył(a): 04 cze 2013
Posty: 517
Pomógł: 26

Kolego jacky w moim rozwiązaniu jest uwzględniony problem przejścia przez godzinę 00:00 właśnie jest to przypadek kiedy godzina włączenie jest większa od wyłączenia Jeśli będziesz miał problem z analizą pisz to ci wytłumaczę


Autor postu otrzymał pochwałę

_________________
Przewodnik|Sterownik akwariowy



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

Dołączył(a): 22 cze 2013
Posty: 988
Lokalizacja: Byram, MS 39272
Pomógł: 55

A próbowałeś zamieniać czas na liczbę 16bit postaci h*60+m gdzie h-godzina, m-minuta? Wtedy łatwiej napisać warunek sprawdzający czy dana godzina już nastapiła. Dodatkowo możesz gdzieś przechowywać datę żeby wiedzieć czy nastąpiła zmiana czasu i zliczanie od zera

W każdym razie ważnym jest żeby zmienną h mnożyć przez co najmniej 60 aby liczba dla danego, konkretnego czasu była unikatowa.


Autor postu otrzymał pochwałę

_________________
Pomysły na podpis - wyślij SMSa +1 769 243 0011



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 20:32 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Przysiądę nad tym i coś spróbuję stworzyć....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2015, o 21:02 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

A dlaczego ma się wyłączyć o 0:00? Warunek włączenia powinien być taki:
jeśli godzina większa od 21 lub mniejsza od 5 włącz urządzenie.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2015, o 09:27 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

No nie, z tą gigantyczną ilością warunków to Kolega mokrowski raczej mocno przesadził. Według mnie wystarczy zaledwie kilka. Po pierwsze trzeba zdecydować czy dopuszczamy ustawienie tego samego czasu włączenia i wyłączenia urządzenia. Jeśli nie to pierwszy warunek odpada. Jeśli tak to trzeba zdecydować czy urządzenie ma być wtedy całą dobę wyłączone czy załączone. Potem należy sprawdzić czy czas załączenia jest mniejszy od czasu wyłączenia - wtedy mamy ustawianie przedziałów czasowych bez przejścia przez północ. Jeśli czas załączenia jest większy od czasu wyłączenia to mamy sytuację gdy przedział czasowy obejmuje przejście przez północ. I to wszystko. Dla większej jasności przykładowy kod.
Przyjmuje następujące oznaczenia:
t_on - czas załączenia
t_off - czas wyłączenia
t_rtc - bieżący czas z zegara RTC
ON - urządzenie włączone (czyli gdzieś tam będzie zdefiniowane makro na wysterowanie odpowiedniego pinu portu mikrokontrolera)
OFF - urządzenie wyłączone (podobnie jak wyżej tylko wyłączenie)
Oczywiście to kod uproszczony bo naprawdę trzeba porównywać godziny i minuty albo zrobić jakąś zmienną, która będzie zawierała jedno i drugie. Ale tu chodzi mi o pokazanie samego porównania.

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


Druga metoda była by taka, żeby programowo zabronić ustawiania czasu wyłączenia < od czas włączenia i wtedy jest tylko jeden warunek do sprawdzenia. A ustawienie przedziału czasowego włączenia urządzenia przechodzącego przez północ musiało by być rozbite na dwa przedziały - na przykład dla czasu od 23:00 do 5:00 :
23:00 - ON
23:59 - OFF
0:00 - ON
5:00 - OFF

I to wszystko z tej gigantycznej ilości if-ów.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2015, o 15:19 
Offline
Użytkownik

Dołączył(a): 27 maja 2014
Posty: 75
Pomógł: 0

Pomysł janusza pozamiatał... :D trochę drobnej kosmetyki i wszystko działa tak jak chciałem !

Więc na przyszłość jakby ktoś potrzebował:

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

gdzie rtc_time_buffer[0] to godzina, a rtc_time_buffer[1] minuta z PCFa.
i dalej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dzięki raz jeszcze kolego !



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 sty 2015, o 16:13 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

Cieszę się , że mogłem pomóc, a jeszcze bardziej z tego, że zaczynam coraz lepiej rozumieć to programowanie :-) oczywiscie dzięki Mirkowi i tym wszystkim którzy tutaj pomagają rozwikłać różne problemy. Więc ja również dziękuję bo sporo się tutaj nauczyłem.



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