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