problème liaison série Entre Deux Arduinos Uno

Bonjour, j'ai un problème :
J'essai pour la première fois d'établir une liaison série entre deux arduino uno mai l'arduino qui est censé envoyé des donnés ne le fait pas (les leds RX et TX restent éteintes) alors que quand l'arduino est branché à l'ordinateur par USB il envoie convenablement ses infos..

voici le schéma de mon branchement :

et le code de l'arduino qui envoie :

void setup()
{
Serial.begin(9600); //on démarre la liaison en la réglant à une vitesse de 9600 bits par seconde.
}

void loop()

{
delay(1000);
Serial.println("65");
delay(1000);
Serial.println("66");
delay(1000);
Serial.println("67");
delay(1000);
Serial.println("68");
}

Avez vous une idée du problème ?

Et pourquoi n'as tu pas utilisé la liaison avec A4 et A5?
Je ne suis pas sur que cela fonctionne avec le Tx et Rx

ça permet de garder le TxRx

Bonjour,

raphaelg:
vous une idée du problème ?

Y'a pas de problème en fait, c'est tout à fait normal. Les LED Tx/Rx sont pilotées directement par le convertisseur USB/UART, autrement dit elles indiquent qu'il y a une communication USB->UART. Comme tu n'utilises pas l'USB, elles ne s'allument plus, mais les envois se font quand même.

Bonjour,
Merci Haifger, je ne savais pas que c'était le 16u2 qui drivais les LEDS ! je comprend mieux alors!

par contre j'ai un peut revu mon programme mai je n'ai pas de réaction de mon autre arduino (celui qui reçois)
voici les programmes :

ARDUINO QUI ENVOIE :

void setup()
{
Serial.begin(9600); //on démarre la liaison en la réglant à une vitesse de 9600 bits par seconde.
}

void loop()

{
delay(1000);
Serial.println('5');
delay(1000);
Serial.println('6');
delay(1000);
Serial.println('7');
delay(1000);
Serial.println('8');
}

ARDUINO QUI REÇOIS ET AFFICHE SUR UN LCD :

#include "LiquidCrystal.h" //ajout de la librairie

LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2); //liaison 8 bits de données

void setup()
{
  Serial.begin(9600);
}

void loop(){

int carlu = 0; //variable contenant le caractère à lire
int cardispo = 0; //variable contenant le nombre de caractère disponibles dans le buffer
cardispo = Serial.available();
while(cardispo > 0) //tant qu'il y a des caractères à lire
{
carlu = Serial.read(); //on lit le caractère

if(carlu == 5)
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("je teste le 5"); //on ecrit
}if(carlu == 6)
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("je teste le 6"); //on ecrit
}if(carlu == 7)
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("je teste le 7"); //on ecrit
}if(carlu == 8)
{
lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("je teste le 8"); //on ecrit
}


cardispo = Serial.available(); //on relit le nombre de caractères dispo
}
//fin du programme
}

Pour la bonne lisibilité du fil, merci de mettre tes codes entre les balises [ code] [ /code] (ou le bouton # de la barre d'outils). Tu peux ré-éditer ton post.

Sinon, un petit indice pour t'aider à résoudre le problème tout seul :
Envoi:

Serial.println('5');

Réception:

if(carlu == 5)

Tu vois la différence ?

Merci pour l'info j'ai mis entre [ code][ /code] !

Oui je voie la différence, je ne doit pas écrire les ' ' ???

raphaelg:
Oui je voie la différence, je ne doit pas écrire les ' ' ???

Bah je sais pas, tu as essayé au moins ? :slight_smile: Soit tu les mets, soit tu ne les mets pas, mais il faut être cohérent ]:smiley: (et puis chercher ce que ça change, mais ça je te laisses faire).

Ah et sinon tant que j'y pense:

  • lcd.begin(16, 2) n'est à appeler qu'une seule fois dans la fonction setup(), sinon tu réinitialises l'écran à chaques fois, ça ne sert à rien
  • utilises lcd.print(...) plutôt que lcd.write(...)

merci,
d’après mes souvenirs quand ont met " " c'est pour une suite de caractères, quand on met ' ' c'est pour un caractère unique et quand on met rien c'est pour une variable non ? Je vais essayer tu a raison !

Bonjour, me voila aux nouvelles!
J'ai changer le programme comme on avait dit ( j'ai retirer les ' ' ,initialiser une seule fois le lcd et j'ai remplacer write par print)

Et la, il ne ce passe toujours rien !!
L'écran reste éteint...

Une petite aide s'il vous plais !
Merci

Ben pourquoi tu nous mets pas ton nouveau code?

voila le nouveau code :

ARDUINO QUI ENVOIE :

void setup()
{
Serial.begin(9600); //on démarre la liaison en la réglant à une vitesse de 9600 bits par seconde.
}

void loop()

{
delay(1000);
Serial.println(5);
delay(1000);
Serial.println(6);
delay(1000);
Serial.println(7);
delay(1000);
Serial.println(8);
}

ARDUINO QUI RECOIS :

#include "LiquidCrystal.h" //ajout de la librairie

LiquidCrystal lcd(11,10,9,8,7,6,5,4,3,2); //liaison 8 bits de données

void setup()
{
  Serial.begin(9600);
  lcd.begin(16,2); //utilisation d'un écran 16 colonnes et 2 lignes
}

void loop()
{
int carlu = 0; //variable contenant le caractère à lire
int cardispo = 0; //variable contenant le nombre de caractère disponibles dans le buffer
cardispo = Serial.available();
while(cardispo > 0) //tant qu'il y a des caractères à lire
{
carlu = Serial.read(); //on lit le caractère

if(carlu == 5)
{
lcd.print("je teste le 5"); //on ecrit
}if(carlu == 6)
{
lcd.print("je teste le 6"); //on ecrit
}if(carlu == 7)
{
lcd.print("je teste le 7"); //on ecrit
}if(carlu == 8)
{
lcd.print("je teste le 8"); //on ecrit
}


cardispo = Serial.available(); //on relit le nombre de caractères dispo
}
//fin du programme
}

As tu d'abord testé ton LCD à part du reste pour vérifier qu'il est bien branché et qu'il fonctionne?

Et je ne comprends pas le:

cardispo = Serial.available(); //on relit le nombre de caractères dispo

dans ton code?

Bonjour,
Oui j'ai tester le LCD en envoyant les donnés série par l'ordinateur en USB et sa marche nikel.

Pour le code qui envoie as tu essayé un Serial.print(5); à la place de Serial.println(5);
Car le 'ln' rajoute un saut de ligne peut être que c'est mal interprété?

As tu essayé de testé ton code de réception avec ton clavier d'ordi par exemple en tapant 5 et tu vois si ça fonctionne déjà?

Faisons une petite pause et réfléchissons.
Seral.print émission d'une chaîne de caractères (avec tout de que chaîne de caractères peut impliquer)
Serial.write émission d'un octet

hum, hum sur la ligne série ce n'est plus tout à fait la même chose qui transite.

raphaelg:
Bonjour, me voila aux nouvelles!
J'ai changer le programme comme on avait dit ( j'ai retirer les ' ' ,initialiser une seule fois le lcd et j'ai remplacer write par print)

Euh non, je ne t'ai pas dit de les enlever, je t'ai dit d'être cohérent et de réfléchir à la différence entre les deux.

raphaelg:
Et la, il ne ce passe toujours rien !!

Normal.

raphaelg:
L'écran reste éteint...

Il reste éteint ou n'affiche rien ? Ça n'est pas tout à fait la même chose.

Il existe plusieurs façon pour résoudre ton problème, et fdufnews t'as donné pas mal d'indices juste au dessus. En fait, pour pouvoir te guider vers la bonne solution, il faudrait savoir quelle type de données tu souhaites faire transiter entre les deux cartes : plutôt des données «textuelles» (ie ASCII) ou plutôt des données numériques (ie binaire) ?

Bonjour et merci,
J'ai remplacer le Serial.print par Serial.write et sa marche !!
par contre j'ai deux caractères étranges à la fin de chaque phrase, je n'est pas trouver à quoi ils correspondent dans la table ascii les voici en image :

caracteres.jpg

Pour répondre à haifger ce que je voudrais c'est que l'arduino qui envoie, envoie une sorte de "code" ( c'est ici les chiffres de 5 à 8 ) et que l'arduino qui reçois ce code l'associe à un texte et l'affiche sur le LCD. Tu comprend ou je suis pas très clair ?

pas de réponse ?

Les caractères étranges c'est parce que tu affiches plus que ta variable et donc comme tu dépasses ça affiche n'importe quoi.

Finalement tu affiches sur le Moniteur série de l'ordi ou sur ton LCD?
Parce que si tu fais un Serial.print sur le lcd normalement ça marche pas.

C'est quoi ton code que tu utilises actuellement?