Carte SD et variable

Bonjour tous le monde,
j'aimerai savoir si il est possible de donner une valeur a une variable avec une carte SD
pour simplifier mon programme au lieu de régler mon arduino sur (place qui ne peut ce déplacer) j'aimerai pouvoir mettre une valeur grâce au pc sur une carte sd et pouvoir la lire sur mon arduino ensuite
exemple:
je veux pouvoir changer la vitesse d'un moteur
j'ai une variable vitesse_moteur=80;
j'aimerai changer cette valeur grâce à la carte sd

se puoi leggere l'Italiano, puoi leggere qui:

si vous savez lire l'italien, vous pouvez lire ici :

if you can read Italian, you can read here:

Sur une carte SD, on peut y mettre des fichiers contenant des valeurs.
On peut par exemple mettre un fichier vitesse_moteur.txt qui est écrit avec un bloc-notes et qui va contenir par exemple huit-zéro-retourChariot. Arduino peut lire ce fichier, récupérer la valeur et s'en servir.

cela ne me donne pas grand chose en termes de programmation

Installer ceci et regarder les exemples :

Par exemple : https://github.com/greiman/SdFat/blob/master/examples/examplesV1/ReadWrite/ReadWrite.ino

Il y a une possibilité un peu plus cossue :

Cette librairie permet de lire des fichiers du genre .ini comme sous Windows, avec des variables nommées dans des sections également nommées.

Bonjour complicyte

Voilà une façon de faire, le fichier s'appelle PARAM.INI
Je t'ai mis 2 paramètres pour te montrer comment en mettre plusieurs.
Dans le fichier, il faut simplement mettre les valeurs les unes sur les autres et terminer les lignes avec un "enter".

/*
    Name:       ARDFR_VariableSurSD.ino
    Created:  01.05.2022
    Author:     jpbbricole

	Le fichier PARAM.INI
*/

#include <SPI.h>
#include <SD.h>

//const int csPin = 53;     // Paramètre jpbbricole
const int csPin = 4;     // A ajuster selon propre schéma, en général 4

File paramFile;

int vitesse_moteur = 0;
int acceleration_moteur = 0;

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

	Serial.print(F("Initialisation carte..."));

	if (!SD.begin(csPin))
	{
	Serial.println(F("Probleme carte SD!"));
	while (1);
	}
	Serial.println("Carte SD OK");

	paramLecture();
	
	Serial.println("Vitesse =\t" + String(vitesse_moteur));
	Serial.println("Acceleration =\t" + String(acceleration_moteur));
}

void loop() {

}

//------------------------------------- Nettoyage des caractères "parasites"
void paramLecture()
{
	String ligneParam = "";     // Partamètre lu

	paramFile = SD.open("PARAM.INI");     // Ouverture du fichier
	if (paramFile) 
	{
		ligneParam = paramNettoyage(paramFile.readStringUntil('\n'));     // Lecture ligne Vitesse
		vitesse_moteur = ligneParam.toInt();

		ligneParam = paramNettoyage(paramFile.readStringUntil('\n'));     // Lecture ligne Accélération
		acceleration_moteur = ligneParam.toInt();

		paramFile.close();
	} 
	else 
	{
		Serial.println("Erreur ouverture PARAM.INI");
	}
}

String paramNettoyage(String param)
{
	param.replace(" ", "");     // Supprimer les espaces
	param.replace("\r", "");     // Supprimer les retour à la ligne
	param.replace("\n", "");     // Supprimer les nouvelles lignes
	
	return param;
}

Il y aurait un autre moyen que je trouve moins "lourd", comme on a tous un smartphone, c'est une liaison Bluetooth avec un HC-06, par quoi on enverrai le nouveau paramètre à l'Arduino qui mémoriserai ce paramètre en EEPROM.
Dans le smartphone il suffirait d'un simple terminal Bluetooth, il y en a plein dans les stores.

Cordialement
jpbbricole

C'est un peu rustique. Si on a plusieurs lignes de paramètres on ne sait pas à quoi ils correspondent.
A minima, il faudrait pouvoir mettre des lignes de commentaires ou un nom de variable.

Bonjour fdufnews

Si on a un fichier ini "évolué" pourquoi pas, mais si c'est juste pour transmettre un ou deux paramètres, ce qui est l'objet de la demande, et en plus on sait dans quel ordre il sont, donc on sait à quoi ils correspondent, nul n'est besoin de données supplémentaires.

Cordialement
jpbbricole

Surtout qu'en général on commence avec un ou deux paramètres, et que cela évolue souvent ensuite.

Deuxio, la librairie SD est dépassée, il est préférable d'utiliser SDFat.

merci a tous le monde pour les reponses

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.