ich habe folgendes Problem: Ich möchte vom Computer aus ein Serielles Signal an einen Arduino Mega senden. Das Signal geht von dem Programm Matlab/Simulink aus. Am arduino leuchtet die LED RX bei jedem Datenempfang auf. Mit diesem Signal möchte ich zwei Servomotoren steuern, allerdings bleiben diese Regungslos. Deswegen habe ich einen zweiten Arduino an den TX pin angeschlossen und wollte über den Seriellen Monitor nach gucken was dort ankommt.
Wenn ich jetzt zum Beispiel einen Konstanten Wert z.B. "5" sende, Zeigt mir der Serielle Monitor folgendes an:
0
0
64
32
0
0
64
32 usw.
Mein code zum Auslesen sieht folgendermaßen aus:
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
Serial.println(incomingByte);
}
}
Ich habe das in einer ASCII Tabelle nachgelesen aber das ergibt für mich alles keinen Sinn.
Kann mir da vielleicht jemand sagen was ich Falsch mache, bzw. mir sagen wie ich ein sauberes Signal vom Computer aus an den Arduino senden kann mit dem ich arbeiten kann?
ich würde mal sagen das 64 steht für das das ASCII Zeichen für "@". und 32 für Space. Du musst wissen wie das Protokoll von der Computer Software die Ereignisse überträgt. Vorallem die übertragungs Geschwindigkeit muss gleich sein. Aber du hast zu wenig Informationen für deinen Frage geliefert. Mach dich erstmal mit den Basics vertraut, dann kannst du auch selber herausfinden wo das Problem liegt.
wie ich schon sagte: in eine ASCII Tabelle habe ich hinein gesehen und das @ und Space auch schon gefunden.
Heute gibt er mir die Zahlen 160 und 64 raus obwohl der gesendet Wert der selbe wie gestern ist. Ich gehe mal davon aus, dass es hierbei nicht um einen Lese Fehler handelt.
Die Übertragungsgeschwindigkeiten sind gleich, sonst bleibt der Serielle Monitor aus. Welche Informationen benötigst du denn?
du musst das Übertragungsprotokoll von Matlab kennen. Das kann bestehen aus Startkennung, Datenpaket, Endekennung oder nur aus Datenpaket und Endekennung wenn alles konstant ist. Sonst liest du zwar irgendwelche Daten ein, weißt aber nicht welche das sind. Ob Nutzdaten oder sonstiges.
Der billigste Logikanalyser, mit z.B. PulseView, kann dir zeigen was da wirklich kommt.
Von hier aus kann ich das leider nicht überprüfen.
Also bist du gefragt!
Deswegen habe ich einen zweiten Arduino an den TX pin angeschlossen
GND verbunden?
Und wie hast du das gemacht, dass die Bausteine sich nicht gegenseitig in die Quere kommen?
Denn: Die serielle ist kein Bus.
du musst das Übertragungsprotokoll von Matlab kennen. Das kann bestehen aus Startkennung, Datenpaket, Endekennung oder nur aus Datenpaket und Endekennung wenn alles konstant ist. Sonst liest du zwar irgendwelche Daten ein, weißt aber nicht welche das sind. Ob Nutzdaten oder sonstiges.
Ich habe jetzt herausgefunden, wie ich den Datentyp des Signals verändern kann und jetzt erhalte ich auch den gesendeten Wert.
combie:
Der billigste Logikanalyser, mit z.B. PulseView, kann dir zeigen was da wirklich kommt.
Von hier aus kann ich das leider nicht überprüfen.
Also bist du gefragt!
GND verbunden?
Und wie hast du das gemacht, dass die Bausteine sich nicht gegenseitig in die Quere kommen?
Denn: Die serielle ist kein Bus.
Da ich den COM Port nur mit einem Programm gleichzeitig nutzen kann habe ich das Signal an Pin 18 des Arduino 1 gesendet, von hier ein Kabel an Pin 0 des Arduino 2 und von diesem dann das Signal am Seriellen Monitor anzeigen lassen. Etwas umständlich nur um herauszufinden welches Signal ankommt aber mit meinem beschränkten Kenntnisstand ist mir nichts anderes spontan eingefallen und es hat ja auch letztendlich funktioniert.
Jetzt habe ich das Problem, dass er mir am Seriellen Monitor immer so Blöcke ausgibt. Also wenn ich 5 als konstanten Wert losschicke, bekomme ich immer: 5,0,0,0,5,0,0,0,5,0,0,0
du musst wissen wie dein Protokoll aussieht. Wenn meinetwegen Startkennung erkannt, wird eingelesen. Wenn Ende erkannt, wird gestoppt, einlesen fertig und kann verarbeitet werden. Warten auf nächste Startkennung. Wenn es keine Startkennung gibt, wird immer alles bis zur Enderkennung gelesen und dann verarbeitet.