/* Funzioni della classe String che saranno utilizzate:
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/indexof/
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/toint/
https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/substring/
*/
//SD vars
char myFile[] = {
"Riga per intestazione colonne\n"
"0,on,1,2,100,vuoto,vuoto,0,100,vuoto,3,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100\n"
"1,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100\n"
"2,fade in,2,5,80,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100,vuoto,vuoto,0,100\n"
};
// Struct con le caratteritiche del led
struct FadeLed {
char fadeTipe[10] = {"vuoto"}; // La stringa più lunga da memorizzare è "fade out"
int8_t pin = -1;
uint32_t fadeTime = 0;
uint8_t level = 0;
};
// Array di struct FadeLed da 7 elementi
FadeLed leds[7];
void printValues(FadeLed led) {
Serial.print(led.fadeTipe);
Serial.print(", ");
Serial.print(led.pin);
Serial.print(", ");
Serial.print(led.fadeTime);
Serial.print(", ");
Serial.println(led.level);
}
void getValues(int row) {
int numLine = -1;
String line; // Salvo nella String line una riga per volta del file (fino al ritorno a capo)
line.reserve(256);
for (int i = 0; i < strlen(myFile); i++) {
// while (myFile.available()) {
line += myFile[i];
// char fileChar = (char) myFile.read();
// line += fileChar;
if (myFile[i] == '\n') {
// if (fileChar != '\n') {
numLine++;
// Se è la riga che sto cercando:
if (numLine == row) {
int p1, p2;
// Popolo ciascun elemento di tipo FadeLed dell'array leds con i valori letti dal file
for ( int j = 0; j < 7; j++) {
// Tipo azione
p1 = line.indexOf(",", p2) + 1; // Cerchiamo la posizione del pimo carattere ','
p2 = line.indexOf(",", p1); // Cerchiamo la posizione del successivo
strcpy(leds[j].fadeTipe, line.substring(p1, p2).c_str());
// Numero del pin
p1 = line.indexOf(",", p2) + 1;
p2 = line.indexOf(",", p1);
int val = line.substring(p1, p2).toInt();
// Se è possibile convertire in intero, il pin è definito
if (val)
leds[j].pin = val;
// Tempo del fade
p1 = line.indexOf(",", p2) + 1;
p2 = line.indexOf(",", p1);
leds[j].fadeTime = line.substring(p1, p2).toInt() * 1000; // millisecondi
// Livello di uscita
p1 = line.indexOf(",", p2) + 1;
p2 = line.indexOf(",", p1);
leds[j].level = line.substring(p1, p2).toInt();
// Facciamo una stampa sul monitor per verificare i dati
Serial.print("Led "); Serial.print(j + 1); Serial.print(": ");
printValues(leds[j]);
}
// Abbiamo trovato la riga cercata, si può uscire dalla funzione
// myFile.close();
return;
}
// Pronti per valutare la prossima riga
line = "";
}
}
}
void setup() {
Serial.begin(9600);
Serial.println("Riga numero 1:");
getValues(1);
Serial.println("Riga numero 3:");
getValues(3);
}
void loop(void) {
}