Bonjour a tous après BEAUCOUP de recherches personnelles, j'en suis arrivé à la conclusion que je ne comprends rien au port Série !
J'ai besoin de votre aide, jute pour comprendre comment envoyer et recevoir, correctement, des données par le port série:
1 MEGA 1280 envoie par liaison série (sans fil) à un MEGA 2560 un array de 4 valeurs.
le MEGA 2560 les envoi sur le port Série relié au PC, le PC les affiche dans le terminal (Ctrl Maj M).
Code de l'émetteur:
// Mega 1280 EMETTEUR
char Valeurs[4] = {'A','B','C','D'};
int Start = 2;
void setup()
{
Serial1.begin(9600);
pinMode (Start, HIGH);
}
void loop()
{
if (digitalRead (Start) == HIGH){
for (int i=0 ; i == 5 ; i++){
if (i == 5){
Serial1.println();
break;
}
Serial1.print (Valeurs[i]);
delay (100);
}
}
}
Pour compléter le propos de chabot380
La seconde expression dans le for est évaluée au début de chaque itération de la boucle. Cette expression doit être évaluée à vrai pour que la boucle s'exécute.
Dans ton cas la condition est fausse à l'entrée dans la boucle donc le for ne l'exécute jamais.
Merci pour vos réponses, j'ai compris les boucles FOR !!!
J'ai modifié le code, les boucles s'executent, par contre les données renvoyées sur le terminal du PC ressemblent à " ÿ " !!!
Rien à voir avec ce que j'ai envoyé.
Est ce que le MEGA 2560 interprète bien 'A' ???
Pourquoi la valeur renvoyée est " ÿ " ???
Merci de votre aide !
Olivier
EMETTEUR
// Mega 1280 EMETTEUR
char Valeurs[4] = {'A','B','C','D'};
int Start = 2;
void setup()
{
Serial1.begin(9600);
pinMode (Start, HIGH);
pinMode (2, OUTPUT);
}
void loop()
{
digitalWrite (2, HIGH);
// if (digitalRead (Start) == HIGH){
for (int i=0 ; i < 6 ; i++){
if (i == 5){
Serial1.println();
break;
}
Serial1.println (Valeurs[i]);
delay (100);
}
// }
}
RECEPTEUR:
// MEGA 2560 RECEPTEUR
char Valeurs[4];
char Temp = 0;
void setup()
{
Serial1.begin(9600);
Serial.begin(9600);
}
void loop()
{
for(int i=0 ; i < 5 ; i++)
{
Valeurs[i] = Serial1.read ();
// Serial.print ("DECIMAL: ");
// Serial.println (Valeurs[i], DEC); // print as an ASCII-encoded decimal
// Serial.print ("HEXA: ");
// Serial.println (Valeurs[i], HEX); // print as an ASCII-encoded hexadecimal
// Serial.print ("OCTAL: ");
// Serial.println (Valeurs[i], OCT); // print as an ASCII-encoded octal
// Serial.print ("BINAIRE: ");
// Serial.println (Valeurs[i], BIN); // print as an ASCII-encoded binary
// Serial.print ("RAW: ");
Serial.println (Valeurs[i],DEC);
delay (250);
}
}
mais cela n'a rien changé, je reçois toujours " ÿ ", sur le terminal Série du PC
bonjour
le " ÿ " reçu est souvent le symptome d(une liaison serie mal paramétrée (vitesse,start,stop,parité)
tu dis plus haut que tu transmet sans fil, c'est quoi ton equipement d'emission reception ? (references)
Bonjour les amis,
Je profite de ce sujet (En espérant ne pas léser son auteur) pour poser une question qui concerne précisément la ligne série.
Je sais comment donner des ordre à Arduino pas simples caractères envoyés sur la ligne série, mais comment lui envoyer une valeur numérique qui sera alors imposée à une quelconque variable ?
nulentout:
Bonjour les amis,
Je profite de ce sujet (En espérant ne pas léser son auteur) pour poser une question qui concerne précisément la ligne série.
Je sais comment donner des ordre à Arduino pas simples caractères envoyés sur la ligne série, mais comment lui envoyer une valeur numérique qui sera alors imposée à une quelconque variable ?
Deux options :
en binaire : la tu récupère vraiment la valeur de chaque byte et ça necessite à l'envoi de bien décomposer en byte. Pour la réception on le fait dans des integer.
en ASCII : si tu veux te simplifier la tâche il y a les fonctions type atof() (array to float) atol (array to long ) ... Mais qui ne comporte pas de vérification d'erreur. Si tu veux plus évolué il faut utiliser strtol (string to long, malgré son nom il faut l'utiliser sur des char array ) etc ... mais moins simple à mettre en place. Dans tous les cas il suffit au préalable de réceptionné tes données série dans un tableau de char.