Tijd vergelijken

Arduino specifieke Software
Gebruikers-avatar
Berichten: 4
Geregistreerd: 06 Dec 2018, 18:02
Woonplaats: Nuenen

Tijd vergelijken

Berichtdoor a.appel » 06 Dec 2018, 18:11

Hi guys,
Vandaag pas dit forum ontdekt en nu al erg vrolijk van alle items die te vinden zijn. Echter, nog niet alles gevonden...

Mijn vraag gaat om het volgende: ik ben mijn gordijnen aan het automatiseren. Ik wil dat ze ofwel op een bepaalde tijd, ofwel afhankelijk van de lichtsterkte 's ochtends open, 's avonds dicht en overdag, bij felle zon, half dicht gaan. Het openen gebeurt in een (variabel in te stellen) tijd window, net als het sluiten en deze tijd windows kunnen door de weeks verschillen van de tijd windows in het weekend.

Een en ander betekent dus dat tijden met elkaar vergeleken moeten worden; er moet gekeken worden of de huidige tijd (now()) in het tijd-window zit. Ik dacht hiervoor de time_t variabele mooi te kunnen gebruiken, maar vergat dat daar ook de datum in zit. Hoe kan ik dit het beste en makkelijk oplossen?

Ik heb nu een functie geschreven die de uren en minuten van de huidige (time_t) tijd naar een getal converteert en dat ook met de kleinste en grootste tijd van het tijd-window doet en vervolgens de getallen met elkaar vergelijkt. Echter, het wordt nogal onoverzichtelijke code. Is er niet een makkelijkere manier om tijden met elkaar te vergelijken?
Technology is awsome!

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Tijd vergelijken

Berichtdoor Koepel » 06 Dec 2018, 20:55

Het is me niet helemaal duidelijk.

Om iets op een bepaalde tijd te doen is er TimeAlarms: https://www.pjrc.com/teensy/td_libs_TimeAlarms.html.
Die zit al in de "Bibliotheek Beheer" in de Arduino IDE.

Waarom wil je kijken of je in een bepaalde tijd-window zit? Dan wordt het inderdaad onoverzichtelijk met hour(t), minute(t) en second(t). Vooral als de tijd-window over de grens van middernacht (24:00) ligt.

Je kunt ook de elapsedSecsToday(t) gebruiken. Die staat op regel 81: https://github.com/PaulStoffregen/Time/blob/master/TimeLib.h#L81.

Welk Arduino board heb je, en welke RTC gebruik je ?

Gebruikers-avatar
Berichten: 4
Geregistreerd: 06 Dec 2018, 18:02
Woonplaats: Nuenen

Re: Tijd vergelijken

Berichtdoor a.appel » 10 Dec 2018, 20:30

Hi Koepel,

Tnx voor je reactie. Ik zal het proberen uit te leggen.

Ik heb ergens gelezen dat het inbrekersgilde tegenwoordig niet meer op (automatisch) aangaande lampen en TV-simulatoren letten, maar meer letten op de stand van de gordijnen van woonkamer en vooral kinderkamer. Daarom wil ik mijn gordijnen automatiseren.

Ik wil dat de gordijnen in de kinderkamer 's avonds om 20:00 dicht gaan en door de weeks om 7:15 open gaan en in het weekend rond een uur of 9:00. De gordijnen in de woonkamer wil ik afhankelijk van het licht openen en sluiten. Echter, ik wil dat de gordijnen door de weeks niet eerder dan 17:00 dicht gaan (normaliter ben je dan ook nog niet thuis), ook al is het in de winter eerder donker. Ook wil ik niet dat ze door de weeks later dan 21:00 dicht gaan, ook al is het in de zomer langer licht. En in het weekend wil ik ook weer afwijkende tijden voor begin en eind tijden van de bedieningscycli.

De TimeAlarms bibliotheek kan alleen iets op een bepaalde tijd uitvoeren. En dus niet binnen een bepaald tijdsinterval gaan kijken naar de waarde van de lichtsensor. Misschien ben ik niet creatief genoeg of niet analytisch genoeg om een oplossing met deze bibliotheek te vinden.

Ik maak gebruik van een NodeMCU, een Amica, een op de ESP8266 gebaseerde arduino achtige. Ik gebruik geen RTC, maar synchroniseer de tijd eenmaal per nacht met de router. Ik deed het met het vergelijken van de hour(t), minute(t) en second(t), maar ik had inmiddels ook TimeAlarms ontdekt en dat ga / moet ik alleen nog even implementeren.

Mijn vraag is dus eigenlijk: kan ik op een makkelijke manier checken of ik in een bepaald tijdsframe zit? De grens van over middernacht gaan, is in mijn toepassing geen probleem....
Technology is awsome!

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Tijd vergelijken

Berichtdoor shooter » 10 Dec 2018, 20:34

ja hoor een tijdframe kun je aanzetten en ergens anders zet je het weer uit. is gewoon een vlag die je om 17 aan zet en om 7 weer uit.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 4
Geregistreerd: 06 Dec 2018, 18:02
Woonplaats: Nuenen

Re: Tijd vergelijken

Berichtdoor a.appel » 10 Dec 2018, 23:55

Ik denk dat ik het begrijp, maar even voor de zekerheid:
Ik definieer een nieuwe, globale boolean (bijvoorbeeld InDoorDeWeeksOpeningsWindows) en zet deze met een TimeAlarm op true op de ingestelde minimale tijd en weer op false op de ingestelde maximale tijd.
Zo definieer ik 4 booleans (door de week open window, door de week sluit window, in het weekend open window en in het weekend sluit window) en elk zet ik middels een TimeAlarm aan of uit.

Nog wel een paar extra vraagjes:
Is er ook nog een functie waarmee ik bij het opstarten of na resetten kan checken of ik in een van de windows zit?
Is er een mogelijkheid om te achterhalen of een bepaalde dag een (nationale / publieke) feestdag is om vervolgens een weekend instelling te gebruiken ipv een door-de-weekse instelling?
Technology is awsome!

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Tijd vergelijken

Berichtdoor Koepel » 11 Dec 2018, 00:33

Je kunt een lijst met feestdagen maken, met het jaar en de maand en de dag-van-de-maand. Dan kun je de huidige dag opvragen en vergelijken.
Sommige feestdagen zijn ieder jaar op dezelfde dag (Kerstfeest), andere dagen kunnen wijzigen (Pasen).

Wanneer je de Arduino aan zet, dan weet de TimeAlarms library niet wat op dat moment aktief is. Die kan alleen iets op een bepaald tijdstip doen. Wanneer je dat automatisch toch goed wilt laten gaan, dan heb je daar nog best veel code voor nodig die gaat zitten puzzelen of je in een van de tijd-windows zit.
Daar lopen ook anderen tegen aan. Maar er is helaas geen handigheidje voor.

Eenmaal per dag synchroniseren met een tijdserver lijkt me prima.

Het lijkt me nogal vergezocht. Misschien valt meteen op dat een motor de gordijnen open doet.
Gaat het alleen om inbrekers? Dan helpt een goed inbraakalarm beter. Zo'n modern alarm waarbij je op afstand kunt meekijken.

Gebruikers-avatar
Berichten: 4
Geregistreerd: 06 Dec 2018, 18:02
Woonplaats: Nuenen

Re: Tijd vergelijken

Berichtdoor a.appel » 11 Dec 2018, 15:37

Hi Koepel,

Wederom tnx voor je reactie.

Lijstje met feestdagen is leuk voor de vaste feestdagen, maar dan mis je er natuurlijk weer een paar. Is ook niet zo belangrijk dat het perfect is, maar juist dit soort kleine details vind ik op zich wel interessant om er over na te denken. En als de tijd wordt opgehaald van een router, dan moet toch ook informatie omtrent een feestdag ergens op het net te vinden en in te lezen zijn?

Verder, als ik opstart, ga ik eerst de tijd ophalen bij de router. Die kan ik natuurlijk op "de ouderwetse" methode vergelijken en afhankelijk daarvan de boolean variabelen zetten. Is inderdaad wel een stukje code voor nodig, maar ja...

Nou, het gaat niet alleen om het inbrekersgilde, het gaat me ook om het zelf knutselen, klooien, programmeren en leren omgaan met een combi van hard- en software en een stukje mechanica. Inderdaad, een professioneel inbraakalarm is makkelijker, veiliger, maar je leert er in principe niets van...
Technology is awsome!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: RicardoGed en 15 gasten