Communication très simple entre deux arduinos

Bonjour a tous !

Voila je viens de faire pas mal de recherche mais je ne trouve pas de réponse qui me convienne.

J'aimerai faire une communication tres tres tres simple entre deux arduinos.

Mon soucis :
Un arduino Mega effectue une tache A
Un arduino Uno effectue une tache B (plus rapide que la A)

Il ne sont pas tout le temps branchés ensemble mais lorsqu'ils le sont voila comment ca ce passe :
si tache A toujours en cours, et tache B en cours, rien de plus ne ce passe que leur deux taches,
mais aux moment ou la tache B est terminée, la A change d'état.

Rien de bien compliqué mais voila je me posait la question du montage

Puis-je faire un montage tres tres tres simple comme ceci :

Pour en fait réalisé un code de ce type :
Si tache B = 100% alors pin 8 du uno (en output) = HIGH
Si pin 8 du mega (en input) = 1 alors tache A = second état

Voila le problème est vraiment d'ordre technique et physique concernant la liaison et non pas de code !

Je pense que celui ci fonctionnerait mais je ne souhaite pas prendre le risque d'en cramer un pour rien, voir les deux, il faudra que j'ajoute une résistance dans tous les cas je pense.

Merci de vos réponses.

Asphyth:
Je pense que celui ci fonctionnerait mais je ne souhaite pas prendre le risque d'en cramer un pour rien, voir les deux, il faudra que j'ajoute une résistance dans tous les cas je pense.

Bonjour
pour que cela fonctionne , il faut imperativement que les GND des 2 arduino soient relies

Je rajoute juste un câble entre les deux GND et cela sera fonctionnel ?

Le fait que j'ai deux tensions d'entrée en Vin soit différente ne pose pas de soucis ?

Je rajoute tout de même une résistance ?

Asphyth:
Je rajoute juste un câble entre les deux GND et cela sera fonctionnel ?

Le fait que j’ai deux tensions d’entrée en Vin soit différente ne pose pas de soucis ?

Je rajoute tout de même une résistance ?

sur le principe il n’y a pas besoin de resistance.
ceci etant par securité , il serait bien de mettre une diode sur la ligne
arduino1 sortie —>|----arduino2 entrée
quelle longueur entre les 2 arduinos ?

1 mètre !

je vais mettre une diode :wink:

Bon pour info ce montage fonctionne quasiment a 100%,

Mais j'ai un soucis,

Les arduinos, dans la 1ere phase de mon montage ne sont pas connecté et une fois le uno connecté (via 2 pin, GND et A1), le code fait en sorte de se lancer et de déterminé la valeur de sortie de la pin A1, jusque la rien de bien compliqué

Mais dans le code de mon Mega qui lit la valeur de la pin A7 je pense que je me trompe légérement.

code du uno : (qui envoi une info au mega)

int percent = 0;

void setup() {
  pinMode(7, OUTPUT); // led test
  pinMode(A1, OUTPUT);
}

void loop() {
  digitalWrite(A1, LOW);
  boolean BP_USB = (digitalRead(A0));

  if (BP_USB == 1)
  {
    digitalWrite(7, LOW);
  }
  if (BP_USB == 0)
  {
    if (percent != 20)
    {
      digitalWrite(7, HIGH);
      delay(500);
      digitalWrite(7, LOW);
      delay(500);
      percent++;
    }
    else
    {
      digitalWrite(7, HIGH);
      digitalWrite(A1, HIGH);
      delay(99999999);
    }
  }
}

code du mega :

void setup() {
  pinMode(11, OUTPUT); // une led pour mon test
  pinMode(A7, INPUT);
}

void loop() {
  boolean BP_USB = (digitalRead(A7));

  if (BP_USB == 0)
  {
    digitalWrite(11, HIGH);
    delay(500);
    digitalWrite(11, LOW);
    delay(500);
  }

  if (BP_USB == 1)
  {
    digitalWrite(11, HIGH);
    delay(99999999);
  }
}

A ce moment deux scenarios :

  • Uno et Mega deconnectés, tous deux effectuent leur taches mais au moment de la connection et que la valeur du Uno en A1 devient HIGH, l'etat du mega ne change pas
  • Uno et Mega connectés, tous deux effectuent leur taches mais au moment ou la valeur du Uno en A1 devient HIGH, l'etat du mega change

Enfin c'est un problème technique !
Je pense devoir rajouter une résistance et une diode car en testant avec ce code sur le mega (recepteur)

void setup() {
  Serial.begin(9600); // initialise la communication série
  // vérifier que le débit utiliser est le même dans le Terminal Série
}

void loop() {
  int sensorValue = analogRead(A7); // lit la valeur analogique sur la broche A0
  // et met le résultat dans la variable

  Serial.println(sensorValue); // affiche la variable dans le Terminal Serie

}

Dans le moniteur série :

Arduinos connectés :

1023
1023
1023
1023
1023
1023
...

Arduinos déconnectés :

0
1023
0
0
0
1023
...

Du coup comment faire pour que mes valeurs soit plus stables !

Je pense qu'il faut que je mette la pin A7 en pull up +5V avec une resistance et sur la pin A1 une diode ?!

mon montage actuel :

ce que je pense devoir faire :

hello, tes BP_USB ne devraient pas être Boolean ( ils ne doivent prendre que 2 valeurs "true" et "false")
fait des essais avec un fil très très court, tu éviteras un max de parasites. et cela te guidera vers la solution de ton problème ( peut etre ...)

merci pour ta réponse !

pour la longueur du fil je ne peut rien faire mon montage est comme il est et c'est le plus court possible, je vais pas contre essayer de mettre un cable gainé un peu plus renforcé :wink:

Asphyth:
merci pour ta réponse !

pour la longueur du fil je ne peut rien faire mon montage est comme il est et c’est le plus court possible, je vais pas contre essayer de mettre un cable gainé un peu plus renforcé :wink:

bonsoir
et pour le pullup sur le recepteur , il suffit de declarer l’entrée en INPUT_PULLUP au lieu de INPUT 8)

Artouste:
bonsoir
et pour le pullup sur le recepteur , il suffit de declarer l'entrée en INPUT_PULLUP au lieu de INPUT 8)

tu pense que cela peut resoudre mon probleme de valeurs instable ce pullup ?

Asphyth:
tu pense que cela peut resoudre mon probleme de valeurs instable ce pullup ?

:grin:
aucune idée , mais vu que ça ne necessite qu'un changement d'une ligne de code , ça ne te coute rien de verifier par toi meme et d'en tirer tes propres conclusions :sunglasses: