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.