suirammarius Postat Martie 19, 2013 Partajează Postat Martie 19, 2013 Buna seara!Lucrez la un proiect ce printre altele include si oprogramare orara. Folosesc un ceas extern (DS1307).Pana acum, pt a exectuta o anumita actiune intre orele "x" si orele "y", ii dadeam "1" cand ajungea la ora "x" si apoi ii dadeam "0" cand ajungea la ora "y". Functioneaza perfect, dar are un dezavantaj: daca pornesti aparatu' dupa ora de pornire, nu mai porneste pana a doua zi la ora "x". Deci, ar trebui sa folosesc un while("esti in interval") {"executa asta"}. Are cineva vreo idee cum as putea sa fac asta FARA sa folosesc AM/PM ? Ca sa folosesc AM/PM tre' sa schimb o gramada din cod...Multumesc! Link spre comentariu
Liviu M Postat Martie 19, 2013 Partajează Postat Martie 19, 2013 Banui ca momentan ai un if(ora == prag1){...}.Eu as incearca sa transform in if((ora>=prag1) && (ora Link spre comentariu
suirammarius Postat Martie 19, 2013 Autor Partajează Postat Martie 19, 2013 Am facut si eu asa! Maama si ce incantat eram.... Pai daca eu ii dau sa porneasca la ora 22 si sa se opreasca la ora 4, cum crezi ca va reactiona (atat aparatul cat si beneficiarul) ? Link spre comentariu
costi002 Postat Martie 19, 2013 Partajează Postat Martie 19, 2013 poate pui programul aici sa ne dam cu parerea. la ce interval de timp se face comparatia? (daca tre sa fie on sau off) Link spre comentariu
suirammarius Postat Martie 19, 2013 Autor Partajează Postat Martie 19, 2013 Foarte scurt... la fiecare ciclu.Momentan nu am cum sa pun programul (nu-l am in calc asta), dar pot explica:if (ora_actuala == ora_start) orar=1;if (ora_actuaa == ora_stop) orar = 0;while (orar){....}Atat, nimic mai mult; in loc de "..." activez niste functii, ceea ce nu cred ca ar fi relevant in solutionarea problemei mele, nu?Treaba e ca in solutia prezentata mai sus daca aparatu' nu e pornit la ora de start, nu mai porneste; sau, daca e oprit un pic in timpul intervalului (orar=1), cand porneste nu mai stie sa faca orar = 1 si asteapta pana a doua zi! Link spre comentariu
costi002 Postat Martie 19, 2013 Partajează Postat Martie 19, 2013 am incercat o varianta dar nu mi-a iesit. se pare ca este destul de greu Link spre comentariu
suirammarius Postat Martie 19, 2013 Autor Partajează Postat Martie 19, 2013 MULTUMESC MULT!Pare sa fie cat se poate de correct.Apreciez promptitudinea cu care mi s-a raspuns!Maine am sa pun la treaba modul! Link spre comentariu
Liviu M Postat Martie 19, 2013 Partajează Postat Martie 19, 2013 Si solutia e...Adica daca tot ai rezolvat, pune si solutia, asa, preventiv. Revenind la ideea mea, normal ca trebuie testata relatia intre prag1 si prag2 si daca 2 e mai mic decat 1 se face testul pe intervale (prag1..23:59 si 0..prag2). Link spre comentariu
suirammarius Postat Martie 20, 2013 Autor Partajează Postat Martie 20, 2013 Nu am rezolvat!!! Era postata mai sus, de catre Costi, o solutie; dar vad ca a disparut... probabil avea vreun bug, desi nu parea. Link spre comentariu
godFather89 Postat Martie 20, 2013 Partajează Postat Martie 20, 2013 while (ora_actuala >= ora_start && ora_actuala < ora_stop){....} Link spre comentariu
suirammarius Postat Martie 20, 2013 Autor Partajează Postat Martie 20, 2013 Asa nu merge; daca vreau sa funtioneze de la 22 la 04.... Link spre comentariu
Liviu M Postat Martie 20, 2013 Partajează Postat Martie 20, 2013 O varianta destul de usor de implementat e sa vezi care interval (start-stop sau stop-start) e neintrerupt si sa testezi daca ora curenta e in el. if(ora_start < ora_stop) // interval neintrerupt de timp = start..stop, cand orar == 1{ if((ora >= ora_start) && (ora < ora_stop)) orar = 1; else orar = 0;}else // interval neintrerupt de timp = stop..start, cand orar == 0{ if((ora >= ora_stop) && (ora < ora_start)) orar = 0; else orar = 1;} Probabil se mai poate micsora folosind inca o variabila pe post de flag, care sa semnalizeze care-i intervalul contiguu... PS N-am testat codul, dar ar trebui sa mearga. Link spre comentariu
godFather89 Postat Martie 20, 2013 Partajează Postat Martie 20, 2013 Asa nu merge; daca vreau sa funtioneze de la 22 la 04....atunci, is mai multe metode:1: ora_stop o incrementezi cu 24 (la fel si ora_actuala daca e mai mica ca ora_stop).2: cam la fel cum e mesajul de mai sus:while (ora_start < ora_stop ? ora_actuala >= ora_start && ora_actuala < ora_stop : ora_actuala >= ora_start || ora_actuala < ora_stop){....}3: normalizezi ora in functie de data (ceva mai complicat dar tine cont si de zi - daca ai nevoie)etc. Link spre comentariu
suirammarius Postat Martie 20, 2013 Autor Partajează Postat Martie 20, 2013 Va multumesc frumos!Maine seara am ce sa experimentez Link spre comentariu
suirammarius Postat Martie 24, 2013 Autor Partajează Postat Martie 24, 2013 O varianta destul de usor de implementat e sa vezi care interval (start-stop sau stop-start) e neintrerupt si sa testezi daca ora curenta e in el. (...)Am luat exemplul pus de tine si l-am adaptat; eu aveam nevoie si de minute. Uite ce mi-a iesit (inca nu l-am probat):if (weekDay <= 5) { if(hNlv_eeprom_hora_on < hNlv_eeprom_hora_off) // interval neintrerupt de timp = start..stop, cand orar == 1 { if((hour >= hNlv_eeprom_hora_on) && (hour < hNlv_eeprom_hora_off)) { if ((minute == hNlv_eeprom_min_on) || m==1) { h = 1; m = 1; } else { h=0; m=0; } } else if (hour == hNlv_eeprom_hora_off && (minute < hNlv_eeprom_min_off)) h = 1; else h=0; } else // interval neintrerupt de timp = stop..start, cand orar == 0 { if((hour > hNlv_eeprom_hora_off) && (ora < hNlv_eeprom_hora_on)) h = 0; else if (hour == hNlv_eeprom_hora_off && (minute > hNlv_eeprom_min_off)) h=0; else if (hour == hNlv_eeprom_hora_on && (minute < hNlv_eeprom_min_on)) h=0; else h=1; } }Cum vi se pare?Asta ar fi doar orarul de luni pana vineri in perioada normala (nu in vacanta/concediu). Mai am de facut si cel de sambata-duminica si apoi cel de vacanta. As vrea sa folosesc modelul mai sus prezentat si tocmai de aia ceream o parere. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum