Go Down

Topic: [RISOLTO]SD >richiamare una variabile int . (Read 1 time) previous topic - next topic

nid69ita

#30
May 29, 2019, 10:24 am Last Edit: May 29, 2019, 10:27 am by nid69ita
@WinGame,   usa quel benedetto CTRL+T  nell'IDE !!
Metti come suggerito un pò di serial.print per debuggare !!



Code: [Select]
  myFile = SD.open("totali.txt", FILE_READ);
  if (myFile)
  { Serial.print("file aperto, leggo: ");
    char buffer [7]={0};
    for (byte i=0; myFile.available()&& i<6;i++)
    { char c=myFile.read();
      buffer [i]=c;
      Serial.print(c);
    }
    Serial.print('\n');
    sommapar=atoi (buffer);
    Serial.print("sommapar="); Serial.println(sommapar);
  }
  else
  { sommapar=0;
    Serial.println ("file non aperto, sommapar=0");
  }
  myFile.close();
my name is IGOR, not AIGOR

Standardoil

@standardoil,    l'utente ha scritto nel post successivi ....
però lo OP non ha mai risposto, hai dovuto farlo tu...
Inoltre solo la 'seconda' versione della mia funzione usa i puntatori, non la prima, che era scritta in chiaro e per esteso, la seconda era data come modifica successiva e opzionale
Come abbia fatto lo op a usare la seconda senza aver capito la prima supera la mia capacità di comprensione...
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

Federico66

#32
May 29, 2019, 10:45 am Last Edit: May 29, 2019, 10:55 am by Federico66
09:02:01.562 -> Totale = 70= valore della  variabile nel setup dopo il riavvio fino a qui tutto ok
09:02:14.767 -> PIN5
09:02:14.837 -> Totale = 5 = valore della variabile nel loop dopo che rileva un impulso nel for mi ricomincia da 0
Forse mi sono perso qualcosa con tutto sto codice, ma qui:

case BANCONOTA5:
            banconota5 = banconota5 + 5;
            sommapar =  banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
se non sommi il valore attuale di sommapar è normale che venga re-inizializzata a zero!
prova con:

Code: [Select]

sommapar =  sommapar + banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
//sommapar = 70+5+0+0+0+0 = 75



[edit]
mi spiego meglio:
dal disco stai leggendo sommapar e quando sei nel case devi sommare solo il nuovo valore alla somma parziale, quindi:


Code: [Select]

case BANCONOTA5:
            sommapar =  sommapar  + 5;




Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Standardoil

#33
May 29, 2019, 10:55 am Last Edit: May 29, 2019, 10:57 am by Standardoil
Però Silente non ha mica torto...
Da dove arrivano quelle scritte, se nel sorgente non ci sono?
 Vuoi vedere che oltre a non conoscere il 'c', a non rispondere alle domande, a non saper nemmeno copiare una funzione, lo OP nemmeno di rende conto di non essere mai riuscito a trasferire il programma?
Se così fosse ci tocca ripartire da capo...
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

Federico66

Da dove arrivano quelle scritte, se nel sorgente non ci sono?
Probabilmente una delle librerie (Blynk?) genera un log sulla seriale.
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

wingamesyun

#35
May 29, 2019, 01:35 pm Last Edit: May 29, 2019, 01:44 pm by WinGamesyun
prova per vedere se legge sulla sd

Code: [Select]
8972]
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.6.1 on MKR WiFi 1010

[8973] Connecting to blynk-cloud.com:8080
[9091] Ready (ping: 33ms).
Initializing SD card...
sd presente.
file aperto, leggo: 80
sommapar=80

ho fatto anche la prova sommapar = sommapar +5.....
non va.

nid69ita

#36
May 29, 2019, 02:52 pm Last Edit: May 29, 2019, 02:55 pm by nid69ita
ho fatto anche la prova sommapar = sommapar +5.....
non va.
Ma lo hai messo ovunque ??

Mo metti anche una benedetta   Serial.println(sommapar);    PRIMA di quel calcolo  sommapar=sommapar+..
my name is IGOR, not AIGOR

Federico66

non va.
Però devi imparare a circoscrivere il problema!!!
Quindi se vuoi venirne fuori devi fare delle verifiche puntuali, comincia a verificare il valore della variabile prima e dopo averla modificata, poi la salvi su sd e la rileggi immediatamente:

Code: [Select]

  case BANCONOTA5:

    Serial.print("sommapar PRE: ");
    Serial.println(sommapar);

    sommapar =  sommapar + 5;

    Serial.print("sommapar POST: ");
    Serial.println(sommapar);

    //ELIMINA FILE SE ESISTE
    if (SD.exists("test.txt")) {
      SD.remove("totali.txt");
    }   

    //SCRIVE FILE
    myFile = SD.open("totali.txt", FILE_WRITE);
    if (myFile) {
       myFile.println(sommapar);
       myFile.close();
       Serial.println("scrittura ok");
     } else {
       Serial.println("scrittura ko");
     }

     //LEGGE FILE
     //rileggi il file come hai fatto prima e stampa in serial
 


Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

wingamesyun

#38
May 29, 2019, 09:01 pm Last Edit: May 29, 2019, 09:05 pm by WinGamesyun
federico questa e il risultato del codice che ai postato.
Code: [Select]
loop15
loop15
PIN5
sommapar PRE: 5
sommapar POST: 10
scrittura ko
Totale = 10 = valore della variabile nel loop dopo che rileva un impulso nel for mi ricomincia da 0
loop110
loop110
loop110

funziona bene ma dopo un paio di impulsi si blocca arduino devo resettare e non mi salva il nuovo dato nel sd.

wingamesyun

#39
May 29, 2019, 09:11 pm Last Edit: May 29, 2019, 09:12 pm by WinGamesyun
Ho trovato l'errore nel codice consigliato

Code: [Select]

    //ELIMINA FILE SE ESISTE
    if (SD.exists("test.txt")) {    //era "totali.txt".......
      SD.remove("totali.txt");


ora si aggiona la variabile nella SD ma si blocca tutto dopo un paio di letture.

wingamesyun

#40
May 29, 2019, 09:42 pm Last Edit: May 29, 2019, 09:44 pm by WinGamesyun
Ho trovato un'altro errore nel codice , ora sembra che va bene .

Code: [Select]
    case BANCONOTA5:
            //Serial.print("sommapar PRE: ");
            //Serial.println(sommapar);
           // banconota5 = banconota5 + 5;
            //sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
            sommapar =  sommapar + 5;
            // Serial.print("sommapar POST: ");
           // Serial.println(sommapar);
               SD.begin();>>>>>>>>>>>>>>>mancava il collegamento con SD....
            //ELIMINA FILE SE ESISTE
            if (SD.exists("totali.txt")) {
              SD.remove("totali.txt");
            }

            //SCRIVE FILE
            myFile = SD.open("totali.txt", FILE_WRITE);
            if (myFile) {
              myFile.println(sommapar);
              myFile.close();
              //Serial.println("scrittura ok");
            } else {
              Serial.println("scrittura ko");
            }

            myFile1 = SD.open("totali1.txt", FILE_WRITE);


            if (myFile1) {

              myFile1.print( "INSERITA BANCONOTA DA  5 EURO SOMMA PARZIALE  =  ");
              myFile1.println(sommapar);
              myFile1.close();


             // Serial.println("salvata1");

            }

            else {
              Serial.println("error1.txt");
            }
                 Serial.println(" BANCONOTA 5");
            break;

faccio un pò di prove e vi aggiorno.

Standardoil

#41
May 29, 2019, 09:51 pm Last Edit: May 29, 2019, 09:52 pm by Standardoil
Ho trovato l'errore nel codice consigliato

cioe': tradotto in italiano: tu hai dovuto scriverlo, provarlo e scoprire che non andava per poi accorgerti che il nome del file era sbagliato?
ma lo leggi il codice oppure ti limiti a cliccare seleziona tutto - copia - incolla?
avviso ai naviganti: NON uscirtene con la foxxuta manfrina che devi imparare, devi imparare, quindi fallo!
Non presurrò più la buona fede di chi:
NON indenta, USA la classe String o NON esegue le ricerche
E di chi non risponde alle domande Tante volte è stato segnalato che è sbagliato, quindi NON sono in buona fede
Non bado a studenti, che copino altrove

wingamesyun

#42
May 29, 2019, 10:07 pm Last Edit: May 29, 2019, 10:10 pm by WinGamesyun
cioe': tradotto in italiano: tu hai dovuto scriverlo, provarlo e scoprire che non andava per poi accorgerti che il nome del file era sbagliato?
ma lo leggi il codice oppure ti limiti a cliccare seleziona tutto - copia - incolla?
avviso ai naviganti: NON uscirtene con la foxxuta manfrina che devi imparare, devi imparare, quindi fallo!
Non dire niente mi piace troppo  Ctrl+c  poi fai Ctrl+v è una goduria.... ;D

Federico66

Ho trovato un'altro errore nel codice
.. cut ..
SD.begin();>>>>>>>>>>>>>>>mancava
Adesso non riesco a controllare la documentazione, ma sono abbastanza sicuro che la begin inizializza la classe e quindi non serve utilizzarla tutte le volte che apri un file!
Quindi, anche se così funziona, vuol dire che l'errore sta da qualche altra parte!

Altro consiglio, onestamente quel codice è inguardabile e si fa fatica a leggerlo, quindi elimina tutte le inutili righe commentate, elimina tutte la parti superflue, ad esempio le variabili banconotaN, indenta correttamente e riprova il tutto.

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Federico66

... che il nome del file era sbagliato?
...
Come ho letto in qualche post, bisogna inserire qualche errore nel codice postato...  :)
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Go Up