carte SD lecture/ écriture

x:111
y:222
z:333
xfl:222.25
yfl:123.65
zfl:445.12
abc:988

effectivement c est ça,
je veux ouvrir mon fichier txt et par exemple donner à x la valeur de la 5 iem ligne
ce qui donnera x dorénavant = 126.65

Le fichier que je vous ai envoyé contient bien de passage à la ligne mais votre PC ne les voit pas mais l’Arduino lui les reconnaît

Rebonsoir malox56

malox56:
ce qui donnera x dorénavant = 126.65

Ça se passe dans float dataFileGetIndexValue(int lineIndex)

#include <SPI.h>                                           // Interface pour carte SD
#include <SD.h>
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#define sdCardCsPin  9                                      // Chip Select du lecteur de carte SD à adapter
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
String logFileName = "";                                   // Nom du fichier d'enregistrement (Texte)
char logSdFileName[13];                                    //                     ""          (char)

int x, y, z;
float xfl, yfl, zfl;

void setup()
{
	Serial.begin(115200);

	delay(500);
	//------------------------------------- Demarrage carte SD
	Serial.println("Initialisation carte SD...");          
	if (!SD.begin(sdCardCsPin))                                      // Si la carte SD ne repond pas
	{
		Serial.println("Carte SD out ou absente");
		return;
	}
	Serial.println("Carte SD OK\n");
	
	logFileName = "Sauv_01.txt";                                     // longueur max 8+3 caractères
	logFileName.toCharArray(logSdFileName, 13);

	////--------------------------------- Récupération des variables sutr carte SD
	//logFileLectureVariables();

	//Serial.println("Variable X = " + String(x));
	//Serial.println("Variable Y = " + String(y));
	//Serial.println("Variable Z = " + String(z));
	//Serial.println("Variable Xfl = " + String(xfl));
	//Serial.println("Variable Yfl = " + String(yfl));
	//Serial.println("Variable Zfl = " + String(zfl));

	Serial.print("Valeur ligne 5 int\t");
	x = dataFileGetIndexValue(5);                                // Rechercher la valeur à la ligne 5
	Serial.println(x);

	Serial.print("Valeur ligne 5 float\t");
	xfl = dataFileGetIndexValue(5);                                // Rechercher la valeur à la ligne 5
	Serial.println(xfl);

	while(1){}

}

void loop()
{
}
float dataFileGetIndexValue(int lineIndex)
{
	String lineFromSd;
	float returnValue = -1;
	int valueIndex = 1;
	
	File dataFile = SD.open((String)logSdFileName, FILE_READ);

	if (dataFile)
	{
		while (dataFile.available())
		{
			lineFromSd = dataFile.readStringUntil('\n');
			String varName = lineFromSd.substring(0, lineFromSd.indexOf(":"));     // On prends la partie gauche pour extraire le nom de la variable
			varName.toUpperCase();                                                 // Le nom de la variable, mise en majuscule
			varName.trim();                                                        // Enlever les espaces inutiles
			String varValue = (lineFromSd.substring(lineFromSd.indexOf(":") +1));  // On prends la partie droite comme valeur
			if (valueIndex == lineIndex)                                           // Si arrivé à la ligne désirée
			{
				returnValue = varValue.toFloat();                                  // Que l'on transforme en valeur float
			}
			valueIndex ++;                                                         // Pour la ligne suivante
		}
	}
	else
	{
		Serial.println("BAD " + String(logSdFileName));
	}

	dataFile.clearWriteError();
	dataFile.close();

	return returnValue;
}

void logFileLectureVariables()
{
	String lineFromSd;
	
	File dataFile = SD.open((String)logSdFileName, FILE_READ);

	Serial.println("\nLecture " + (String)logSdFileName);

	if (dataFile)
	{
		while (dataFile.available())
		{
			lineFromSd = dataFile.readStringUntil('\n');
			String varName = lineFromSd.substring(0, lineFromSd.indexOf(":"));     // On prends la partie gauche pour extraire le nom de la variable
			varName.toUpperCase();                                                 // Le nom de la variable, mise en majuscule
			varName.trim();                                                        // Enlever les espaces inutiles
			
			String varValue = (lineFromSd.substring(lineFromSd.indexOf(":") +1));  // On prends la partie droite comme valeur

			if (varName == "X")
			{
				x = varValue.toInt();
			} 
			else if (varName == "Y")
			{
				y = varValue.toInt();
			}
			else if (varName == "Z")
			{
				z = varValue.toInt();
			}
			else if (varName == "XFL")
			{
				xfl = varValue.toFloat();
			}
			else if (varName == "YFL")
			{
				yfl = varValue.toFloat();
			}
			else if (varName == "ZFL")
			{
				zfl = varValue.toFloat();
			}
			else
			{
				if (varName != "")                                                  // Si pas ligne vide
				{
					Serial.println("Variable " + varName + " INCONNUE!!!");
				}
			}
		}
	}
	else
	{
		Serial.println("BAD " + String(logSdFileName));
	}
	
	Serial.println("Fin lecture\n");

	dataFile.clearWriteError();
	dataFile.close();
}

Cordialement et bonne soirée
jpbbricole

1 Like

Juste parfait !!!!
Merci à vous tous :*