Show Posts
Pages: 1 2 [3] 4 5 ... 9
31  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 29, 2013, 12:39:50 pm
Ok, Final result :

Sono riuscito a scoprire l'inghippo :-)

Durante la scrittura su SD, mettevo il File.print("\n") alla fine della sequenza, questo mi provocava una riga vuota.
Purtroppo me ne son potuto accorgere solo usando un textEditor non classico (uso MAc).

Ecco il Result utilizzando l'esempio di Pablos che ringrazio.
Code:
inizializzazione SD completata.
scrivo valori...done.
inizializzazione SD completata.
scrivo valori...done.
12345,12331,43221,52523,32411,46222,262322,25222,124442
12345,12331,43221,52523,32411,46222,262322,25222,124442
12345,12331,43221,52523,32411,46222,262322,25222,124442
12345,12331,43221,52523,32411,46222,262322,25222,124442
12345,12331,43221,52523,32411,46222,262322,25222,124442
ultima linea 12345,12331,43221,52523,32411,46222,262322,25222,124442
1
12345
12331
43221
52523
32411
46222
262322
25222
124442

Ora cerchero di implementare il tutto nel mio di sketch.

Grazie ancora e buona serata.

Remo
32  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 29, 2013, 05:03:36 am
Penso sia tutto un fattore di inizializzazione.

Stasera riprovo il tuo esempio, usando le tue init ecc...

P.S. la mia SD Card è una da 8 GB l'ho partizionata in 2 da 4Gb, cattiva idea ?

Saluti e buon pomeriggio

Remo
33  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 29, 2013, 01:16:43 am
Se ci avrei fatto caso me lo sarei chiesto. smiley-cool

Buona giornata
Remo
34  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 29, 2013, 01:05:02 am
Buongiorno a tutti.

@Pablos : Vedró di far rifunzionare il tuo esempio (che all'inizio funzionava)

@Leo72 : Grazie delle delucidazioni, non saprei quali domande avrei dovuto pormi, non saró tanto sveglio !!

Buona giornata a tutti
Remo
35  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 28, 2013, 01:08:59 pm
con la Init SD del mio enviroment invece mi trova il file, ma il risultato rimanne invariato :-(
ecco l'output
-------

Code:
initialization done.
28,4,2013,19,36,8,113165,112972,2
28,4,2013,19,36,16,113165,112972,3
28,4,2013,19,37,8,113165,112972,2
28,4,2013,19,37,16,113165,112972,3
28,4,2013,19,37,24,113165,112972,4
28,4,2013,19,37,32,113165,112972,5
28,4,2013,19,37,40,113165,112972,6
28,4,2013,19,38,48,113165,112972,7
28,4,2013,19,38,56,113165,112972,8
28,4,2013,19,38,64,113165,112972,9
28,4,2013,19,38,8,113165,112972,2
28,4,2013,20,3,8,113165,112972,2
28,4,2013,20,3,16,113165,112972,3
28,4,2013,20,3,8,113165,112972,2
28,4,2013,20,4,16,113165,112972,3
28,4,2013,20,4,8,113165,112972,2
28,4,2013,20,5,8,113165,112972,2
28,4,2013,20,5,16,113165,112972,3
28,4,2013,20,6,8,113165,112972,2
28,4,2013,20,6,16,113165,112972,3
ultima linea
0
0
0
0
0
0
0
0
0
----------
36  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 28, 2013, 12:53:11 pm
Ciao Pablos,
infatti, l'errore "file non trovato appare".
Non saprei dove sbaglio a questo punto.
Il file di testo memorizzato sulla SD non presenta righe vuote.

Unico dubbio è l'utilizzo dei comandi per la SD (diverse librerie ? )

Se uso la tua inizializzazione allegata nel codice, nel momento di scrittura l'arduino mi da errore di apertura.

Come detto in post precedenti, uso la Libreria apresente nell'enviroment arduino.

Quello che mi chiedo , come mai mi fa vedre le righe (in debug) se poi mi dice file non trovato ?

Ecco l'output della seriale al momento ...

dimenticavo uso piu Seriali perche sto usando 2 Xbee

Saluti Remo
----------------
Code:
file non trovato
ultima linea
0
0
0
0
0
0
0
0
0
inizializzazione SD completata.
28,4,2013,19,36,8,113165,112972,2
28,4,2013,19,36,16,113165,112972,3
28,4,2013,19,37,8,113165,112972,2
28,4,2013,19,37,16,113165,112972,3
28,4,2013,19,37,24,113165,112972,4
28,4,2013,19,37,32,113165,112972,5
28,4,2013,19,37,40,113165,112972,6
28,4,2013,19,38,48,113165,112972,7
28,4,2013,19,38,56,113165,112972,8
28,4,2013,19,38,64,113165,112972,9
28,4,2013,19,38,8,113165,112972,2
ultima linea
0
0
0
0
0
0
0
0
0
 secondi passati --> 17 consumo attuale --> 1764.71 Giri disco al momento --> 2
****************************************************************
 Contatore tariffa alta --> 113165 Contatore tariffa bassa --> 112972 Consumo Giornaliero in w/h --> 8
 DATA: 28.4.2013   ORA:19:52:26


apertura file fallita...


37  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 12:18:44 pm
allego il mio sketch (confusionario)
se riesci a carpirne il problema te ne sarei grato.



Code:
int result;
int buttonPin = 22;
int buttonPin1 = 24;

int giri = 0;

#include <Wire.h>
#include "RTClib.h"
#include <SD.h>
#include <SPI.h>
#define DEBUG_RIGHE_FILE 1 //0=non legge ... 1=legge
int button = 8;
int start;
int stop_;
int tempo;
RTC_DS1307 RTC;
int flag = 0;
int anno;
int mese;
int giorno;
int ora;
int minuti;
int secondi;
int data;
long contatore_alto =113165;
long contatore_basso = 112972;
int flag_contatore;
 int kw_giorno;
 int giri_kw;
File contatore;
String ReadLine;
int riavvio = 0;
char charBuf[80];
byte err_sd=1;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;



void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode (button,INPUT);
  pinMode(buttonPin,OUTPUT);
   pinMode(buttonPin1,OUTPUT);
     pinMode(53, OUTPUT);
  leggi_SD(); //vai alla funzione leggi l'ultima riga da sd  
  
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
   // RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  sd_init();
  leggi_SD();
}

void sd_init()
{  
   if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
}

void leggi_SD(){
  String ReadLine;
  char charBuf[50];
contatore = SD.open("valori2.txt",FILE_READ);
    
if(contatore) {
   int16_t c;
       while ((c = contatore.read())>0){
         ReadLine += (char)c;
           if((char)c=='\n') {                

                 #if DEBUG_RIGHE_FILE              
                 Serial.print(ReadLine);//debug
                 #endif

               if(c > 0) ReadLine="";  
            }  
       }  
   }
  Serial.print("ultima linea ");//debug
  Serial.println(ReadLine);//debug  //questa è l'ultima linea
  ReadLine.toCharArray(charBuf, 50); //metto i singoli caratteri in un array di char
  estrai_valori(charBuf);//vai alla funzione estrai dati
}


void estrai_valori(char *charBuffer){
 unsigned long temp[]= {0,0,0,0,0,0,0,0,0};
  char *p = charBuffer;  
  byte i = 0;

  while (*p != '\0')
  {
    if (*p == ',') { ++i;  ++p;  continue;}
    if (isdigit(*p))
    {
         temp[i] *= 10;
         temp[i] += (*p - '0');            
    }    
     ++p;
  }  

Serial.println(temp[0]);Serial.println(temp[1]);Serial.println(temp[2]);Serial.println(temp[3]);Serial.println(temp[4]);
Serial.println(temp[5]);Serial.println(temp[6]);Serial.println(temp[7]);Serial.println(temp[8]);

contatore.close();
}




void loop() {
 
  DateTime now = RTC.now();
    
    anno = (now.year());
    mese = (now.month());
    giorno =(now.day());
    ora = (now.hour());
    minuti = (now.minute());
    secondi = (now.second());
  
     if (ora > 7 && ora < 21) { flag_contatore = 0;} else {flag_contatore = 1;}
     if (ora == 0 && minuti == 0 && secondi < 20) {giri_kw = 0; kw_giorno = 0;}
  
  
    if (flag == 0) {
   start = (now.unixtime());
   //Serial.println(start);
   }
         flag =1 ;
  
  

 
  // Se arriva impulso tramite Xbee allora si comincia
  if (Serial.available()) {
    int inByte = Serial.read();
  // Serial1.println( Serial.write(inByte));
  
  
   if (inByte == 'I') {      
      giri = giri + 1;
      kw_giorno = kw_giorno + 8.333333;
  
     if (giri == 120) {
      
       if (flag_contatore == 0) {contatore_alto = contatore_alto + 1;}
       if (flag_contatore == 1) {contatore_basso = contatore_basso + 1;}
       giri = 0;}
      
    
    
      tempo = now.unixtime() - start ;
      flag = 0;
    digitalWrite (buttonPin,HIGH);
    delay(150);
    float z = tempo/3600.000000000;
    float  consumo_mom = 8.333333 / z;
  
  
  // Stampa su monitor
    Serial.print (" secondi passati --> ");
    Serial.print (tempo);
    Serial.print (" consumo attuale --> ");
    Serial.print (consumo_mom);
    Serial.print (" Giri disco al momento --> ");
    Serial.println (giri);
    Serial.println ("****************************************************************");
    Serial.print (" Contatore tariffa alta --> ");
    Serial.print (contatore_alto);
    Serial.print (" Contatore tariffa bassa --> ");
    Serial.print (contatore_basso);
     Serial.print (" Consumo Giornaliero in w/h --> ");
    Serial.println (kw_giorno);
    Serial.print (" DATA: ");
    Serial.print (giorno);
    Serial.print (".");
    Serial.print (mese);
    Serial.print (".");
    Serial.print (anno);
    Serial.print ("   ORA:");
    Serial.print (ora);
    Serial.print (":");
    Serial.print (minuti);
    Serial.print (":");
    Serial.print (secondi);
    Serial.println ();
    Serial.println ();
    Serial.println ();
    
    
//Scrittura su SD  
contatore = SD.open("valori2.txt", FILE_WRITE);
      // if the file opened okay, write to it:
  if(contatore) {
    Serial.print("scrivo valori...");
    delay(250);
      contatore.print(giorno);
     contatore.print(",");
     contatore.print(mese);
      contatore.print(",");
       contatore.print(anno);
         contatore.print(",");
      
         contatore.print(ora);
          contatore.print(",");
           contatore.print(minuti);
         //   contatore.print(",");
         //    contatore.print(secondi);
            
              contatore.print(",");
              
              //  contatore.print(consumo_mom,0);
                
              //   contatore.print(",");
                   contatore.print(kw_giorno);
                  
                    contatore.print(",");
                     contatore.print(contatore_alto);
                    
                       contatore.print(",");
                        contatore.print(contatore_basso);
                        
                          contatore.print(",");
                           contatore.print(giri);
                            
                            contatore.print("\n");
                          
                        
                          
// close the file:
  contatore.close();
    Serial.println("done.");

  } else {
    // if the file didn't open, print an error:
    Serial.println("apertura file fallita...");
  }
    
    
}

  

  digitalWrite (buttonPin,LOW);
 

  









  // read from port 1, send to port 0:
 // if (Serial1.available()) {
   // int inByte = Serial1.read();
  }
}
 
38  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 12:03:24 pm
nel mio sketch, se faccio il debug delle righe mi rida dietro i dati, ma non nelle Variabili temporali.

--------------------
Code:
initialization done.

27,4,2013,18,46,0,113165,112972,1
27,4,2013,18,46,0,113165,112972,1
27,4,2013,18,47,0,113165,112972,2
27,4,2013,18,47,0,113165,112972,3
27,4,2013,18,47,0,113165,112972,1
27,4,2013,18,48,0,113165,112972,2
27,4,2013,18,48,0,113165,112972,3
27,4,2013,18,48,0,113165,112972,4
27,4,2013,18,49,0,113165,112972,5
27,4,2013,18,49,0,113165,112972,6
27,4,2013,18,49,0,113165,112972,7
27,4,2013,18,49,0,113165,112972,8
27,4,2013,18,50,0,113165,112972,9
27,4,2013,18,50,0,113165,112972,10
27,4,2013,18,50,0,113165,112972,11
27,4,2013,18,51,0,113165,112972,12
27,4,2013,18,51,0,113165,112972,13
27,4,2013,18,51,0,113165,112972,14
27,4,2013,18,52,0,113165,112972,1
27,4,2013,18,52,0,113165,112972,2
27,4,2013,18,52,0,113165,112972,3
27,4,2013,18,53,0,113165,112972,4
27,4,2013,18,53,0,113165,112972,5
27,4,2013,18,54,8,113165,112972,1
27,4,2013,18,55,16,113165,112972,2
27,4,2013,18,55,8,113165,112972,1
27,4,2013,18,55,16,113165,112972,2
27,4,2013,18,56,24,113165,112972,3
27,4,2013,18,56,32,113165,112972,4
27,4,2013,18,57,40,113165,112972,5
ultima linea
0
0
0
0
0
0
0
0
0
-------------------------------------------------------

le variabili --> 113165,112972 le ho impostate come long
il resto come int, poiche il valore massimo non supererà mai il 150.

Saluti
Remo
39  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 09:50:14 am
Ciao Pablo,
non investire ulteriore tempo, mi accontenterò di 3 sole variabili
27,4,2013,16,1,38,2307,0,113165,112972,1

Alla fine mi interessa che il mio arduino abbia lo stesso numero di cicli del misuratore di corrente, che sta fuori casa.

Tutto questo solo in caso di reset , il resto lo visualizzo sul display in REal Time.

Provo ad adattarmelo.

Grazie di tutto al momento !!

Saluti
Remo
40  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 09:29:49 am
lo 0.01 sarebbe il consumo giornaliero accumulato a partire dalla mezzanotte in kw , potrei farne un intero in watt
il 2307.7 sarebbe il consumo momentaneo , ma anche li potrei farne un intero.

Grazie per l'aiuto

Remo
41  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 09:07:15 am
Il tuo Esempio funziona alla perfezione.
 Cosa fare adesso ? se a me interessano i valori qui sotto marcati in rosso ?
Che avranno sicuramente un altro formato


21,4,2013,16,25,37,1486,123496,113495 <---- Dal tuo Esempio
27,4,2013,16,1,38,2307.7,0.01,113165,112972,1 <--- Cio di cui avrei bisogno
 

Saluti
Remo
42  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 07:52:48 am
appena rientro a casa provo con il tuo esempio.(fra 1 oretta)

Grazie al momento ...

Saluti
Remo
43  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 07:17:27 am
Grazie Pablos,

in allegato i risultati + il tuo Sketch

Sketch :
----------
Code:
#include <SPI.h>
#include <SD.h>
#define DEBUG_RIGHE_FILE 0 //0=non legge ... 1=legge
byte err_sd=1;
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;

void setup() {
delay(1000);
  Serial.begin(9600);//debug
  pinMode(4, OUTPUT);       // Set the SDcard CS pin as an output
  digitalWrite(4, 1); // Turn off the SD card! (wait for configuration)
  sd_init();
  leggi_SD();
   pinMode(53, OUTPUT);
}

void sd_init()
{  
  err_sd=0;
  if (!card.init(SPI_FULL_SPEED, 4)) err_sd=1;
  if (!volume.init(&card)) err_sd=1;
  if (!root.openRoot(&volume)) err_sd=1;
  
  if (err_sd==0)
  Serial.println("inizializzazione SD completata.");//debug  
  else //debug
  Serial.println("inizializzazione SD fallita.");//debug
}

void leggi_SD(){
  String ReadLine;
  char charBuf[50];
    
  if(file.open(&root, "valori2.txt", O_READ)) {
   int16_t c;
       while ((c = file.read())>0){
         ReadLine += (char)c;
           if((char)c=='\n') {                

                 #if DEBUG_RIGHE_FILE              
                 Serial.print(ReadLine);//debug
                 #endif

               if(c > 0) ReadLine="";  
            }  
       }  
   }
  Serial.print("ultima linea ");//debug
  Serial.println(ReadLine);//debug  //questa è l'ultima linea
  ReadLine.toCharArray(charBuf, 50); //metto i singoli caratteri in un array di char
  estrai_valori(charBuf);//vai alla funzione estrai dati
}


void estrai_valori(char *charBuffer){
  unsigned long temp[]= {0,0,0,0,0,0,0,0,0};
  char *p = charBuffer;  
  byte i = 0;

  while (*p != '\0')
  {
    if (*p == ',') { ++i;  ++p;  continue;}
    if (isdigit(*p))
    {
         temp[i] *= 10;
         temp[i] += (*p - '0');            
    }    
     ++p;
  }  

Serial.println(temp[0]);Serial.println(temp[1]);Serial.println(temp[2]);Serial.println(temp[3]);Serial.println(temp[4]);
Serial.println(temp[5]);Serial.println(temp[6]);Serial.println(temp[7]);Serial.println(temp[8]);
}

void loop() { }
-----------------------

Dati sulla SD :
--------------------
Code:
27,4,2013,14,8,6,909.1,0.01,113165,112972,1
27,4,2013,14,8,58,588.2,0.02,113165,112972,2
27,4,2013,14,9,45,652.2,0.02,113165,112972,3
27,4,2013,14,10,33,638.3,0.03,113165,112972,4
27,4,2013,14,11,29,545.5,0.04,113165,112972,5
27,4,2013,14,12,33,476.2,0.05,113165,112972,6
27,4,2013,14,13,30,1304.3,0.01,113165,112972,1
---------------------

Output SEriale :
------------------------
Code:
inizializzazione SD completata.
ultima linea
0
0
0
0
0
0
0
0
0
---------------------

Saluti
Remo
44  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 06:19:08 am
Code:
if(file.open(&root, "miofile.txt", O_READ))
Scusami Pablos, quale Libreria utilizzi per la SD ?
Con il comando sopra citato mi da errore di compilazione (class File has no member named 'Open'.

Al momento ho impostato in questa maniera
----
Code:
void leggi_SD(){
  String ReadLine;
  char charBuf[50];
  contatore = SD.open("valori2.txt",FILE_READ);
    
  if(contatore) {
   int16_t c;
ecc.....
------

Mi da ancora 0 come valori (ho riimpostato la struttura della scrittura come nel tuo esempio con le "," senza "#" all'inizio.

45  International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga) on: April 27, 2013, 05:53:10 am
Grazie delle Info,
provo e vi informero.

Buona Giornata
Remo
Pages: 1 2 [3] 4 5 ... 9