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.
}
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:
raphaelg:
Oui je voie la différence, je ne doit pas écrire les ' ' ???
Bah je sais pas, tu as essayé au moins ? Soit tu les mets, soit tu ne les mets pas, mais il faut être cohérent ] (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
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...
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
}
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 :
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 ?