[RISOLTO]SD >richiamare una variabile int .

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 .

  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;

WinGamesyun:
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)

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

valore=atoi(buf);

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 .

```

  • 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();

... magari se riportassi sempre il codice completo invece che dei pezzi, sarebbe più facile capire il perché!

Guglielmo

Eccolo :o

[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]

  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

myFile = SD.open("totali.txt", FILE_READ);
if (myFile) 
{ // pezzo di lettura file
}
else
{ sommapar=0;
}

Buona sera ,
modificato come consigliato purtroppo non va .

[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?
:confused:

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.

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;
  }

Piccola riscrittura del codice al volo, vedi se cibsi capisce qualcosa di iù sul problema

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

WinGamesyun:
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

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

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

volendo cambianto la dichiarazione

int leggidafile(char * filename, int * variabile)

e aggiungendo una riga in fondo

.
.
.
    *variabile=locale;
    return locale;

posso anche leggere la variabile senza assegnarla esplicitamente

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

Buona sera sono appena ritornato a casa ho caricato il pezzo di codice consigliato da Silente
mi da questo errore.

[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"

WinGamesyun:
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

modificato ora funziona ma continuo ad avere sempre lo stesso problema di prima.

[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

provando con l'altro codice mi da errore alla prima riga.

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;
}

eppurtroppo un minimo di 'C' occorre conoscerlo............

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

Buongiorno,allego il risultato della serial.

Credo che il problema stia nel loop a questo punto.

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

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 /?)