NewSoftSerial mit Arduino UNO und Arduino MEGA 2560

Hallo,

ich habe einen Arduino UNO und einen Arduino MEGA.

Von einen XBee Router lasse ich mir Werte zuschicken (Licht und Temperatur).

Das ganze sieht dann so aus:

#include <NewSoftSerial.h>
#include <Time.h>

NewSoftSerial myserial(2, 3);

// XBEE Stuff
int xvalue = 0;
int routernum = 3; // Set the number of the used router/client - defined in xsend

void setup(){
  Serial.begin(9600);
  myserial.begin(9600);
  setTime(13,0,0,1,1,11);
  Serial.print(hour());
  Serial.print(":");
  Serial.print(minute());
  Serial.print(":");
  Serial.println(second());
  Serial.println("READER - Setup done!");
  
  /*
  // LED
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  */
}

void loop(){
  if (myserial.available() >= 17) {
    //Serial.println("Daten vorhanden");
    if (myserial.read() == 0x7E) {
      //Serial.println("Start!");
      byte ignore = myserial.read(); //0x00 = MSB
      //int x02 = myserial.read();
      int LSB = myserial.read();
      switch (LSB){
        case 20: // 0x14 - LSB
        Serial.print("LSB: ");
        Serial.println(LSB);
        if (myserial.read() == 0x92){
          delay(10);
            //if (myserial.available() == 20){
            int s01 = myserial.read(); // 0x00
            int s02 = myserial.read(); // 0x13
            int s03 = myserial.read(); // 0xa2
            int s04 = myserial.read(); // 0x00
            int s05 = myserial.read(); // 0x40
            int s06 = myserial.read(); // 0x76 / 0x69
            int s07 = myserial.read(); // 0x34 / 0x6c
            int s08 = myserial.read(); // 0x83 / 0x9F
            int s10 = myserial.read(); // 0xE1 / 0xDB
            int s11 = myserial.read(); // 0x42 / 0x04
            int ro = myserial.read(); // 0x01
            int sn = myserial.read(); // 0x01
            int dm01 = myserial.read(); // 0x00
            int dm02 = myserial.read(); // 0x00
            int am01 = myserial.read(); // 0x03
            int analog0_1 = myserial.read(); //0x00 - 0x03
            int analog0_2 = myserial.read(); // 0x00 - 0xFF
            int analog1_1 = myserial.read(); // 0x00 - 0x03
            int analog1_2 = myserial.read(); // 0x00 - 0xFF
            int cs = myserial.read(); // Checksum
            int analog0 = analog0_2 + (analog0_1 * 256);
            int analog1 = analog1_2 + (analog1_1 * 256);
            float temperatur1 = ((((analog0 * 5) / 1024) - 0.5) * 100);
            Serial.println(analog0);
            Serial.println(analog1);
            Serial.println("-------------");
            //}
        }

Wenn ich den Code auf meinen Arduino UNO raufspiele - erhalte ich einwandfrei die Daten.

Wenn ich den gleichen Code (natürlich ändere ich in Menü der IDE auf Arduino MEGA 2560) auf meinen MEGA hochlade - erhalte ich keine Daten.

Wie man sieht habe ich schon versucht, an jeder Stelle zu debuggen - Beim Mega bekomm ich nicht mal beim ersten IF eine Meldung…

Wenn es generell nicht funktionieren würd, dann würd ich mich nicht melden - aber ich habe schon mit dem gleichen Board, mit den gleichen Includes Daten gelesen und gesendet, was mich jetzt gerade ein wenig “wurmt”…

Hat irgendwer eine Idee, was da falsch läuft??

Danke.

Testhalber hab ichs nun mit Serial.read() usw. versucht - gleiches Ergebniss (= keine Daten empfangen)…

verwirrend…

Code so far:

#include <NewSoftSerial.h>

NewSoftSerial myserial(2, 3);

// XBEE Stuff
int analog0 = 0;
int analog1 = 0;
boolean update = false;

void setup(){
  Serial.begin(9600);
  myserial.begin(9600);
  pinMode(11, OUTPUT);
  Serial.println("Booting done");
}

void loop(){
  packetcheck();
}

void packetcheck(){
  if (myserial.available()) {
    digitalWrite(11, HIGH);
    delay(100);
    digitalWrite(11, LOW);
    if (myserial.read() == 0x7E) {
      update = true;
      byte ignore = myserial.read(); //0x00 = MSB
      int LSB = myserial.read(); // 0x14 - LSB
      //Serial.println(LSB);
      switch (LSB){
        case 20: 
        if (myserial.read() == 0x92){
          delay(10);
            //if (myserial.available() == 20){
            int s01 = myserial.read(); // 0x00
            int s02 = myserial.read(); // 0x13
            int s03 = myserial.read(); // 0xa2
            int s04 = myserial.read(); // 0x00
            int s05 = myserial.read(); // 0x40
            int s06 = myserial.read(); // 0x76 / 0x69
            int s07 = myserial.read(); // 0x34 / 0x6c
            int s08 = myserial.read(); // 0x83 / 0x9F
            int s10 = myserial.read(); // 0xE1 / 0xDB
            int s11 = myserial.read(); // 0x42 / 0x04
            int ro = myserial.read(); // 0x01
            int sn = myserial.read(); // 0x01
            int dm01 = myserial.read(); // 0x00
            int dm02 = myserial.read(); // 0x00
            int am01 = myserial.read(); // 0x03
            int analog0_1 = myserial.read(); //0x00 - 0x03
            int analog0_2 = myserial.read(); // 0x00 - 0xFF
            int analog1_1 = myserial.read(); // 0x00 - 0x03
            int analog1_2 = myserial.read(); // 0x00 - 0xFF
            int cs = myserial.read(); // Checksum
            analog0 = analog0_2 + (analog0_1 * 256);
            analog1 = analog1_2 + (analog1_1 * 256);
        }
      }
    }
  }
  
  if (update == true){
    if (analog0 != 0){
      Serial.print("Analog 0: ");
      Serial.println(analog0);
    }
  
    if (analog1 != 0){
      Serial.print("Analog 1: ");
      Serial.println(analog1);
    }
    update = false;
  }
}

Ich verstehe nicht, wieso Du auf dem Mega eine Software-emulierte seriele Schnittstelle verwenden willst, wenn der Mega 3 unbenutzte Hardwareschnittstellen hat.
Grüße Uwe

danke für den Denkanstoß...

Mit Serial1.read() funktionierts...

Sorry hab den Mega noch nicht so lange... - wenn das als Ausrede gilt :wink:

Schaut jetzt zwar nicht mehr so fancy aus - da ich jetzt ganze zwei Kabeln braucht (SparkFun XBee Shield - WRL-12847 - SparkFun Electronics) - aber "Form follows function"...

Danke nochmal...

Keine Ursache. Grüße Uwe