J’essai actuellement de récupérer les infos d’un port de télé-information client sur arduino. Pour l’instant, tout ce que j’arrive à faire (grâce à un tuto) c’est d’afficher sur le moniteur série arduino les caractères de ma trame grâce au code suivant :
J’aimerais maintenant pouvoir “stocker” ces caractères dans un tableau de char pour pouvoir les traiter par la suite. Seulement je suis novice en arduino et j’ai essayé bien des choses mais sans succès. Si vous avez des suggestions ou des idées, je suis preneur.
Merci pour le lien, malheureusement j'ai déjà consulté ce topic et pour être honnête ça ne m'aide pas vraiment car le programme de MicroQuettas est assez complexe, donc difficile à comprendre pour quelqu'un qui, comme moi, débute. De plus MicroQuettas utilise des fichiers.h or je dois rester sur un fichier .ino.
Rester sur un .ino : qui t'impose une pareille contrainte ?
Par exemple, tu utilises SoftwareSerial. As-tu compris cette librairie ? As-tu seulement ouvert les sources ?
Probablement non. Mais cela ne t'empêche pas de l'utiliser sans comprendre.
Le .cpp et le .h de MicroQuettas peuvent s'installer comme n'importe quelle librairie ARDUINO.
Ensuite son .ino est très simple.
Il affiche Index base, Courant instantané, Puissance instantanée.
@hbachetti, Si je dois rester seulement sur un .ino c'est pour respecter un cahier des charges. J'ai bien décortiquer et compris comment fonctionne la librairie SoftwareSerial, je te remercie de t'en soucier. Je ne "l'utilise donc pas sans comprendre". De plus le .ino ne m’intéresse pas dans le programme de MicroQuettas car le parsing des trames TIC est fait dans les .h que je ne comprends pas et que je ne peux donc pas exploiter. Merci pour ta réponse mais s'il te plait à l'avenir évites de suggérer que je n'ai pas compris le programme que j'utilise.
@iznobe, merci pour ton aide, pour vérifier si les caractères étaient bien stockés dans le tableau j’ai rajouté une boucle for qui affiche indice par indice les caractères du tableau, malheureusement on retombe sur le résultat que j’ai obtenue avant : aucun des caractères du tableau ne s’affiche dans la boucle for avec le programme suivant :
#include <SoftwareSerial.h>
#define startFrame 0x02
#define endFrame 0x03
SoftwareSerial* cptSerial;
char tableauDeChar [ 100 ] = {}; // initialisation du tableau de char vide avec 100 caracteres possible
char var;
void setup()
{
Serial.begin(115200);
cptSerial = new SoftwareSerial(8, 9);
cptSerial->begin(1200);
Serial.println(F("setup complete"));
}
void recupEtAffiche_TIC () {
char charIn = 0;
uint8_t i = 0;
while (charIn != startFrame)
{
charIn = cptSerial->read() & 0x7F;
}
while (charIn != endFrame)
{
if (cptSerial->available())
{
i++;
charIn = cptSerial->read() & 0x7F;
Serial.print(charIn);
tableauDeChar[i] = charIn; // remplissage du tableau avec les caracteres recuperes
}
}
Serial.println("");
}
void loop()
{
recupEtAffiche_TIC (); // lance la fonction de recuperation des caracteres et les affiche .
for(int i=0; i<100; i++)
{
Serial.print(tableauDeChar[i]);
}
}
De plus le .ino ne m'intéresse pas dans le programme de MicroQuettas car le parsing des trames TIC est fait dans les .h que je ne comprends pas
Le parsing de MicroQuettas est fait dans le .cpp.
Et son code est d'une infinie simplicité par rapport à celui de SoftwareSerial.
Je ne pense pas que tu saches de quoi tu parles.
Un peu de modestie ne fait pas de mal.
De plus on n'a jamais empêché qui que ce soit d'intégrer le contenu d'un .h et d'un .cpp dans un .ino pour n'en faire qu'un seul fichier, bien que ce ne soit pas la manière la plus intelligente de travailler.
Crois bien une chose : personne ne se sent motivé, en tous cas pas moi, pour refaire ce qui a été fait par quelqu'un d'autre simplement parce qu'un débutant ne comprend pas le code.
L'interface du module de MicroQuettas est très simple à comprendre (voir LinkyHistTIC.h) :
void Init(); /* Initialisation, call from setup() */
void Update(); /* Update, call from loop() */
bool baseIsNew(); /* Returns true if base has changed */
bool iinstIsNew(); /* Returns true if iinst has changed */
bool pappIsNew(); /* Returns true if papp has changed */
uint32_t base(); /* Returns base index in Wh */
uint8_t iinst(); /* Returns iinst in A */
uint16_t papp(); /* Returns papp in VA */
Son .ino est suffisamment clair.
Autre solution, tu apprends à te servir de strtok(), strcmp(), etc. et tu fais le boulot toi-même.
@hbachetti, Le truc, c'est que dès le départ je ne demande pas une solution déjà toute faite comme tu me l'a apportée, je cherche à mettre en place par moi-même moyennant quelques idées et en précisant que je suis novice une solution à mon problème.
C'est gentil de ta part de me diriger vers un autre post mais il ne devrait pas y avoir de débat à partir du moment ou j'ai précisé que je ne comprenais pas le code et que l'objectif c'était justement que je comprenne ce que je fais.
"Crois bien une chose : personne ne se sent motivé, en tous cas pas moi, pour refaire ce qui a été fait par quelqu'un d'autre simplement parce qu'un débutant ne comprend pas le code." Ne te sens alors surtout pas obligé de répondre, tu n'es pas otage de ce post, et si tu n'est pas motivé alors passe juste ton tour.
elkilleros: @iznobe, merci pour ton aide, pour vérifier si les caractères étaient bien stockés dans le tableau j'ai rajouté une boucle for qui affiche indice par indice les caractères du tableau, malheureusement on retombe sur le résultat que j'ai obtenue avant : aucun des caractères du tableau ne s'affiche dans la boucle for avec le programme suivant :
Une idée ?
la boucle est inutile , la fonction que j ' ai ajouté est identique a ton code de depart , elle est deja censé affiché les caracteres non ?
essaie de remplacer :
char tableauDeChar [ 100 ] = {}; // initialisation du tableau de char vide avec 100 caracteres possible
par
char *tableauDeChar [ 100 ] = {}; // initialisation du tableau de char vide avec 100 caracteres possible
@iznobe, Le but était de vérifier si les caractères s'enregistrait bien dans le tableau en question, et de les afficher justement en lisant le tableau. Et il s'avère que quand je lis le tableau avec la boucle for, rien ne s'affiche. En fait pour pouvoir traiter les informations j'aimerais pouvoir les manipuler via un tableau pour en extraire par la suite certain segment mais pour cela il faut que je sois sûr que les caractères s'enregistres bien dans le tableau dans le bon ordre, et quand quand je fasse par exemple un Serial.print(tabDeChar[9] (au hasard) le caractère "A" apparaisse sur le moniteur série.
Voilà je sais pas trop si c'est clair, merci pour ta réponse.
elkilleros: @iznobe, Le but était de vérifier si les caractères s'enregistrait bien dans le tableau en question, et de les afficher justement en lisant le tableau. Et il s'avère que quand je lis le tableau avec la boucle for, rien ne s'affiche. En fait pour pouvoir traiter les informations j'aimerais pouvoir les manipuler via un tableau pour en extraire par la suite certain segment mais pour cela il faut que je sois sûr que les caractères s'enregistres bien dans le tableau dans le bon ordre, et quand quand je fasse par exemple un Serial.print(tabDeChar[9] (au hasard) le caractère "A" apparaisse sur le moniteur série.
Voilà je sais pas trop si c'est clair, merci pour ta réponse.
Si si , c ' est tres clair , essai de faire le changement dans mon post precedent pour voir , je ne peux pas tester ( je suis au taff et je n ' ai pas d' arduino sous la main ) .
par rapport a ton code de base , j ' ai ajouté le tableau de char en ligne 6 , puis je le remplis avec la ligne :
tableauDeChar[i] = charIn; // remplissage du tableau avec les caracteres recuperes
ton code n ' affiche rien sur le moniteur serie reglé a 115200 ?
si non , affiche t il avec le code que tu as founi au depart ?