Arduino Forum

International => Italiano => Generale => Topic started by: wingamesyun on May 25, 2019, 09:20 pm

Title: [RISOLTO]SD >richiamare una variabile int .
Post by: wingamesyun on May 25, 2019, 09:20 pm
Salve avrei un paio di domande:


1)Come posso richiamare una variabile salvata sulla SD quando riaccendo arduino mkr 1010 ?

2)Ho scritto bene il codice nel loop per salvare la variabile?
Code: [Select]
switch (pin[i])
        {
          case BANCONOTA5:
            banconota5 = banconota5 + 5;
            sommapar =  banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
           
            SD.begin();
            myFile = SD.open("totali.txt", FILE_WRITE);


            if (myFile) {
              myFile.println(sommapar);
              myFile.close();

              Serial.println(sommapar);
            }

            else {
              Serial.println("error.txt");
            }

            break;


Title: Re: SD >richiamare una variabile int .
Post by: Silente on May 26, 2019, 07:36 am
1) ti basta rileggere il pezzo di file che contiene in valore della variabile, caricarlo in una stringa e assegnare alla variabile il ritorno della funzione atoi() di quella stringa

2) ni, ovvero, il codice che hai scritto ha un senso e fa cose, ma quello che fa é scrivere sul file il valore, in cifre, della variabile, ma lo scrive alla fine del file. Ora, se non hai altre variabili salvate su quel file é perfetto, all'occorrenza hai anche lo storico dei valori, se ne hai ritrovare l'ultimo valore non é cosa semplice

Ah, non ho capito il Serial.println ("error.txt"), per come é scritto ti scrive quella scritta. Vuoi che ri scriva il contenuto del file error.txt? Devi lavorare in altro modo
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 26, 2019, 09:16 am
Buongiorno.
Cercherò di  essere più chiaro possibile nelle domande, come si vede dal mio codice parliamo di un contatore di impulsi, a me serve il salvataggio e lo  storico della variabile sul SD fin qua ci siamo, ma quando riparte dopo lo spegnimento vorrei che arduino mi vada a caricare l'ultimo valore della variabile per proseguire nel conteggio . 
Title: Re: SD >richiamare una variabile int .
Post by: gpb01 on May 26, 2019, 09:36 am
La cosa migliore è strutturare la scrittura in modo che OGNI salvataggio occupi esattamente lo stesso numero di bytes così da pter effettuare calcoli sulla posizione.

Ad esempio, se tu devi scrivere sempre degli "int", sai che essi occupano 2 bytes quindi, ad ogni salvataggio sulla SD, farai una scrittura con SD.write(&tuoInt, 2); ovvero scriverai, in binario (la cosa è comunque anche fattibile in ASCII con altri metodi) i 2 bytes del tuo "int".

Alla partenza del programma, per recuperare l'ultimo valore "int" scritto, ti basterà posizionarti alla fine del file, leggere la posizione corrente nel file (con la SD.position()), decrementare la posizione di DUE (la lunghezza di un "int"), posizionarsi su tale nuova posizione (con la SD.seek()) e leggere i DUE bytes che compongono il tuo ultimo "int".

Se invece che lavorare in binario vuoi lavorare in ASCII, devi solo considerare che un "int" va da -32768 a 32767 e che quindi devi fare in modo che OGNI salvataggio del valore occupi SEMPRE i 6 caratteri necessari (quindi, ad esempio, il valore 12 lo dovrai salvare come +00012 ed il valore -12 come -00012, così che siano sempre occupati 6 caratteri) e poi applicare la stessa logica di prima solo che lo spostamento per recuperare l'ultimo valore dovrà essere di 6 caratteri invece che di 2 bytes.

Guglielmo
Title: Re: SD >richiamare una variabile int .
Post by: Silente on May 26, 2019, 09:43 am
Ok, quindi il punto 2 ha per risposta "si". Ora il punto 1.
1) apri il file in lettura, il puntatore é alla posizione 0
2) riposizioni il puntatore alla posizione file.size()-2, DOVRESTI essere sull'ultima cifra del numero
3) torni indietro di 1 carattere alla volta fino a che trovi una cosa che NON é una cifra, sei prima dell'inizio dell'ultimo numero (non leggere con la read(), ma con la pick(), così non sposti avanti il punto di lettura ogni lettura)
4) vai avanti di 1 carattere, sei sulla prima cifra del numero
5) variabile=0
6) finché pick() una cifra
6.1)  variabile=variabile*10+(read()-'0')

Dovrebbe andare bene

Ps, il (Guglielmo.modestia==TRUE?m:g)od ha dato una risposta migliore
Title: Re: SD >richiamare una variabile int .
Post by: gpb01 on May 26, 2019, 09:52 am
>Silente: non ho capito il tuo punto 3 ... perché diavolo ti vuoi spostare di un byte e cosa cerchi? Se i bytes sono scritti in BINARIO, come ho scritto, sono tutte sequenze di 2 bytes, senza nulla in mezzo e non ci sono caratteri cifra o non cifra ... sei in BINARIO !!!

Guglielmo
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 26, 2019, 10:15 am
Sono un  principiante  per capire tutte le cose che mi suggerite di fare ma servirebbe un esempio ,
noi andiamo avanti modificando esempi di codice adattandoli  alle nostre esigenze ,proprio per questo arduino piace a tantissima persone .
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 26, 2019, 02:29 pm
Parli di int, ma un int al massimo accetta   -32768 a 32767  sicuro che basta ?

come già detto da Guglielmo:
Su un file puoi scrivere e accodare i valori in due modi, in formato binario, quindi un int è 2 byte
oppure scrivi in formato testo, ma qui c'e' il problema che 123 occupa 3 byte (anzi 3 char) mentre 12345 occupa 5 byte.

Il file lo puoi aprire su PC con un notepad, ma se formato testo lo leggi facile, se binario i valori sono scritti come nella memoria del micro (byte per byte)

Quindi prima di tutto devi decidere se formato testo o binario.
 Binario è più semplice da gestire perché un int ad esempio occupa sempre 2 byte

Per un file testo dovresti scrivere occupando sempre lo stesso numero di caratteri, lo si può fare
"formattando" il valore   con snprintf()    (ma non funziona con i float)
La snprintf()  converte il valore in testo, quindi devi avere un array di char che contenga il valore convertito.
Code: [Select]
  char buf[10];
  snprintf(buf,10,"%05d",sommapar);  // 123 => "00123"
  myFile.print(buf);
  myFile.print(' ');    // separatore      SCRIVIAMO QUINDI 6 byte per ogni valore  NO println!!
  myFile.close();


Lo stesso array lo puoi usare per poi leggere l'ultimo dato dal file. Le indicazioni sono quelle di Guglielmo per un file di testo al post#3
Ma fatta la scrittura, poi vediamo la lettura.
Title: Re: SD >richiamare una variabile int .
Post by: gpb01 on May 26, 2019, 04:54 pm
Nid, io questo:

Code: [Select]
snprintf(buf,10,"%05d",sommapar);  // 123 => "00123"
lo scriverei invece:

Code: [Select]
snprintf(buf,10,"%+06d",sommapar);  // 123 => "+00123"
così da non avere problemi tra segnati e non segnati ;)

Guglielmo
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 26, 2019, 06:56 pm
Salve, grazie ancora per tutti i consigli ma non riesco a leggere i vostri esempi, ho provato a

modificare il mio  così nel loop per salvare solo l'ultima scritte così è più gestibile.. almeno credo,
 
il file viene cancellato e riscritto solo l ultimo valore ma comunque non riesco a richiamarlo al momento
 
di ripartenza di arduino .

Code: [Select]
  switch (pin[i])
        {
          case BANCONOTA5:
            banconota5 = banconota5 + 5;
            sommapar =  banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            SD.begin();
            SD.remove("totali.txt");
            myFile = SD.open("totali.txt", FILE_WRITE);


            if (myFile) {

              myFile.print(sommapar);
              myFile.close();

              Serial.println(sommapar);
              Serial.println("salvata");
              delay(50);
            }

            else {
              Serial.println("error.txt");
            }

            break;
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 27, 2019, 09:00 am
il file viene cancellato e riscritto solo l ultimo valore ma comunque non riesco a richiamarlo al momento
di ripartenza di arduino .
La lettura alla partenza la devi fare nel setup()
Se esiste il file, lo apri in lettura.  Poi leggi in un array di char e lo converti con atoi()
Logicamente leggi il primo valore, dici che c'e' solo 1 valore ora (ma la FILE_WRITE accoda)

Code: [Select]
char buf[20];
int i=0;
while (myFile.available()) {
 buf[i]=myFile.read();
 i++;
 if(i>=19) break;
}
buf[i]='\0';

valore=atoi(buf);


Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 27, 2019, 01:55 pm
Buongiorno,
ho fatto un copia e incolla nel setup modificando solo la variabile..sembra che
ci sia una parentesi in più mi da questo errore .

apr21a_POSTA_PORTA:89:27: error: expected ';' before ')' token

     buf = myFile.read());

Togliendo  una parentesi dopo il read mi fa compilare il codice
ma comunque non mi aggiorna la variabile    >sommapar<
ho ricontrollato il file txt si aggiorna sempre con il nuovo valore cancellando il vecchio .

 
Code: [Select]
char buf[20];
  int i = 0;
  while (myFile.available()) {
    buf[i] = myFile.read());
    i++;
    if (i >= 19) break;
  }
  buf[i] = '\0';
  sommapar = atoi(buf);
  Serial.println(sommapar);

Ho anche aggiunto  myFile.close();
Title: Re: SD >richiamare una variabile int .
Post by: gpb01 on May 27, 2019, 02:19 pm
... magari se riportassi sempre il codice completo invece che dei pezzi, sarebbe più facile capire il perché!

Guglielmo
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 27, 2019, 02:25 pm
Eccolo  :o

Code: [Select]
[code]
#include <SD.h>
#include <RTClib.h>
#include <Wire.h>
RTC_DS1307 rtc;
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27);
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
WidgetRTC blynk_rtc;
char auth[] = "";
char ssid[] = "Vodafone";
char pass[] = "xxxx";
char server[] = "blynk-cloud.com";
int port = 8080;
WidgetLCD blynk_lcd(V31);
WidgetLCD blynk1_lcd(V10);

BlynkTimer timer;
#define PORTA         1
#define POSTA         2
#define RESET         3
#define BANCONOTA5    5
#define BANCONOTA10   6
#define BANCONOTA20   7
#define BANCONOTA50   8
#define BANCONOTA100  10


int key[8] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH,};
int pin[8] = {BANCONOTA5, BANCONOTA10, BANCONOTA20, BANCONOTA50, BANCONOTA100, PORTA, POSTA, RESET,};
int  banconota5  = 0;
int  banconota10  = 0;
int  banconota20  = 0;
int  banconota50  = 0;
int  banconota100  = 0;
//int posta = 1;
int porta =  1;
int  sommapar =  0;

String postas = String (postas);
String posta = String ("VUOTO");
String posta1 = String ("PIENO");
File myFile;
File myFile1;
void setup()
{


  WiFi.begin(ssid, pass);
  Blynk.config(auth, server, port);

  Blynk.connect();
  Serial.begin(9600);

  // Blynk.email("dellipaolmail.com", "CAMBIA MARIO", "acceso e connesso.");
  timer.setInterval(90000L, leggidati );
  timer.setInterval(300000L, leggidati1 );

  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("SD non presente");
    lcd.begin(16, 2);
    lcd.setBacklight(255);
    lcd.home(); lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print(">V1.0<SD>KO ");
    lcd.setCursor(0, 1);
    lcd.print("SD NON PRESENTE");

    while (1);
  }
  Serial.println("sd presente.");
  lcd.begin(16, 2);
  lcd.setBacklight(255);
  lcd.home(); lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print("SD > OK ");
  lcd.setCursor(2, 1);
  lcd.print("ATTENDERE>V1.0");
  delay(3000);

  char buf[20];
  int i = 0;
  while (myFile.available()) {
    buf[i] = myFile.read());
    i++;
    if (i >= 19) break;
  }
buf[i] = '\0';
  sommapar = atoi(buf);
  Serial.println(sommapar);

  Wire.begin();
  Wire.beginTransmission(0x27);

  lcd.begin(16, 2);
  lcd.setBacklight(255);
  lcd.home(); lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("WIN GAMES");
  lcd.setCursor(0, 1);
  lcd.print("TOTALI");
  delay(1000);
  blynk1_lcd.clear();
  blynk1_lcd.print(0, 0, postas );
  blynk1_lcd.print(0, 1, "HOPPER,1" );


  blynk_lcd.clear();
  blynk_lcd.print(4, 0, sommapar );
  blynk_lcd.print(4, 1, " TOTALI ");


  for (int i = 0; i < 8 ; i++)

    pinMode(pin[i], INPUT_PULLUP);


}

void loop()
{

  int k;

  for (int i = 0; i < 8 ; i++)
  {
    k = digitalRead(pin[i]);
    if ( key[i] != k )
    {
      if ( key[i] == HIGH && k == LOW )
      {
        Serial.print("PIN");
        Serial.println(pin[i]);

        switch (pin[i])
        {
          case BANCONOTA5:
            banconota5 = banconota5 + 5;
            sommapar =  banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            SD.begin();
            SD.remove("totali.txt");
            myFile = SD.open("totali.txt", FILE_WRITE);


            if (myFile) {

              myFile.print(sommapar);
              myFile.close();


              Serial.println("salvata");

            }

            else {
              Serial.println("error.txt");
            }
            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");
            }
            break;

          case BANCONOTA10:
            banconota10 = banconota10 + 10;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            Serial.println(" BANCONOTA 10");
            break;
          case BANCONOTA20:
            banconota20 = banconota20 + 20;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
            Serial.println(" BANCONOTA 20");
            break;
          case BANCONOTA50:
            banconota50 = banconota50 + 50;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
            Serial.println(" BANCONOTA 50");
            break;
          case BANCONOTA100:
            banconota100 = banconota100 + 100;

            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            Serial.println(" BANCONOTA 100");
            break;
          case POSTA:
            // Blynk.email("dellipaolil.com", "CAMBIO MARIO", "VUOTO");
            postas = posta;
            blynk1_lcd.print(0, 0, postas );
            Serial.println(" POSTA");
            break;
          case PORTA:
            Blynk.notify("ATTENZIONE PORTA APERTA ");
            // Blynk.email("dellip@gmail.com", "CAMBIO MARIO", " CAMBIA MONETE \n ATTENZIONE PORTA APERTA ");
            //blynk1_lcd.print(0, 0,stato );
            Serial.println(" PORTA APERTA ");
            break;
          case RESET:
            banconota5   = 0;
            banconota10  = 0;
            banconota20  = 0;
            banconota50  = 0;
            banconota100 = 0;
            sommapar     = 0;
            postas       = posta1 ;
            Serial.println(" AZZERAMENTO TOTALI");

            blynk_lcd.clear();
            blynk1_lcd.clear();
            lcd.home(); lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("TOTALI");
            lcd.setCursor(1, 0);
            lcd.print("AZZERAMENTO");
            delay(3000);
            lcd.home(); lcd.clear();
            lcd.setCursor(1, 0);
            lcd.print("WIN GAMES");
            lcd.setCursor(0, 1);
            lcd.print("TOTALI");
            break;
        }

        Serial.print("Totale = ");
        Serial.println(sommapar);
        blynk_lcd.print(4, 0, sommapar );
        blynk_lcd.print(4, 1, " TOTALI ");
        blynk1_lcd.print(0, 0, postas );
        blynk1_lcd.print(0, 1, "HOPPER,1" );

      }
      key[i] = k;
    }

    lcd.setCursor(8, 1);
    lcd.print(sommapar);
  }
  if (Blynk.connected()) {
    Blynk.run();
    lcd.setCursor(11, 0);
    lcd.print("CONN");
    lcd.setCursor(11, 0);
  }
  else {
   // Blynk.disconnect();
    lcd.setCursor(11, 0);
    lcd.print("DISC");
  }
  Blynk.run();
  timer.run();
}
void leggidati() {
  if (Blynk.connected()) {
    WiFi.begin(ssid, pass);
  Blynk.config(auth, server, port);
    Blynk.connect();

}
else{
  Blynk.connect();
  Serial.println(sommapar);
  blynk_lcd.print(4, 0, sommapar );
}
}
void leggidati1() {
  if (Blynk.connected()) {
    Serial.println("connesso");
  }
  else {
    Serial.println("no connesso");
  }
}
[/code]
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 27, 2019, 03:02 pm
1. La parentesi doppia è un mio errore di battitura (codice non provato, scritto di getto)   Togli la doppia
2. ti ho scritto quel pezzo di codice che legge ma ti ho scritto che nella setup() devi PRIMA aprire il file in lettura e verificare se esiste.   Se non fai open del file in FILE_READ quel pezzo non funziona.

Quindi quel pezzo di codice deve essere dentro a
Code: [Select]
myFile = SD.open("totali.txt", FILE_READ);
if (myFile)
{ // pezzo di lettura file
}
else
{ sommapar=0;
}
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 27, 2019, 08:32 pm
Buona sera ,
modificato come consigliato purtroppo non va .
 

Code: [Select]
[code]
  myFile = SD.open("totali.txt", FILE_READ);
  if (myFile)
  { // pezzo di lettura file
    char buf[20];
    int i = 0;
    while (myFile.available()) {
      buf[i] = myFile.read();
      i++;
      if (i >= 19) break;
    }
    buf[i] = '\0';
  }
  else {
    sommapar = 0;
  }

[/code]
Ma non devo chiudere il file?
 :smiley-confuse:
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 27, 2019, 09:48 pm
Facendo un pò di prove mi sono accorto che avevamo saltato una riga di codice,
ora funziona ma è comparso un 'altro problema...
la variabile viene richiamata e scritta ma il contatore riparte da zero e come se non riconoscesse il valore reale
della variabile.  
Codice funzionante.
Code: [Select]
myFile = SD.open("totali.txt", FILE_READ);
  if (myFile)
  { // pezzo di lettura file
    char buf[20];
    int i = 0;
    while (myFile.available()) {
      buf[i] = myFile.read();
      i++;
      if (i >= 19) break;
    }
    buf[i] = '\0';
    sommapar = atoi(buf);// il pezzo mancante...
  }

  else {
    sommapar = 0;
  }
Title: Re: SD >richiamare una variabile int .
Post by: Silente on May 28, 2019, 07:56 am
Piccola riscrittura del codice al volo, vedi se cibsi capisce qualcosa di iù sul problema
Code: [Select]

myfile=SD.open ("totali.txt, FILE_READ);
if (myfile)
for (char buffer [7]={0}, byte i=0;myfile.available()&&i<6;i++)
{
char c=myfile.read();
buffer [i]=c;
Serial.print (c);
sommapar=atoi (buffer);
}
else
{
sommapar=0;
Serial.println ("file non aperto ");
}
Serial.println (sommapar);
myfile.close();

Corretta dimenricanza, sei un grande
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 28, 2019, 02:32 pm
Facendo un pò di prove mi sono accorto che avevamo saltato una riga di codice,
ora funziona ma è comparso un 'altro problema...
la variabile viene richiamata e scritta ma il contatore riparte da zero e come se non riconoscesse il valore reale
della variabile.  
Ma questo pezzo è nel setup() ?   (posta sempre tutto)
Si il file devi chiuderlo.
Metti un pò di serial.println   per sapere se ha letto, e se ha letto buf
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 28, 2019, 07:43 pm
boh, vi seguo da un po', ma non ho capito una cosa
la veriabile viene salvata una volta sola, ovvero: nel file esiste una sola copia della variabile, oppure il file sarà pieno di righe, dove solo l'ultima è aggiornata?
comunque, senza perdersi tanto in conteggi e righe e fine stringa e atoi e compagnia bella
Code: [Select]

int leggidafile(char * filename)
{
    // così possiamo anche scegliere che file usare
    int locale = 0;
    myFile = SD.open(filename, FILE_READ);

    if (myFile)
    {
        while (myFile.available())
        {
            char cx = myFile.read();

            if ((cx == '\r') || (cx == '\n'))
            {
                // fine riga windows o linux
                if (myFile.available() > 2)
                {
                    // esclude il caso di ultimo ritorno a capo
                    locale = 0;
                    // nuova riga? allora nuovo valore
                    break;
                }

                locale = locale * 10 + cx - '0';
                // ogni nuova cifra sposta a sinistra di un posto e si aggiunge
            }
        }

        myfile.close();
    }
    else
    {
        // Errore di apertura file
    }
    return locale;
}

semplice, rapida, parametrica e funziona anche se per caso ci fossero più righe consecutive e valesse solo l'ultima
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 28, 2019, 07:49 pm
volendo cambianto la dichiarazione
Code: [Select]

int leggidafile(char * filename, int * variabile)

e aggiungendo una riga in fondo
Code: [Select]

.
.
.
    *variabile=locale;
    return locale;

posso anche leggere la variabile senza assegnarla esplicitamente
Code: [Select]

leggidafile("nome.txt", &sommamonete);

Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 28, 2019, 09:24 pm
Buona sera sono appena ritornato a casa ho caricato il pezzo di codice consigliato da Silente
mi da questo errore.

Code: [Select]
[code]
myFile=SD.open ("totali.txt", FILE_READ);
if (myFile)
for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore
{
char c=myFile.read();
buffer [i]=c;
Serial.print (c);
sommapar=atoi (buffer);
}
else
{
sommapar=0;
Serial.println ("file non aperto ");
}
Serial.println (sommapar);
myFile.close();

[/code]
Arduino:1.8.9 (Windows 10), Scheda:"Arduino MKR WiFi 1010"

C:\Users\Utente\Documents\Arduino\apr21a_POSTA_PORTA\apr21a_POSTA_PORTA.ino: In function 'void setup()':

apr21a_POSTA_PORTA:90:32: error: expected initializer before 'i'

 for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore

                                ^

apr21a_POSTA_PORTA:90:32: error: expected ';' before 'i'

apr21a_POSTA_PORTA:90:32: error: 'i' was not declared in this scope

apr21a_POSTA_PORTA:90:59: error: expected ')' before ';' token

 for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore

                                                           ^

apr21a_POSTA_PORTA:90:60: error: 'i' was not declared in this scope

 for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore

                                                            ^

apr21a_POSTA_PORTA:90:63: error: expected ';' before ')' token

 for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore

                                                               ^

apr21a_POSTA_PORTA:97:1: error: 'else' without a previous 'if'

 else

 ^

Più di una libreria trovata per "BlynkSimpleWiFiNINA.h"
Usata: C:\Users\Utente\Documents\Arduino\libraries\Blynk
Non usata: C:\Users\Utente\Documents\Arduino\libraries\Blynk_For_Chinese
exit status 1
expected initializer before 'i'

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 28, 2019, 09:55 pm
Buona sera sono appena ritornato a casa ho caricato il pezzo di codice consigliato da Silente
mi da questo errore.
.
.
.
apr21a_POSTA_PORTA:90:32: error: expected initializer before 'i'

 for (char buffer [7]={0}, byte i=0;myFile.available()&&i<6;i++)  //su questa riga mi da un errore

sembrerebbe un tentativo di inizializzare un array assieme all'inizializzazione della variabile di controllo del for
non mi sembra difficile provare a estrarre l'inizializzazione dell'array fuori (prima) del for
e vedere che cosa accade
stando alla presenza dell'operatore virgola dovrebbe andare comunque
ma forse l'operatore virgola non si puo' usare in quel punto di un for, mai provato
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 28, 2019, 10:10 pm
modificato ora funziona ma continuo ad avere sempre lo stesso problema di prima.

Code: [Select]
[code]
#include <SD.h>
#include <RTClib.h>
#include <Wire.h>
RTC_DS1307 rtc;
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27);
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <WiFiNINA.h>
#include <BlynkSimpleWiFiNINA.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
WidgetRTC blynk_rtc;
char auth[] = "4";
char ssid[] = "Voda471";
char pass[] = "No5";
char server[] = "blynk-cloud.com";
int port = 8080;
WidgetLCD blynk_lcd(V31);
WidgetLCD blynk1_lcd(V10);

BlynkTimer timer;
#define PORTA         1
#define POSTA         2
#define RESET         3
#define BANCONOTA5    5
#define BANCONOTA10   6
#define BANCONOTA20   7
#define BANCONOTA50   8
#define BANCONOTA100  10


int key[8] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH,};
int pin[8] = {BANCONOTA5, BANCONOTA10, BANCONOTA20, BANCONOTA50, BANCONOTA100, PORTA, POSTA, RESET,};
int  banconota5  = 0;
int  banconota10  = 0;
int  banconota20  = 0;
int  banconota50  = 0;
int  banconota100  = 0;
//int posta = 1;
int porta =  1;
int  sommapar = 0;


String postas = String (postas);
String posta = String ("VUOTO");
String posta1 = String ("PIENO");
File myFile;
File myFile1;
void setup()
{


  WiFi.begin(ssid, pass);
  Blynk.config(auth, server, port);

  Blynk.connect();
  Serial.begin(9600);

  // Blynk.email("dellipaoli.enzo01@gmail.com", "CAMBIA MARIO", "acceso e connesso.");
  timer.setInterval(90000L, leggidati );
  timer.setInterval(300000L, leggidati1 );

  Serial.println("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("SD non presente");
    lcd.begin(16, 2);
    lcd.setBacklight(255);
    lcd.home(); lcd.clear();
    lcd.setCursor(2, 0);
    lcd.print(">V1.0<SD>KO ");
    lcd.setCursor(0, 1);
    lcd.print("SD NON PRESENTE");

    while (1);
  }
  Serial.println("sd presente.");
  lcd.begin(16, 2);
  lcd.setBacklight(255);
  lcd.home(); lcd.clear();
  lcd.setCursor(4, 0);
  lcd.print("SD > OK ");
  lcd.setCursor(2, 1);
  lcd.print("ATTENDERE>V1.0");
  delay(3000);



   byte i=0;
     myFile = SD.open ("totali.txt", FILE_READ);
    if (myFile)
     for (char buffer [7]={0}; myFile.available()&& i<6;i++)
    {
      char c=myFile.read();
     buffer [i]=c;
      Serial.print (c);
     sommapar=atoi (buffer);
     }
     else
   {
     sommapar=0;
    Serial.println ("file non aperto ");
   }
    Serial.println (sommapar);
    myFile.close();


  Wire.begin();
  Wire.beginTransmission(0x27);

  lcd.begin(16, 2);
  lcd.setBacklight(255);
  lcd.home(); lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("WIN GAMES");
  lcd.setCursor(0, 1);
  lcd.print("TOTALI");
  delay(1000);
  blynk1_lcd.clear();
  blynk1_lcd.print(0, 0, postas );
  blynk1_lcd.print(0, 1, "HOPPER,1" );


  blynk_lcd.clear();
  blynk_lcd.print(4, 0, sommapar );
  blynk_lcd.print(4, 1, " TOTALI ");


  for (int i = 0; i < 8 ; i++)

    pinMode(pin[i], INPUT_PULLUP);


}

void loop()
{

  int k;

  for (int i = 0; i < 8 ; i++)
  {
    k = digitalRead(pin[i]);
    if ( key[i] != k )
    {
      if ( key[i] == HIGH && k == LOW )
      {
        Serial.print("PIN");
        Serial.println(pin[i]);

        switch (pin[i])
        {
          case BANCONOTA5:
            banconota5 = banconota5 + 5;
            sommapar =  banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            SD.begin();
            SD.remove("totali.txt");
            myFile = SD.open("totali.txt", FILE_WRITE);


            if (myFile) {

              myFile.print(sommapar);
              myFile.close();


              Serial.println("salvata");

            }

            else {
              Serial.println("error.txt");
            }
            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");
            }
            break;

          case BANCONOTA10:
            banconota10 = banconota10 + 10;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            Serial.println(" BANCONOTA 10");
            break;
          case BANCONOTA20:
            banconota20 = banconota20 + 20;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
            Serial.println(" BANCONOTA 20");
            break;
          case BANCONOTA50:
            banconota50 = banconota50 + 50;
            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;
            Serial.println(" BANCONOTA 50");
            break;
          case BANCONOTA100:
            banconota100 = banconota100 + 100;

            sommapar = banconota5 +  banconota10 + banconota20 + banconota50 + banconota100;

            Serial.println(" BANCONOTA 100");
            break;
          case POSTA:
            // Blynk.email("dellipaoli.enzo01@gmail.com", "CAMBIO MARIO", "VUOTO");
            postas = posta;
            blynk1_lcd.print(0, 0, postas );
            Serial.println(" POSTA");
            break;
          case PORTA:
            Blynk.notify("ATTENZIONE PORTA APERTA ");
            // Blynk.email("dellipaoli.enzo01@gmail.com", "CAMBIO MARIO", " CAMBIA MONETE \n ATTENZIONE PORTA APERTA ");
            //blynk1_lcd.print(0, 0,stato );
            Serial.println(" PORTA APERTA ");
            break;
          case RESET:
            banconota5   = 0;
            banconota10  = 0;
            banconota20  = 0;
            banconota50  = 0;
            banconota100 = 0;
            sommapar     = 0;
            postas       = posta1 ;
            Serial.println(" AZZERAMENTO TOTALI");

            blynk_lcd.clear();
            blynk1_lcd.clear();
            lcd.home(); lcd.clear();
            lcd.setCursor(0, 1);
            lcd.print("TOTALI");
            lcd.setCursor(1, 0);
            lcd.print("AZZERAMENTO");
            delay(3000);
            lcd.home(); lcd.clear();
            lcd.setCursor(1, 0);
            lcd.print("WIN GAMES");
            lcd.setCursor(0, 1);
            lcd.print("TOTALI");
            break;
        }

        Serial.print("Totale = ");
        Serial.println(sommapar);
        blynk_lcd.print(4, 0, sommapar );
        blynk_lcd.print(4, 1, " TOTALI ");
        blynk1_lcd.print(0, 0, postas );
        blynk1_lcd.print(0, 1, "HOPPER,1" );

      }
      key[i] = k;
    }

    lcd.setCursor(8, 1);
    lcd.print(sommapar);
  }
  if (Blynk.connected()) {
    Blynk.run();
    lcd.setCursor(11, 0);
    lcd.print("CONN");
    lcd.setCursor(11, 0);
  }
  else {
    // Blynk.disconnect();
    lcd.setCursor(11, 0);
    lcd.print("DISC");
  }
  Blynk.run();
  timer.run();
}
void leggidati() {
  if (!Blynk.connected()) {
    WiFi.begin(ssid, pass);
    Blynk.config(auth, server, port);
    Blynk.connect();

  }
  else {

    Serial.println(sommapar);
    blynk_lcd.print(4, 0, sommapar );
  }
}
void leggidati1() {
  if (Blynk.connected()) {
    Serial.println("connesso");
  }
  else {
    Serial.println("no connesso");
  }
}
[/code]
la variabile viene richiamata e scritta ma il contatore riparte da zero e come se non riconoscesse il valore reale
della variabile. 
Ora sto provando anche l'altro codice di <Standardoil  >
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 28, 2019, 10:32 pm
provando con l'altro codice mi da errore alla prima riga.

Code: [Select]
int leggidafile("totali.txt", & sommapar);//su questa riga mi da errore..........
{
    // così possiamo anche scegliere che file usare
    int sommapar = 0;
    myFile = SD.open("totali,txt", FILE_READ);

    if (myFile)
    {
        while (myFile.available())
        {
            char cx = myFile.read();
       
            if ((cx == '\r') || (cx == '\n'))
            {
                // fine riga windows o linux
                if (myFile.available() > 2)
                {
                    // esclude il caso di ultimo ritorno a capo
                   sommapar = 0;
                    // nuova riga? allora nuovo valore
                    break;
                }

                sommapar = sommapar * 10 + cx - '0';
                // ogni nuova cifra sposta a sinistra di un posto e si aggiunge
            }
        }

        myFile.close();
    }
    else
    {
        // Errore di apertura file
    }
    return sommapar;
}
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 29, 2019, 07:05 am
eppurtroppo un minimo di 'C' occorre conoscerlo............
Title: Re: SD >richiamare una variabile int .
Post by: Silente on May 29, 2019, 07:19 am
Con il mio codive (che non sapevo non funzionasse) é ovvio che hai lo syesso problema, in quanto non sappiamo ancora da cosa sia causato. Hai però qualche scrittura su seriale in più, che ci può aiutare a capire appunto questo. Apri il monitor seriale e mostra cosa dice
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 09:05 am
Buongiorno,allego il risultato della serial.

Credo che il problema stia nel loop a questo punto.

Code: [Select]
09:01:58.132 -> [8971]
09:01:58.132 ->     ___  __          __
09:01:58.132 ->    / _ )/ /_ _____  / /__
09:01:58.132 ->   / _  / / // / _ \/  '_/
09:01:58.132 ->  /____/_/\_, /_//_/_/\_\
09:01:58.132 ->         /___/ v0.6.1 on MKR WiFi 1010
09:01:58.132 ->
09:01:58.132 -> [8972] Connecting to blynk-cloud.com:8080
09:01:58.237 -> [9077] Ready (ping: 34ms).
09:01:58.307 -> Initializing SD card...
09:01:58.447 -> sd presente.
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
Title: Re: SD >richiamare una variabile int .
Post by: Silente on May 29, 2019, 09:59 am
Non si vede nulla di quello che scrive la mia parte di codice. Mi interessava sapere se:
1) riusciva ad aprire il file
2) cosa leggeva nel file eventualmente aperto

Quewte informazioni nonnsi leggono, ma compaiono molte informazioni non chiare (cosa sono tutte quelle /?)
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 29, 2019, 10:19 am
@standardoil,    l'utente ha scritto nel post successivi che il file viene eliminato prima di scriverlo quindi c'e' sempre un solo valore dentro.
L'utente scrive che è un principiante, fare una funzione con puntatori mi pare azzardato per il livello di @WinGamesyun
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 29, 2019, 10:24 am
@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();
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 29, 2019, 10:30 am
@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...
Title: Re: SD >richiamare una variabile int .
Post by: Federico66 on May 29, 2019, 10:45 am
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
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 29, 2019, 10:55 am
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...
Title: Re: SD >richiamare una variabile int .
Post by: Federico66 on May 29, 2019, 11:17 am
Da dove arrivano quelle scritte, se nel sorgente non ci sono?
Probabilmente una delle librerie (Blynk?) genera un log sulla seriale.
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 01:35 pm
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.
Title: Re: SD >richiamare una variabile int .
Post by: nid69ita on May 29, 2019, 02:52 pm
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+..
Title: Re: SD >richiamare una variabile int .
Post by: Federico66 on May 29, 2019, 02:59 pm
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
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 09:01 pm
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.
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 09:11 pm
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.
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 09:42 pm
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.
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 29, 2019, 09:51 pm
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!
Title: Re: SD >richiamare una variabile int .
Post by: wingamesyun on May 29, 2019, 10:07 pm
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
Title: Re: SD >richiamare una variabile int .
Post by: Federico66 on May 29, 2019, 11:04 pm
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
Title: Re: SD >richiamare una variabile int .
Post by: Federico66 on May 29, 2019, 11:11 pm
... che il nome del file era sbagliato?
...
Come ho letto in qualche post, bisogna inserire qualche errore nel codice postato...  :)
Title: Re: SD >richiamare una variabile int .
Post by: Standardoil on May 30, 2019, 07:10 am
beh, certo.
discrimina tra persone che capiscono e copiincollisti...
adesso sappiamo.... e io ho tratto conclusioni...
Title: Re: [RISOLTO]SD >richiamare una variabile int .
Post by: wingamesyun on May 31, 2019, 02:28 pm
salve ora posterò il risultato funzionante .
cercherò di spiegare la funzione del codice .

Salvare una variabile di un numero intero sulla SD e riposizionarla   di nuovo al riavvio. 
Code: [Select]
[code]
void setup() {
  myFile = SD.open("totali.txt", FILE_READ);
  if (myFile)
 
    char buffer [7] = {0};
    for (byte i = 0; myFile.available() && i < 6; i++)
    { char c = myFile.read();
      buffer [i] = c;
     
    }
   
    sommapar = atoi (buffer);
   
  }
  else
  { sommapar = 0;
   
  }
  myFile.close();
}

void loop() {
   SD.begin();

            if (SD.exists("totali.txt")) {
              SD.remove("totali.txt");
            }


            myFile = SD.open("totali.txt", FILE_WRITE);
            if (myFile) {
              myFile.println(sommapar);
              myFile.close();

}
[/code]
Grazie ancora a chi mi ha dato una mano a risolvere i problemi con il codice.  ;D
Title: Re: [RISOLTO]SD >richiamare una variabile int .
Post by: maubarzi on May 31, 2019, 02:39 pm
Mi sa che manca qualche piccolo pezzettino perchè sia effettivamente funzionante, a parte la doppietta sui tag "code" ;)
Title: Re: [RISOLTO]SD >richiamare una variabile int .
Post by: Federico66 on May 31, 2019, 03:10 pm
Evidentemente hai cancellato delle righe a caso, perchè quel codice cosi com'è non ha molto senso ;)
inoltre, come ti ho già detto, la SD.begin([pin]) va solo nel setup e non ripetuta nel loop ogni volta che leggi e scrivi.

Federico
Title: Re: [RISOLTO]SD >richiamare una variabile int .
Post by: wingamesyun on Jun 01, 2019, 02:55 pm
Questo e il codice funzionante .