Stránka 1 z 3
Ukládání časových hodnot
Napsal: 01 led 2020, 17:16
od rickmann
Zdravím !
Jako totální začátečník bych potřeboval poradit :(nejlépe kdyby mi někdo prosím napsal vzor programu

)
Potřeboval bych měřit čas sepnutí kontaktu a ukládat ho tak, abych občas kdyby byla potřeba píchnul noťas na arduino uno a hodnoty zkouknul jestli se mění . Zbytek okolo už zvládám .
Děkuji za pomoc R
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 17:40
od pavel1tu
Pokud to chápu, chceš program, který ti bude měřit (třeba), jak dlouho je log."1" na vstupu ?
Není nic jednoduššího, ale ....
1) kolik posledních měření chceš ukládat ? Paměť je dost omezená a po výpadku napájení, nebo když se Arduino kousne, o data přijdeš.
2) je možnost i ukládat min. a max. hodnoty
Výpis:
- v pohodě po sériové lince (USB) po odeslání nějakého příkazu do Arduina ti Arduino vysype uložené hodnoty.
- nebo SD karta do nějakého souboru, tu SD si pak přečteš v PC klidně
chce to definovat více i kolem HW - jak dlouhé časy předpokládáš a jakou chybu pažaduješ (podle toho se musí ošetřit HW nějakými odpory a kondikem tzv. zákmity kontaktu)
Klidně pomohu s tou verzí bez SD karty až to upřesníš .... kolik toho ukládat atd.
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 18:12
od rickmann
Díky za zájem, časová hodnota by měla být okolo 3 minut a počet hodnot by byl tak okolo 15ti denně . Nevím jestli je to možné , ale stačili by hodnoty do velikosti paměti a staré přepisovat . Určitě by stačilo 50 posledních hodnot .Když dojde k výpadku, tak se nic neděje protože přijdou další data. Verzi bez SD karty bych ocenil . Zakmitnutí řeším optočlenem a rcčlenem, takže v tom bych potíž asi nečekal.
Jak píšu, v programování těchto věcí jsem malej kluk

Díky
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 18:20
od Axamith
Případně si data ukládej na SD, nebo do databáze.
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 18:21
od rickmann
Mě bohatě stačí ty data porovnat. Zálohování nepotřebuji.
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 18:51
od pavel1tu
rickmann píše: ↑01 led 2020, 18:12
Díky za zájem, časová hodnota by měla být okolo 3 minut a počet hodnot by byl tak okolo 15ti denně . Nevím jestli je to možné , ale stačili by hodnoty do velikosti paměti a staré přepisovat . Určitě by stačilo 50 posledních hodnot .Když dojde k výpadku, tak se nic neděje protože přijdou další data. Verzi bez SD karty bych ocenil . Zakmitnutí řeším optočlenem a rcčlenem, takže v tom bych potíž asi nečekal.
Jak píšu, v programování těchto věcí jsem malej kluk

Díky
50 hodnot není problém, u GSM meteostanic ukládám i 200 hodnot, když nejdou odeslat.
Ale těch 3 minut se bojím - někdo tu dělal nějaké 5min intervaly a chtěl dost přesnost, nevím jak je Arduino přesné. Třeba to někdo zkoumal ....
A přesnost co požaduješ, jestli to spouštět od "přerušení"...
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 20:35
od pavel1tu
Tak mám to hotové,
ale musím to doladit
lidi, nefunguje mi ukládání do
int elapsed[10];
sem tam tam přetečou nesmysly, heeelp
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 21:12
od pavel1tu
Tak uz to funguje
STAR/STOP je na BIN 2 HIGH=start LOW=stop - jde to předělat
když po serialmonitoru napíšeš "p" a odešleš vypíše to všechny měření - lze upravit
je to složenina z mých projektů a z serialkomunikace je z místního budíku

od někoho
Kód: Vybrat vše
/*
Mereni delky pulzu pomoci millis();
*/
byte casuji = 0;
byte cislomereni = 0;
unsigned long start, finished, over; // ulozeni casu START,STOP
unsigned long elapsed[10]; // vysledny napereny cas - pole pro 10 mereni
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT); // start/stop
}
void loop()
{
if (digitalRead(2)==HIGH && casuji==0) //START
{
start=millis();
delay(200); // potlaceni zakmitu
Serial.println("Start...");
casuji = 1;
}
if (digitalRead(2)==LOW && casuji==1) //STOP
{
finished=millis();
delay(200); // potlaceni zakmitu
Serial.println("Stop...");
casuji = 0;
elapsed[cislomereni]=finished-start;
Serial.print("Zmereno c.");
Serial.println(cislomereni + 1);
cislomereni++;
if(cislomereni==9) cislomereni=0;
}
SerialComm(); //vycteni dat ze seriove linky
}
void OdeslatVysledky()
{
for(int x=0; x<=9; x++) {
float h,m,s,ms;
elapsed[x];
h=int(elapsed[x]/3600000);
over=elapsed[x]%3600000;
m=int(over/60000);
over=over%60000;
s=int(over/1000);
ms=over%1000;
Serial.print("Zaznam ");
Serial.print(x+1);
Serial.print(" Raw time: ");
Serial.print(elapsed[x]);
Serial.print(" Time: ");
Serial.print(h,0);
Serial.print("h ");
Serial.print(m,0);
Serial.print("m ");
Serial.print(s,0);
Serial.print("s ");
Serial.print(ms,0);
Serial.println("ms");
}
}
//serial communication with PC
void SerialComm() {
//first char - type of data
//second and third char - data
//there are used only "printable" characters
if (Serial.available() > 0) {
byte receivedCommand;
receivedCommand = Serial.read(); //read first char
delay(10); //wait for other char
byte receivedDataTens;
receivedDataTens = Serial.read();
receivedDataTens -= 48; // ASCII code for "0" is 48
byte receivedDataOnes;
receivedDataOnes = Serial.read();
receivedDataOnes -= 48; // ASCII code for "0" is 48
byte receivedData;
receivedData = (receivedDataTens * 10) + receivedDataOnes;
if (receivedData > 99) {
//maximal value is 99
receivedData = 0; //value is out of range
}
switch (receivedCommand) {
case 112:
//112 = p
if (receivedData > 1) {
receivedData = 1;
}
OdeslatVysledky();
break;
}
//flush serial data
Serial.flush();
}
}
PS: dělal jsem to na tabletu, tak uvidíme
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 21:49
od AstroMiK
Pozor na stav, kdy se připojí k Arduinu USB kabel od notebooku.
Při tom se obvykle provádí automatický reset Arduina, takže se data z RAM smažou (ještě před tím, než se stačí stáhnout).
Tady jsou popsané detaily, jak to řešit:
https://playground.arduino.cc/Main/Disa ... onnection/
Re: Ukládání časových hodnot
Napsal: 01 led 2020, 21:56
od pavel1tu
AstroMiK píše: ↑01 led 2020, 21:49
Pozor na stav, kdy se připojí k Arduinu USB kabel od notebooku.
Při tom se obvykle provádí automatický reset Arduina, takže se data z RAM smažou (ještě před tím, než se stačí stáhnout).
Tady jsou popsané detaily, jak to řešit:
https://playground.arduino.cc/Main/Disa ... onnection/
díky, to mne nenapadlo, já to dělám na Arduinu bez USB, tak bych na to nepřišel ....