Komunikation zwischen 2 Arduino

Hallo zusammen!

Versuchsweise benutze ich 2 Arduino (ProMini und Nano) für eine Serielle Komunikation untereinander!

Der ProMini wertet die daten eines Drehgebers aus und sendet sie an den Nano, welcher mit dem PC verbunden ist und hier werden die Daten gelesen.

Code
ProMini

const int pin_A = 10;
const int pin_B = 9;
unsigned char encoder_A;
unsigned char encoder_B;
unsigned char encoder_A_prev=0;
int i = 0;

void setup()  {
  Serial.begin(115200);
  pinMode(pin_A, INPUT);
  pinMode(pin_B, INPUT);
} 

void loop()  {  
    encoder_A = digitalRead(pin_A);
    encoder_B = digitalRead(pin_B);   
    if((!encoder_A) && (encoder_A_prev)){
      if(encoder_B) {
        i++;              
      }else {
        i--;           
      }
      Serial.println(i);   
    }   
    encoder_A_prev = encoder_A;
}

Nano

int val;

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

}

void loop() {
      val = Serial.read();
      Serial.println(val);
}

Das Problem ist, wenn ich die Daten direkt vom ProMini lese und am Drehgeber drehe, erhalte ich tadellose Werte, aber der Nano empfängt die Werte nicht mehr richtig, ich kann drehen was ich will die Werte bewegen sich nur noch um die 50 herum und fallen auf -1 sobald ich mit drehen aufhöre.

Hoffe weis Rat, danke

Mfg

Doppelbelegung der Seriellen?
Verboten!
Der Nano hat nur eine Serielle...

Alternativ: I2C

s_fr:
Hoffe weis Rat, danke

Nur ein Schuss ins Blaue: Mir sind zwei Dinge aufgefallen.

  • Du definierst pin_A und pin_B als Eingänge, ohne den internen Pullup-Widerstand zu aktivieren. Ersetze im Sketch für den Pro Mini das INPUT durch INPUT_PULLUP
  • Im Sketch für den Nano fragst Du den Eingang ständig ab, ohne zu prüfen, ob denn überhaupt etwas „anliegt“. Setze die beiden Befehle in loop() mal in eine Abfrage (irgendwas mit Serial.available(), glaube ich).

Um Probleme wegen zu hoher Übertragungsgeschwindigkeiten auszuschließen, könntest Du außerdem die Datenrate herabsetzen. Zum Testen dürften die üblichen 9600 Baud genügen.

HTH

Gregor

combie:
Doppelbelegung der Seriellen?
Verboten!
Der Nano hat nur eine Serielle...

Alternativ: I2C

Sicher das es daran liegt? Ich meine es klappt wenn ich beim Nano statt read, readString verwende, aber das ist verdammt langsam.

fallen auf -1 sobald ich mit drehen aufhöre.

So wie du es machst, "liest" du -1 wenn nichts gesendet wird.

Wenn etwas gesendet wird, kann das allerhöchstens eine 255 sein.
Wenn du Zahlen per print sendest, werden das Buchstaben im Bereich '0' = 48 bis '9' = 57.

Das hast du also sehr gut beobachtet und ist vollkommen richtig.

Konnte das Problem jetzt mittels ParseInt lösen

int val;

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

void loop() {
  while (Serial.available() > 0) {
    int val = Serial.parseInt();
     Serial.println(val);
  }
}

Versuche es doch mal mit SoftwareSerial https://www.arduino.cc/en/Reference/SoftwareSerial an den Pins 2 und D3.
Da habe ich bisher auch gute Erfahrungen mit gemacht.

Sicher das es daran liegt?

Ich bin mir sicher, dass der Nano nur eine Serielle hat.
Der Pro Mini ebenso.
Und ich bin mir sicher, dass die Serielle kein Bus ist.

Ohne besondere Vorkehrungen gilt: 3 Partner auf der Seriellen sind Verboten.

Alternativ, wie HotSystems sagt: SoftwareSerial, AltSoftwareSerial