Il codice è un po lungo , occupa l'80% della memoria di arduino . Posto la parte che interessa la scheda SD
Scheda SD 1GB formattata in fat32
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <SD.h>
LiquidCrystal_I2C lcd ( 0x27 , 16 , 2 ) ; // 0x27 è l'inidirizzo dello schermo
File myFile ;
void setup() {
Serial.begin ( 9600 ) ; // Inizializzo una comunicazione seriale ( Solo per test . Disabilitato a completamento programma )
SPI.begin() ; //Inizializzo la comunicazione SPI
lcd.init() ; // Inizializzo lo schermo LCD
lcd.backlight() ; // Accendo l'illuminazione del LCD
int error = 0 ; // Variabile errore
const int chipSelect = 10 ; // Pin SS per SD Card
// controllo se c'è la SD
if (!SD.begin(chipSelect)) { // Apro l'if di controllo presenza SD Card , se non è presente
lcd.clear () ;
lcd.print ( "Controllare o" );
lcd.setCursor ( 0 , 1 ) ;
lcd.print ( "inserire SD card" ) ;
return;
}
// Se la Card è presente
lcd.clear () ;
lcd.print ( " SD card" ) ;
lcd.setCursor ( 0, 1 ) ;
lcd.print ( " presente" ) ;
delay ( 2000 ) ;
// Controllo se esiste già il file sulla SD Card
if (SD.exists("ingressi.txt")) {
lcd.clear () ;
lcd.print ( " File" ) ;
lcd.setCursor ( 0 , 1 ) ;
lcd.print ( " presente" ) ;
}
else { // se non esiste
lcd.clear () ;
lcd.print ( " File non" ) ;
lcd.setCursor ( 0 , 1 ) ;
lcd.print ( " esistente" ) ;
delay ( 2000 ) ;
lcd.clear () ;
lcd.print ( " Creazione" ) ;
lcd.setCursor ( 0 , 1 ) ;
lcd.print ( " File " ) ;
myFile = SD.open("ingressi.txt", FILE_WRITE); // creo il file
myFile.close();
if (SD.exists("ingressi.txt")) { // Controllo se è stato creato
delay ( 2000 ) ;
lcd.clear () ;
lcd.print ( " File creato" ) ;
lcd.setCursor ( 0 , 1 ) ;
lcd.print ( " con successo" ) ;
}
}
}
Fino a qui tutto bene , se non c'è la carta lo dice , se c'è ma non c'è il file lo crea e fa il controllo .
Ora se subito sotto inserisco
myFile = SD.open ( "ingressi.txt" , FILE_WRITE ) ;
if (myFile) {
myFile.println ( " Ciao " ) ;
myFile.close();
}
Nel file viene scritto " Ciao "
Il problema sorge nella funzione che dovrebbe memorizzare i dati . Ho due stringhe conteneti un nome e cognome , es : cicco bello
Le variabili valNome/valCognome contengono il numero di caratteri che formano nome e cognome .
int valNome = 5 ;
int valCognome = 5 ;
char strNome [18] ; // Contiene Ciccio
char strCognome [18] ; // Contiene Bello
String FileNome = "" ;
String FileCognome = "" ;
int a ;
for ( a = 0 ; a < valNome - 1 ; a++ ) {
FileNome = FileNome + strNome[a] ;
}
for ( a = 0 ; a < valCognome - 1 ; a++ ) {
FileCognome=FileCognome + strCognome[a];
}
myFile = SD.open ( "ingressi.txt" , FILE_WRITE ) ;
if (myFile) {
myFile.println (FileNome) ;
myFile.close();
lcd.clear();
lcd.print( "Memorizzato");
delay(2000);
lcd.clear();
}
Serial.print(FileNome);
Serial.print(" ");
Serial.println (FileCognome);
In questo modo non appare la scritta " Memorizzato " e non viene scritto nulla nel file , però sul monitor seriale esce scritto Ciccio Bello .
Sembra come se myFile non venisse aperto per la scrittura
P.S. il codice di scrittura si trova in una function void memo ()