Archiv verlassen und diese Seite im Standarddesign anzeigen : Merkwürdige Nachrichten auf dem Seriellen Bus.
Schlepser
25.08.2022, 20:13
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:
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
...
Dadurch werden Antworten oder Nachrichten einfach verschluckt.
Im Debugger von Arduino hingegen habe ich das Problem nicht.
Wie kann ich diese Nachrichten ausschalten?
Weswegen kommen die?
Programm - C# :
port = new SerialPort(comPort, 9600, Parity.None, 8, StopBits.One);
port.Open();
Arduino - C++ :
void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
PORTB |= 0x20;
}
Mfg.
Hallo,
bist du sicher, dass deine Baudraten und auch andere Schnittstellenkonfigurationen auf beiden Seiten gleich sind?
Viele Grüße
Andreas
Schlepser
26.08.2022, 17:05
Wie soll ich das den feststellen?
ich habe die ja angegeben, kann die von der Realität abweichen?
Holomino
26.08.2022, 18:20
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#.
Schlepser
26.08.2022, 18:56
Es handelt sich um ein Arduino Uno, der über die USB Schnittstelle mit dem Computer verbunden ist.
Arduino :
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();
...
Programm :
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();
}
PS: ich habe mit Baudraten rum probiert, des wegen ist im c# Code jetzt nicht die 9600 drin.
Holomino
27.08.2022, 10:03
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/YaBB.pl?num=1542916302
Schlepser
29.08.2022, 08:18
Ich danke dir, es hat geholfen.
Im Release Modus werden keine VMDPR Botschaften mehr gesendet.
Mfg.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.