Arduino Nano Every zwei softwareseitige Serielle Schnittstellen gleichzeitig

Hallo Forum,

habe eine kleine Frage. Unzwar sitze ich gerade an einem Projekt wo es wichtig ist Platz zu sparen. Also habe ich mich für den Arduino Nano Every entschieden. Das Problem ist, dass ich zwei Serielle Schnittstellen benötige mit unterschiedlichen Baudraten. Habe mich für die Library "SoftwareSerial" entschieden. An der ersten ist ein Sensor der mit 9600 Baud arbeitet und an der anderen ein Funkmodul welches mit 115200 Baud arbeitet. Der Sensor empfängt Daten und sendet diese an das Funkmodul weiter. Also entweder muss ich beide gleichzeitig nutzen oder ich schalte die erste Schnittstelle ab sobald gemessen wurde. Nur leider habe ich schon viel rum probiert und hatte es (meiner Meinung nach) schon am laufen. Also das beide unabhängig von einander laufen. Jetzt bekomme ich aber keine Werte mehr vom Sensor. Mit einem einfachen Programm ließt er die wohl aus, nur nicht wenn ich zwei Schnittstellen nutze. Es ist keine Option den Sensor oder das Funkmodul zu tauschen.

Hier einmal Ausschnitte aus dem Code:

#include "cozir.h"
#include "SoftwareSerial.h"


SoftwareSerial ip (2, 4); // Setzt die Rx und Tx Pins für die Serielle Verbindung
SoftwareSerial nss (7, 8); // Setzt die Rx und Tx Pins für die Serielle Verbindung
COZIR  czr ( &nss );


void setup()
//Setup-Teil wird nur einmal beim starten des Programms ausgeführt
{
  Serial.begin(9600);
  czr.init();
  czr.setOperatingMode( CZR_POLLING ); // Bestimmt den Modus des Sensors / Polling-> Sensor misst, sendet die Werte aber erst auf anfrage
  nss.begin(9600); // Starten der Seriellen Verbindung den Cozir Sensor  mit der Baudrate 9600
  delay(100);
  ip.begin(115200);// Starten der Seriellen Verbindung für IP500 mit der Baudrate 115200

void loop()
//Der Loop-Teil wird immer wieder wiederholt sobald er durchgelaufen ist
{
  h = czr.humidity(); // ließt die relative Feuchte aus
  delay(1000);
  t = czr.celsius(); // ließt die Temperatur aus
  delay(1000);
  co2 = czr.CO2(); // ließt den Co2 Wert aus
  delay(1000);
}

ip.print("AT+TU=10,");
ip.print(t);
ip.println();

Hat vielleicht jemand eine Lösung oder schon das gleiche Problem gehabt?

Schau Dir mal die Limitations der SoftwareSerial.h an.

Evtl. kannst Du als 2. Schnittstelle die AltSoftSerial benutzen.

Gruß Tommy

Werde ich auch mal probieren. Habe es jetzt mit einer Menge rum probieren auch anders gelöst. Es dürfen nicht beide Schnittstellen senden und empfangen gleichzeitig. Da ich an das Funkmodul nur Sende habe ich Rx abgezogen und jedes mal wenn ich Programmcode der Abschnitt fertig war, die Schnittstelle beendet und die andere gestartet. Ist zwar keine schöne Lösung aber es funktioniert.

der Every hat 4 HW Serielle, davon zwei einfach verwendbar *). Warum willst du also SoftSerial verwenden?

für mehr als 2Schnittstellen evtl. den MegaCore verwenden:

Pinout:

Weil selbst auf der Arduino Website steht das er eine UART Schnittstelle hat.

Hallo,

Arduino stellt original nur eine Hardware Serielle zur Verfügung. Richtig. Aber es gibt schlaue Leute die schreiben ein komplett neues Core Package womit man mehr wie nur eine Hardware Serielle zur Verfügung hat. Installiere das Core Package MegaCoreX von MCUdude und du hast mehr Möglichkeiten. Wie was gemacht werden muss ist alles auf der Seite beschrieben.
Danach in der IDE unter Werkzeuge entsprechende Einstellungen vornehmen.
Board: MegaCoreX > ATmega4809
Clock: intern 16 MHz
BOD: 2,6V
EEprom: retained
Pinout: Nano Every
Resetpin: Reset (nicht verändern !!!)
Bootloader: no

Ok danke werde ich mal probieren

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.