Problem gelöst.
Ich bin dazu übergegangen einen vorhandenen Sketch anzupassen. Dieser sucht nun nach Start- und End-Markern im Datenpaket.
Der Sketch zeigt auf meinen Drehspulinstrument die Geschwindigkeit bis 50 an.
/*
COM client for TrainSimulator COM Server
This sketch connects to a COM server
You'll need a COM server to communicate with this.
based on the Serial Input Basics - Example 3 by Robin2
found at https://forum.arduino.cc/index.php?topic=288234.0
modified by MacG (www.rail-sim.de) 2019
*/
const byte numChars = 12;
char receivedChars[numChars];
boolean newData = false;
void setup() {
Serial.begin(115200);
// Initialize digital pin 9 as an output (PWM Speed)
pinMode(9, OUTPUT);
}
void loop() {
_recvWithStartEndMarkers();
_showNewData();
}
void _recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
} else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
}
} else if (rc == startMarker) {
recvInProgress = true;
}
}
}
void _showNewData() {
if (newData == true) {
//Serial.print("Speed is set to: ");
newData = false;
// Analog PWM ouput of Speed
float TS_speed = atof(receivedChars);
byte val;
val = map((TS_speed*10), 0, 500, 0, 242);
analogWrite(9, val);
//Serial.print(TS_speed);
//Serial.flush();
}
}
Alles anzeigen
Anbei noch mein Programm welches mit 115200 Baud nur die Geschwindigkeit über USB überträgt. Als IP ist für die TS-Bridge fest 127.0.0.1 eingestellt. Der Port ist 47811. Ihr müsst nur noch Euren COMPort vom Arduino eintragen. Die Voreinstellung ist COM5. Darunter werden die ControllerIDs von der gewünschten Lokomotive eingetragen. Die Werte von Throttle und Dynamische Bremse sind nicht unbedingt notwendig. Das sind nur Überbleibsel, da ich das Programm ursprünglich für Versuche zur Berechnung von Beschleunigung und Wegstrecke geschrieben habe. Die Tasten funktionieren, bei laufender TCP-Verbindung, nicht immer sofort. Ihr könnt mit "Connect to server" die Controller-Liste der aktiven Lok abrufen und dann mit "Stop connection" die Verbindung trennen. Danach kann man die IDs raus suchen und eintragen. Ein erneuter Klick auf "Connect to server" nutzt dann Eure Werte. Viel Spaß damit!
Bei Gelegenheit werde ich es anpassen, dass eine kleine Liste von Daten übertragen werden kann. Ich weiß noch nicht, ob ich die COM-Verbindung in den TS-Fireman einbaue oder ein extra Programm dafür schreibe.