Bonjour,
J'aimerais savoir comment relier mes 2 arduinos (Uno et due)
J'ai regardes pas mal de videos youtube mais je crois que quelque chose m'echappe car ca ne marche jamais avec moi...
Bonjour, et bienvenu sur le forum.
Si mes souvenirs sont exactes, l'Arduino Due fonctionne avec une logique 3.3V alors que le Uno fonctionne en 5V.
Il faut au moins que tu adapte le signal TX que le Uno envoie au RX du Due, avec 1 pont diviseur, pour le passer de 5 à 3.3, et espérer que le signal 3.3V TX que le Due envoie en RX de l'Uno soit OK (en général, ça marche).
pouvez vs me donner plus de details svp ?
et si vs m'envoyez un code pr tester ce serait chouette
Bonjour toniboudi
Mets tes 2 sketch en ligne, entre les balises .
Si c'est par des ports série. as tu bien croisé Tx et Rx?
Est ce que les GND des 2 Arduino sont bien connectés ensemble?
Cordialement
jpbbricole
arduino qui envoi:
#include <SoftwareSerial.h>
const int trigPin = 11;
const int echoPin = 12;
float duration, distance;
SoftwareSerial mySerial(2, 3); // RX, TX
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.0343) / 2;
Serial.print("Distance: ");
Serial.println(distance);
mySerial.print("D:");
mySerial.println(distance);
delay(100);
}
arduino qui recoit:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop() {
if (mySerial.available() > 0) {
String receivedString = mySerial.readStringUntil('\n');
if (receivedString.startsWith("D:")) {
float distance = receivedString.substring(2).toFloat();
Serial.print("Received distance: ");
Serial.println(distance);
}
}
}
et si vs pouvez m'expliquer en details ce que je dois faire ... comment uploader les codes (quel coade a uploader en premier etc...)
Bonjour toniboudi
Ca n'a pas d'importance.
A première vue, tes codes semblent bons.
Je pourrais te confirmer ça, en fin d'après midi.
A+
Cordialement
jpbbricoée
Bonjour jpb,
Avant ça, il ne faut pas comme l'indique @jef59 vérifier l'adaptions en tension entre les deux.
J'ai bien vue qu'il y avait une broche IOREF, mais j'ai cru comprendre que c'est uniquement pour des cartes filles ?
Bonjour terwal
Ce n'est pas forcément nécessaire, si c'est le Duo qui transmet sur le UNO ça passe sans autre.
Dans l'autre sens, la question est, est-ce que la logique du Duo supporte le 5V?
Cordialement
jpbbricole
Oui, c'est en gros mon questionnement, comme souvent on lit de prendre des précautions à ce niveau.
Les IO de la DUE sont en logique 3.3V.
Il faut faire une adaptation de niveau entre les sorties de la UNO et les entrée de la DUE. Un pont diviseur avec une résistance de 2.2KΩ et une de 3.3kΩ devrait faire le job.
┌───────┐
out UNO ▩──────┤ ├─────┬────> in DUE
└───────┘ │
2.2kΩ ┌┴┐
│ │
3.3kΩ │ │
└┬┘
│
─┴─
\\\
Dans l'autre sens ce n'est généralement pas critique. Le tension du niveau 1 en logique 3.3V est suffisamment haute pour être interprétée correctement par la UNO.
Effectivement, si seul le Due transmet du 3.3V à l'Uno, ça devrait passer sans pont diviseur.
Bonjour toniboudi
J'ai essayé ton code, entre 2 UNO, je n'ai pas de DUE, il fonctionne très bien.
Un petit truc à ajouter, après réception de la chaîne de caractères (receivedString
), faire un trim(), ça nettoie la chaîne reçue des caractères "invisibles" comme les caractères de contrôle et les espaces inutiles au début et à la fin.
if (mySerial.available() > 0) {
String receivedString = mySerial.readStringUntil('\n');
receivedString.trim();
Cordialement
jpbbricole
Sans le pont diviseur, ça peut peut-être marcher, mais pas éternellement vu que l'entré RX de la Due est "sur alimentée".
Bonsoir toniboudi
Dans le programme qui est sur le DUE pourquoi utiliser SoftwareSerial
, puisque le DUE possède, comme le Mega, 4 ports série (UART)?
Cordialement
jpbbricole
ah bon merci !
pouvez vs me donner plus de details concernant la configuration materiel ... quel pins utiliser, comment brancher les 2 arduinos ensemble etc ...
Bonjour toniboudi
Oui, mais j'ai besoin de savoir quel Arduino émet et quel Arduino reçoit.
Cordialement
jpbbricole
uno envoie et due recoit
En fait, on a déjà donné toutes les informations et @jef59 t'a même fait un dessin.