Show Posts
|
|
Pages: [1] 2 3 ... 8
|
|
2
|
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. 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
|
|
|
|
|
6
|
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 ------- 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 ----------
|
|
|
|
|
7
|
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 ---------------- 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...
|
|
|
|
|
8
|
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. 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(); } }
|
|
|
|
|
9
|
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. -------------------- 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
|
|
|
|
|
10
|
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
|
|
|
|
|
12
|
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
|
|
|
|
|
14
|
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 : ---------- #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 : -------------------- 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 : ------------------------ inizializzazione SD completata. ultima linea 0 0 0 0 0 0 0 0 0 --------------------- Saluti Remo
|
|
|
|
|
15
|
International / Software / Re: Rileggere variabili dalla ultima riga da una SD (Arduino MEga)
|
on: April 27, 2013, 06:19:08 am
|
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 ---- 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.
|
|
|
|
|