Arduino schéma - arduino.sk

Zápis dát v danom čase

Programovanie arduina
Príspevky: 28
Registrovaný: Štv 12. Feb 2015 11:05:28

Zápis dát v danom čase

Poslaťod roman » Sob 13. Jún 2015 20:13:33

neviem si rady zo zápisom dát v danom čase , dáta ako impulzy ,teplota atd zapisovať v 15 minútových intervaloch . To znamené že program beží ( ) a keď bude minute - 15 - 30 - 45 -00 a sekundy budú 00 tak zapíse data na SD . Všetko funguje len neviem akú funkciu použit a v akom formate ?
Naposledy upravil roman dňa Str 24. Jún 2015 19:19:50, celkovo upravené 1

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Zápid dát v danom čase

Poslaťod posjirka » Ned 14. Jún 2015 22:55:52

Pouzij format csv.
Je to vlastne prehistoricky excelovsky format.
V podstate se jedna o textak ascii kde neni zadna hlava ani pats.
Kazdy radek ukonceny enerem je radek v tabulce.
Sloupce se oddeluji strednikem = nesmis mit v textu strednik.
Excel to pak bez problemu importuje jako textovy soubor.

Príspevky: 28
Registrovaný: Štv 12. Feb 2015 11:05:28

Re: Zápis dát v danom čase

Poslaťod roman » Pon 15. Jún 2015 14:42:54

to je mi jasne , ale ja mám problém že teraz používam smyčku v programe :

for(int sinch = 0; sinch < cssin ; sinch++)
{

nejaká činnosť - čo trvá približne 15 minút

}

na konci je vyhodnotenie a zápis do reťazca : serialData +=
a zápis na SD kartu

ale ja by som potreboval smyčku nahradiť niečím iným - činnosť , počítanie impulzov a zápis vždy o xx:00:00 ; XX:15:00 ; XX:30:00 a XX:45:00
Naposledy upravil roman dňa Str 24. Jún 2015 19:18:46, celkovo upravené 1

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Zápid dát v danom čase

Poslaťod posjirka » Pon 15. Jún 2015 21:46:56

já bych to řešil tak, že bych nasatvil interní časovač jako přerušení každych 5s.
To by zavolalo podprogram, který by zkontroloval čas a případně že by bylo 15, 30, 45 nebo 00 tak zapiš údaje na SD kartu.
malá nápověda:
http://playground.arduino.cc/Code/Timer1

Obrázok užívateľa
Príspevky: 318
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Zápid dát v danom čase

Poslaťod tomXX » Pia 19. Jún 2015 8:28:05

Ahoj, pouzi funkciu modulo.

Kód: Vybrať všetko
if (minuty % 15 == 0 && sekundy == 0){
  zapis_nieco_na_SD();
  sleep(1000);  // pockaj sekundu aby sa to nezapislo 100x pocas jednej sekundy
}
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Zápid dát v danom čase

Poslaťod budvar10 » Pia 19. Jún 2015 10:36:38

Ja by som tam dal namiesto sleep ďalší test na príznak do if a v ife nastaviť príznak, že bolo zapísané. MCU sa potom môže venovať aj inej činnosti a nebude len tak vylihovať. ;)

Obrázok užívateľa
Príspevky: 318
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Zápid dát v danom čase

Poslaťod tomXX » Pia 19. Jún 2015 11:34:14

budvar10 píše:Ja by som tam dal namiesto sleep ďalší test na príznak do if a v ife nastaviť príznak, že bolo zapísané. MCU sa potom môže venovať aj inej činnosti a nebude len tak vylihovať. ;)

Mal som to tu tak napisane, ale nakoniec som to zjednodusil, aby sa to dalo lahsie pochopit.
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Príspevky: 28
Registrovaný: Štv 12. Feb 2015 11:05:28

Re: Zápid dát v danom čase

Poslaťod roman » Str 24. Jún 2015 19:14:59

doriešil som to podmienkami :

DateTime now = RTC.now();
if (now.minute()==15 && now.second()==0 ) {
vypocet();
riadok();
disp();
nulovanie();
}
if (now.minute()==30 && now.second()==0 ) {
vypocet();
riadok();
disp();
nulovanie();
}

Príspevky: 13
Registrovaný: Sob 29. Nov 2014 16:10:07

Re: Zápis dát v danom čase

Poslaťod sraj » Štv 25. Jún 2015 12:18:28

mám to spravené podobne,ale podmienku mám takúto:

if ((now.minute()==00 && now.second()==0 ) ||
(now.minute()==15 && now.second()==0 ) ||
(now.minute()==30 && now.second()==0 ) ||
(now.minute()==45 && now.second()==0 ))

...zápis každú štvrť hodinu

Obrázok užívateľa
Príspevky: 318
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Zápis dát v danom čase

Poslaťod tomXX » Pia 26. Jún 2015 14:45:01

sraj píše:mám to spravené podobne,ale podmienku mám takúto:

if ((now.minute()==00 && now.second()==0 ) ||
(now.minute()==15 && now.second()==0 ) ||
(now.minute()==30 && now.second()==0 ) ||
(now.minute()==45 && now.second()==0 ))

...zápis každú štvrť hodinu


Veď presne na toto je modulo (%), a stačil by ti jeden riadok :) Modulo je zvyšok po delení...

Kód: Vybrať všetko
if ((now.minute() % 15 == 0 && now.second() == 0 )
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Príspevky: 13
Registrovaný: Sob 29. Nov 2014 16:10:07

Re: Zápis dát v danom čase

Poslaťod sraj » Pon 29. Jún 2015 16:33:03

táák vyskúšal som to modulo a funguje perfektne :o
,len síce ušetril som 3 riadky kódu ale sežralo mi 8 byte naviac ,ale zas som sa niečo nové naučil, dík za radu.

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Zápis dát v danom čase

Poslaťod budvar10 » Pon 29. Jún 2015 19:51:35

Modulo spapalo nejaké bajtíky. Nie všetko jednoduchšie napohľad je v skutočnosti jednoduchšie. Avšak, ak by si mal komplikovanejší program, s modulom by rýchlo prišla úspora.

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Zápis dát v danom čase

Poslaťod posjirka » Uto 30. Jún 2015 20:51:43

trochu se mi nelíbí to now.second()==0
může se stát že smyčka LOOP bude delší než 1s a pak může být zápis dat nahodilý.
Opravdu lepší řešení je dát si proměnnou lastMinute kde se zaznamená poslední minutový údaj zápisu a když se bude lišit od aktuálního násobku 15 znovu zapiš na sd kartu a aktualizuj lastMinute

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Zápis dát v danom čase

Poslaťod posjirka » Uto 30. Jún 2015 20:55:04

int lastMinute;


void Loop() {
if ((now.minute() % 15 == 0 && now.minute()!= lastMinute ) {
lastMinute = now.minute();
// zapis na sd kartu
}
}

Späť na Software