fremdes Arduino Projekt kennt Serialx.begin(xxxxx) nicht

Hallo,
Ich will in ein umfangreicheres Projekt den Zugriff auf eine serielle Schnittstelle einbauen.
Der Compiler meckert jedoch sind beim initialisieren. :~

Welche lib ist dafür zuständig ?
Normalerweise braucht man doch gar nichts includieren um auf die serielle mit den Arduino Funktionen zuzugreifen :~

rudirabbit:
Welche lib ist dafür zuständig ?
Normalerweise braucht man doch gar nichts includieren um auf die serielle mit den Arduino Funktionen zuzugreifen :~

Gar keine externe Library, Serial ist im Core der Arduino-Software integriert.

Welche seriellen Schnittstellen es gibt, ob nur Serial oder auch Serial1, Serial2, Serial3 etc., das ist davon abhängig, welches "Board" gerade in der Software eingestellt ist.

So gibt es auf dem UNO nur Serial, aber auf dem MEGA auch zusätzlich Serial1, Serial2 und Serial3.

Hallo rudirabbit,

im Eifer des Gefechtes vergisst man oft, dass andere nicht so tief im eigenen Projekt stecken wie man selbst. So kann man mit Deiner Frage nicht viel anfangen. Schicke doch bitte Deinen Scetch, dass man sieht, wo was wie mit serial.irgendwas aufgerufen wird, und dann vieleicht noch die Fehlermeldung die Du bekommst. Dann kann man Dir auch bestimmt weiter helfen. Mit serialx.begin(xxxxx) wird es nicht gehen. Was schreibst Du denn genau?

Grüße,

SVen

Mit serialx.begin(xxxxx) wird es nicht gehen.

Das ist mir schon klar :slight_smile: Die X sollten auch nur Platzhalter sein.
z.b ein Serial.begin(115200); führt zum Fehler.

Es handelt sich um dieses GitHub - ArduPilot/ardupilot: ArduPlane, ArduCopter, ArduRover, ArduSub source Projekt.
Dies ist normalerweise dafür gebaut, das die Servo Signale des Empfängers via PWM entweder als Summensignal oder einzeln ausgewertet werden.

In unserem speziellen Fall sendet der Multiplex Empfänger die Daten seriell incl. CRC.
Die Auswertung und Zuordnung der Daten auf das Kanal Array incl. CRC Fehlerberechnung ist im Prinzip kein Problem
Wir haben dies erfolgreich im Multiwii Projekt eingebaut.

Ardupilot ist sehr viel umfangreicher als Multiwii
Die Entwickler haben z.b. eine eigene Klasse für den Zugriff auf die serielle Schnittstelle gebaut, z.b. für das GPS
Ich wollte einfach erstmal Testen ob der der Multiplex Code generell läuft, und erstmal die Arduino Funktion nutzen wollen.

Aber schon seltsam, das Serial nicht bekannt sein soll.
Um das Projekt bauen zu können, muss man eine angepasste Arduino Version nutzen, evtl. liegt es daran.

rudirabbit:
Die Entwickler haben z.b. eine eigene Klasse für den Zugriff auf die serielle Schnittstelle gebaut

und

Um das Projekt bauen zu können, muss man eine angepasste Arduino Version nutzen, evtl. liegt es daran.

lässt darauf schließen, dass das Standard Serial dann nicht mehr geht

Du bist auf alle Fälle mit dem Problem nicht alleine, die Frage fand ich nämlich das eine oder andere mal, aber leider keine Antwort dazu. Finde ich merkwürdig das Ganze, weil wenn irgendwas bisher bei mir funktioniert hat, dann war es die serielle Kommunikation. Viel Erfolg.

Sven

Die haben nicht nur eine eigene Version des Boards, sondern auch eine eigene Version der Arduino IDE. Ich glaube, da wird dann so einiges anders sein, wie beim normalen Arduino.

Hmm, also muss ich versuchen wie ich die Uart Klasse verwenden muss.
Also eine Instanz erstellen und die Funktionen zu nutzen.
Das Prinzip ist mir klar, nur ich komme von Delphi und brauche in diesem Fall wohl etwas Unterstützung :blush: :blush:

Hier mal die Header Datei der Klasse.

UARTDriver.h (8.02 KB)

Ich denke es ist besser direkt die UART Register zu nutzen.
Muss ja nur ein 24 Byte Pakete lesen, aber das halt möglichst performant

Wenn ich den Interrupt aktiviere wäre doch sowas möglich.

ISR(USART_RXC_vect)
{
uint8_t  nextByte;
   nextByte = UDR; 
// und wenn das Startbyte passt hier das array füllen bis der zähler erreicht ist  
}

Die externen Variabeln (und daten array) volatile definiert.
Wenn ich das array von "außen" lesen will, muss ich die ISR dabei stoppen - denke ja oder ?
Den CRC mache ich dann außerhalb.