Hallo,
bist du sicher, dass deine Baudraten und auch andere Schnittstellenkonfigurationen auf beiden Seiten gleich sind?
Viele Grüße
Andreas
Grüße,
ich habe folgendes Problem:
ich habe ein Programm geschrieben, welches sich mit dem Arduino über die Serielle Schnittstelle verbindet.
Die Baudrate ist bei beiden auf 9600 fest gelegt worden.
Immer wenn mein Programm sich verbindet wird es mit folgender Nachricht voll getextet:
Dadurch werden Antworten oder Nachrichten einfach verschluckt.Code:VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR VMDPR_|0:32:|||_VMDPR ...
Im Debugger von Arduino hingegen habe ich das Problem nicht.
Wie kann ich diese Nachrichten ausschalten?
Weswegen kommen die?
Programm - C# :
Arduino - C++ :Code:port = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One); port.Open();
Code:void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); PORTB |= 0x20; }
Mfg.
Geändert von radbruch (29.08.2022 um 20:00 Uhr) Grund: Code-Tag eingefügt
Hallo,
bist du sicher, dass deine Baudraten und auch andere Schnittstellenkonfigurationen auf beiden Seiten gleich sind?
Viele Grüße
Andreas
Wie soll ich das den feststellen?
ich habe die ja angegeben, kann die von der Realität abweichen?
Theoretisch kann sie das: wenn z.B. der im Code kompilierte Takt nicht mit dem Takt des Controllers übereinstimmt.
Aber das muss nicht der Fehler sein - insofern wäre es nett, etwas mehr zu schreiben. also: welches Gerät Du wie genau mit dem PC verbindest und insbesondere auch die Codeteile des eigentlichen Sendens und Deine Implementierung der Empfangsroutine in C#.
Es handelt sich um ein Arduino Uno, der über die USB Schnittstelle mit dem Computer verbunden ist.
Arduino :
Programm :Code:int serialComunication() { if (Serial.available()) { String comand = Serial.readStringUntil(';'); Serial.println(); if (comand == "Test") { Serial.println("Test:ok"); } else if (comand.startsWith("Comand:") == 1) { String t = comand.substring(7); Serial.println(t + ":ok"); return stoi(t); } else { Serial.println(comand); } } return -1; } int stoi(String str) { int temp = 0; for (int i = 0; i < str.length(); i++) { temp = temp * 10 + (str[i] - '0'); } return temp; } void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); PORTB |= 0x20; } // the loop function runs over and over again until power down or reset void loop() { int c = serialComunication(); ...
PS: ich habe mit Baudraten rum probiert, des wegen ist im c# Code jetzt nicht die 9600 drin.Code:internal class SerialHelper { SerialPort port; public SerialHelper(string comPort) { port = new SerialPort(comPort, 115200, Parity.None, 8, StopBits.One); } public bool Test() { if (!port.IsOpen) { port.Open(); } port.WriteLine("Test;"); String t = port.ReadLine(); while (true) { Debug.WriteLine(t); if (t.StartsWith("Test:ok")) { return true; } else if (t.StartsWith("Test")) { return false; } t = port.ReadLine(); } } public bool Comand(int code) { if (!port.IsOpen) { port.Open(); } port.WriteLine($"Comand:{code};"); String t = port.ReadLine(); while (true) { Debug.WriteLine(t); if (t.StartsWith(code+":ok")) { return true; } else if (t.StartsWith($"Comand:{code}")) { return false; } t = port.ReadLine(); } } public void Close() { if (port.IsOpen) { port.Close(); } port.Dispose(); }
Geändert von Schlepser (26.08.2022 um 23:55 Uhr)
Schade, ich hab den UNO nicht - könnte maximal mit einem ESP32 aufwarten.
Bevor ich das tue: Ich hab mal nach "VMDPR_" gesucht und das hier gefunden:
https://www.visualmicro.com/forums/Y...num=1542916302
Ich danke dir, es hat geholfen.
Im Release Modus werden keine VMDPR Botschaften mehr gesendet.
Mfg.
Lesezeichen