Liaison série entre deux Arduino

Bonjour,

J’ai il y a peu créer un petit programme pour commander un robot par liaison série (câblés, pas par bluetooth ou autre moyen sans fil) mais quand je veux commander un servo-moteur celui-ci se met à vibrer je vous mets mon code ci-dessous. J’utilise un Arduino Mega V3 et un Arduino nano et un câble de 8 mètres.

PS: Il y a que les servo-moteur qui vibre le reste marche niquel même des moteur commander en modulation. Et j’ai mis le code en .zip pour ce qui regarde le problème.

Code de l’émetteur EN 3 PARTIES

#include <SoftwareSerial.h>
#include "emeteur.h"

Emeteur emeteur;

void setup() {
  Serial.begin(BAUD);

  for (int i = A; i < A + 4; i++) pinMode(i, INPUT_PULLUP);

  pinMode(LEDG, OUTPUT);

  emeteur.start();

 }

void loop() {

  emeteur.lectureValeurs();

  emeteur.envoiTrame();
  delay(100);
}
#include "Arduino.h"
#include <SoftwareSerial.h>
#include "emeteur.h"

SoftwareSerial mySerial(RX, TX); //Rx Tx

int btn1;

Emeteur::Emeteur() {}

void Emeteur::start() {
  mySerial.begin(BAUD);
}

void Emeteur::envoiTrame() {

  digitalWrite(LEDG, HIGH);

  mySerial.println("$" + (String)btn1 + ";");

  digitalWrite(LEDG, LOW);

}

void Emeteur::lectureValeurs() {
  lectureBTN();
}

void Emeteur::lectureBTN() {
  btn1 = digitalRead(BTN1);
}
#ifndef emeteur_h
#define emeteur_h

#define BAUD 9600
#define RX  10 //gris/noir
#define TX  11 //blanc
#define LEDG  13 //marron/blanc

#define BTN1  8 //orange/noir

#define A 2

class Emeteur
{
  public:
    Emeteur();
    void start();
    void envoiTrame();
    void lectureValeurs();
    void creationTrame();
    void lectureBTN();
    void lectureJOY();
  private:
    int _pin;
};

#endif

Et le code du récepteur en une seule partie

#include <Servo.h>
#include <SoftwareSerial.h>
#define BAUD 9600// nombres de BAUD

SoftwareSerial mySerial(10, 11); //Rx Tx

Servo myservo; //définie les servo

int data[1];//définie le nombre d'octets à récuperer soit 1

int val = 0;

int btn1 = 0;//définie les variables des bouttons
int storedValue;

void lecture_val () {//lies les valeurs envoyé par la voie série

  while (mySerial.available() >= 5) {
    if (mySerial.find("$")) {

      for (byte i = 0; i < 1; i++) {//range les octest dans les cases
        data[i] = mySerial.parseInt();
      }

      mySerial.println("$" + (String)data[0] + ";");
      Serial.println("$" + (String)data[0] + ";");
      btn1 = data[0];
    }
  }
}

void abeille () {
    if (btn1 == 0){
      myservo.write(0);
    }
    else {
      myservo.write(90);
    }
  
}


void setup() {
  Serial.begin(BAUD);//définie le nombre de BAUD
  mySerial.begin(BAUD);
  myservo.attach(3);//définie les sorties des servo moteurs sur le pin 3
}

// $1:0:1:1023:201:-59:-51:547:57:-95;

void loop() { //active les fonction en boucle
  lecture_val ();
  abeille ();
}

Merci de votre réponse.

liaison_serie.zip (23.4 KB)

Kammoooooo !!!! Des servos qui vibrent !!! C'est pour toi !!! Laisse tomber les olives !!!

Salut^^

Avant même de lire le code, un servo 'vibre' parce qu'il essaie de tenir sa position. M'kay?
Je pense que ça vient de ton montage, m'kay?
Quel servo tu utilises? Dis nous aussi comment il est alimenté m'kay?
Si tu as mis un petit servo comme un SG90, alimenté par ta carte arduino, ça fonctionne, mais à partir de deux, ou si l'alim est insuffisante, ya pas assez de courant pour deux servos, et ils 'hésitent', ils n'ont pas la force de rester en place, mais essaient néanmoins, m'kay?

1-montage
2-réf des servos

Ce n'est pas l'heure des olives^^ Là, je me bourre de café, m'kay?