MEGA keine EMpfang von Strings auf PIN 15 Serieal3

Es gelingt mir eine Softserial Kommunikation mit dem MEGA auf Pin 11. Der MEGA empfängt Strings. Diese Pins benötige ich jedoch für das Ethernetshield. Deshalb möchte ich Pin 15 (Serial3: 15 (RX), 14 (TX)) verwenden. Das MEGA empfängt aber keine String auf Pin 15?
Weiss jemand, warum das nicht geht?

  // #include <AltSoftSerial.h>
   // AltSoftSerial softSerial(15, 14);
#include <SoftwareSerial.h>
SoftwareSerial softSerial(15, 14); 

unsigned char buffer[64]; // buffer array for data recieve over serial port
String  data = "";
char    character  ;
int     Contain ;
int     x;

void setup() {
    Serial.begin(115200);
    Serial.println("SoftSerial_read started");
    softSerial.begin(9600);    
}

void loop() {
   delay(10);
    if (softSerial.available() > 0) { 
        character = softSerial.read();
        data += character;
        //readStringUntil('Q', character,10)
        if( character = 'Q' ) {
          Serial.println(data);
          Serial.flush();
          data  = "";          
        }
    }
  }

Wie kommt man denn auf die Idee, auf einem HardwareSerial einen Softwareserial aufsetzen zu wollen?


unsigned char buffer[64]; // buffer array for data recieve over serial port
String data = "";
char character ;
int Contain ;
int x;

void setup()
{
  Serial.begin(115200);
  Serial.println("SoftSerial_read started");
  Serial3.begin(9600);
}

void loop()
{
  delay(10);

  if (Serial3.available() > 0)
  {
    character = Serial3.read();
    data += character;

    //readStringUntil('Q', character,10)
    if ( character = 'Q' )
    {
      Serial.println(data);
      Serial.flush();
      data = "";
    }
  }
}

Ich sach nur RTFM!
Dann löst sich das von selbst.

@jwe1,

Ihr anderes Thema zum gleichen Thema wurde gelöscht.

Bitte stellen Sie keine doppelten Fragen. Das verschwendet Zeit und Mühe der Freiwilligen, die Ihnen helfen möchten, da sie dann an verschiedenen Stellen dasselbe beantworten müssen.

Bitte erstellen Sie nur ein Thema für Ihre Frage und wählen Sie die Forenkategorie sorgfältig aus. Wenn Sie mehrere Fragen zum selben Projekt haben, stellen Sie diese bitte in einem einzigen Thema. Die Antworten auf eine Frage liefern einen nützlichen Kontext für die anderen und Sie müssen Ihr Projekt nicht immer wieder erklären.

Wiederholtes Doppelposten kann zu einem vorübergehenden oder dauerhaften Ausschluss aus dem Forum führen.

Könnten Sie sich bitte kurz Zeit nehmen, um sich mit der Nutzung des Forums vertraut zu machen?

So können Sie das Forum in Zukunft optimal nutzen.

Vielen Dank.

Die Kommunikation funktioniert auch auf anderen digtalen Ports nicht, z.B. Port 4, 5, 22.

Zeig mal ein Foto von Deinem Aufbau.
Und was ist denn der Sender?

Der Sender ist ein Arduino Uno. Hier sende ich auf Port 4.
Beide sind mit dem GND verbunden.

Klarer Fall: Doku nicht gelesen

  • Not all pins on the Mega and Mega 2560 boards support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). Not all pins on the Leonardo and Micro boards support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

Aus: https://docs.arduino.cc/learn/built-in-libraries/software-serial/

Im Manual konnte ich keinen Hinweis auf mein Problem finden,

Dann hast du es nicht richtig gelesen.
Der mega hat 4 (vier) serielle Schnitstellen, wovon die erste für USB genutzt wird, du hast also noch 3 Stk. übrig. Ist das nicht genug um ohne Softserial auszukommen?
Spätestens bei S.10 Pinout solltest du erkennen wo die Seriellen Schnittstellen liegen.

Und anstelle von einem Uno würde ich z.b. einen Nano Every einsetzen, der hat 2 serielle Schnittstellen, da brauchst du dann auch kein Softserial.

Sogar auf der Platine schön beschriftet
image

image

Auf den UNO spiele bitte folgenden Sketch:

// Forensketch

#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 4); // Nur TX benutzen

char sendBuf[] = {"TestString Q"};

void setup()
{
  Serial.begin(115200);
  mySerial.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
}

void loop()

{
  
  mySerial.print(sendBuf);
  delay(10);
}

Auf den MEGA spiele bitte folgenden Sketch:

// Forensketch
// https://forum.arduino.cc/

char myChar;
void setup()
{
  Serial.begin(115200);
  Serial3.begin(9600);
  Serial.println(F("\r\nStart...\r\n"));
}

void loop()
{
  while (Serial3.available())
  {
    myChar = Serial3.read();
    Serial.print(myChar);

    if (myChar == 'Q')
    { Serial.println(); }
  }
}

Verbinde: GND vom MEGA mit GND vom UNO
Verbinde: PIN RX3 vom MEGA mit PIN 4 vom UNO

Wenn Du den UNO mit Strom versorgst (egal woher) und den MEGA am USB-Port dran hast, dann sollte im Seriellen Monitor die Ausgabe funktionieren.

Falsches Dokument.

z.B. im Datenblatt des ATMega2560 findest du die PCINT Fähigkeiten beschrieben.

Ich möchte die NTP Zeit übertragen. Bei einem Nano Every müsste ich erst ein W5500 anbauen. Beim Uno kann ich das EthernetShield verwenden.

Spitze, der Code funktioniert. Vielen Dank

Dann zeig mal Deinen vom UNO (den vom MEGA nehm ich von oben), dann bekommen wir das hin.

Ach! VERGISS ALLES!

Da ist ein = zu wenig!

Anstatt eines Ethernet-Shield am Uno geht es auch mit einem ESP8266-01S, dann direkt am Mega . Der ist kleiner, hat WLan und kann auch per UART (serial) angesprochen werden. Das funktioniert auch mit jedem anderen ESP8266 oder ESP32 in Zusammenarbeit mit dem Mega.

Mit kleinem Hacken ;), man braucht Pegelwandler 5V auf 3,3V

Der Haken ist sehr klein. Da braucht es nur einen Widerstand (besser Spannungsteiler) in der seriellen Leitung. Ist alsoleicht lösbar.