// ADAPT CODE FROM SD-ARRAY-MEGA
#include "SdFat.h"
#define SPI_SPEED SD_SCK_MHZ(4)
#define CS_PIN 10
SdFat SD;
void setup() {
Serial.begin(9600);
initCard();
//readFileTree();
//readText("wokwi.txt");
//readLines("data.txt");
// searchFile("data.txt","array1"); // seéarch for "array1" in "data.txt"
int arrSize = 12 ;
int currentArray[arrSize] ; // global var to handle selecyed / played mode / chords
extractArray(currentArray, arrSize, "chord_list.txt","C3"); // seéarch for "array1" in "data.txt", extract an array and display it
displayArray(currentArray, arrSize);
//writeJSONarray();
}
void loop() {
}
void initCard(){
Serial.print("Initializing SD card... ");
if (!SD.begin(CS_PIN)) {
Serial.println("Card initialization failed!");
while (true);
}
Serial.println("initialization done.\n");
}
void readFileTree(){
Serial.println("Files in the card:");
File root = SD.open("/");
printDirectory(root, 0); // see function above
Serial.println("");
root.close();
}
void readText(String myfile) {
// Example of reading file from the card:
File textFile = SD.open(myfile);
if (textFile) {
Serial.println("=> read whole file :");
Serial.print(myfile + " : ");
// loop over each line
while (textFile.available()) {
Serial.write(textFile.read());
}
Serial.println();
} else {
Serial.println("Error opening" + myfile );
}
textFile.close();
}
void readLines(String myfile){
File dataFile = SD.open(myfile);
if (dataFile) {
Serial.println("=> Read line by line :");
while (dataFile.available()) {
String line = dataFile.readStringUntil('\n');
Serial.println(line);
// line parsing
}
dataFile.close();
} else {
Serial.println("Error opening" + myfile );
}
}
void searchFile(String myfile, String occurence){
File dataFile = SD.open(myfile);
if (dataFile) {
bool found = false;
while (dataFile.available()) {
String line = dataFile.readStringUntil('\n');
if (line.indexOf(occurence) != -1) { // Si le nom est trouvé dans la ligne
Serial.print("Occurence trouvée: ");
Serial.println(line);
found = true;
break; // Sortir après avoir trouvé le tableau
}
}
if (!found) {
Serial.println("Occurence non trouvée !");
}
dataFile.close();
} else {
Serial.println("Erreur d'ouverture du fichier.");
}
}
void extractArray(int current[], int size, String myfile, String occurence){
File dataFile = SD.open(myfile);
if (dataFile) {
bool found = false;
while (dataFile.available()) {
String line = dataFile.readStringUntil('\n');
if (line.indexOf(occurence) != -1) { // Si le nom est trouvé dans la ligne
Serial.print("Occurence trouvée: ");
Serial.println(line);
// Extraire les valeurs après le nom du tableau
String values = line.substring(line.indexOf(":") + 1); // Extraire les valeurs après ":"
values.trim(); // Supprimer les espaces inutiles
values = removeSpaces(values); // supprimmer les espaces eventuels DANS la chaine
Serial.println(values);
// Créer un tableau pour stocker les valeurs
int arraySize = 0;
// Découper les valeurs séparées par des virgules
while (values.length() > 0) {
int commaIndex = values.indexOf(','); // Trouver l'indice de la prochaine virgule
if (commaIndex == -1) { // Si aucune virgule n'est trouvée, c'est la dernière valeur
commaIndex = values.length();
}
// Extraire la valeur
String valueStr = values.substring(0, commaIndex);
valueStr.trim(); // Supprimer les espaces inutiles
// Convertir la chaîne en entier et l'ajouter au tableau
current[arraySize] = valueStr.toInt();
arraySize++;
// Supprimer la valeur traitée
values = values.substring(commaIndex + 1);
}
found = true;
break; // Sortir après avoir trouvé le tableau
} // end of if occurence found
} // end of while
if (!found) {
Serial.println("Occurence non trouvée !");
}
dataFile.close();
} // end of if dataFile
else {
Serial.println("Erreur d'ouverture du fichier.");
}
} // end of fct
void printDirectory(File dir, int numTabs) {
while (true) {
File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print('\t');
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}
String removeSpaces(String input) {
String output = ""; // Chaîne de sortie sans espaces
for (int i = 0; i < input.length(); i++) {
if (input[i] != ' ') { // Si ce n'est pas un espace
output += input[i]; // Ajouter le caractère à la chaîne de sortie
}
}
return output;
}
void displayArray(int array[], int size){
// Afficher le tableau résultant
Serial.println();
Serial.print(" : { ");
for (int i = 0; i < size; i++) {
Serial.print(array[i]);
if (i < size - 1) {
Serial.print(", ");
}
}
Serial.println(" }");
}