Une partie cruciale de cette télécommande est la sauvegarde des données. Pour cela j'ai utilisé le lecteur de carte microSD pour Arduino. Je me suis aidé de la bibliothèque (ou library en anglais) "SD library to read/write to a file on an SD card". Ce tutoriel permet facilement de comprendre comment enregistrer des données sur la carte microSD. Pour simplifier les branchements, j'ai connecté la broche CS du module de lecteur de carte à la broche 10 de mon Arduino. De cette manière, les broches 10, 11, 12 et 13 sont à côté les unes des autres et toutes utilisée pour le module de lecteur de carte SD.
Mais j'ai aussi modifié le programme pour qu'il puisse être utilisé avec la télécommande universelle, avec les caractéristiques suivantes:
- Les noms des fichiers enregistrés sur la carte SD, doivent être nommés en fonction des valeurs données par les encodeurs rotatoires.
- Un fichier peut être effacé puis réécrit.
Voilà comment j'ai procédé:
Premier point:
Pour ma télécommande, je veux que chaque information soit sauvée dans un fichier texte individuel (extension .txt), avec le nom de chaque fichier correspondant aux valeurs des encodeurs rotatoirs. Voici quelques exemples:
- L'encodeur rotatoire n°1 est en position 1 (donc pour contrôler l'appareil n°1, ici une TV par exemple), et l'encodeur rotatoire n°2 est en position 3 (bouton ON). Dans ce cas-là, je veux que mon fichier texte s'appelle "1_3.txt".
- Si l'encodeur rotatoire n°1 est sur la position 1 (toujours la TV), mais cette fois l'encodeur rotatoire est sur la position 4 (volume + par exemple), alors mon fichier s'appellera "1_4.txt".
- Si l'encodeur rotatoire n°1 est en position 2 (la radio cette fois), et l'encodeur rotatoire n°2 est en position 3 (bouton ON), alors mon fichier sera "2_3.txt".
Pour tester cette fonctionnalité, j'ai utilisé un petit bout de code qui me créé une variable sous forme de chaîne de caractère (string), que je peux modifier facilement en lui ajoutant 2 variables entières (int). Jetez donc un coup d’œil au code suivant:
int value1 = 1; // Valeur numérique qui imite la valeur du 1er encodeur rotatoire
String middle = "_"; // Chaîne de caractère avec seulement 1 caractère
int value2 = 2; // Valeur numérique qui imite la valeur du 2nd encodeur rotatoire
String ext = ".txt"; // Chaîne de caractères pour indiquer l'extension
String SDname; // Je crée la chaine de caractère final, qui est vide ici
SDname = value1 + middle + value2 + ext; // Enfin, j'ajoute toutes ces données ensemble!
Second point:
Si le signal IR n'a pas été enregistré correctement, il faut pouvoir effacer le mauvais signal. Et enregistrer le bon.
J'ai d'abord essayé avec la fonction "SD.remove()" qui fonctionne très bien avec un code de taille réduite mais qui malheureusement ne fonctionnait pas sur mon programme final. Peut-être un conflit avec une autre fonction? Ou une mauvaise utilisation de la fonction? Si vous avez une idée n'hésitez pas à laisser un commentaire.
Puis j'ai trouvé une autre fonction, qui s'intitule "FileSeek", et qui permet de cherche une position dans un fichier. L'idée ici est donc de retourner à la position 0 de mon fichier et y ajouter du texte. Le fichier n'est pas renouvelé comme je voulais le faire dans un premier temps, mais les premières lignes sont remplacées ce qui est suffisant. Voici la ligne de code qui permet de faire ça:
myFile.seek(0);
Pour résumer cette sous-partie:
Dans le code, les actions suivantes sont donc réalisées:
- un fichier .txt est créé à partir des valeurs des encodeurs rotatoires.
- 3 lignes de code sont écrites sur ce fichier.
- Le fichier est fermé, ré-ouvert, puis les 3 lignes sont remplacées par 3 nouvelles lignes.
- Puis la boucle recommence en changeant les valeurs des encodeurs rotatoires.
Excellent tuto! Très bien fait, bien documenté :-)
Vais faire qques tests, merci pour ton partage