Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Kannst du es auch mal mit der aktuellen Beta probieren?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
- Arne aus dem Norden
- Beiträge: 722
- Registriert: 25.12.2011 14:28:21
- Aktuelle Projekte: Fahrpult VT628/VS928 - Versuch eines Nachbaus
- Wohnort: Str.Km "6,8" der Kiel-Schönberger Eisenbahn (DB-Str. 9107)
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Ja, (es dauert immer etwas weil ich den Zusirechner in der Pultbastelwerkstatt nicht in der Nähe eines Internetzuganges habe) aber es geht soweit mit Zusi 3.3.7.3 wieder. D.h. das was vorher mit 3.3.5.0 ging geht jetzt wieder, einzelne (unwichtige) Leuchtmelder wie schon geschrieben z.B. ID 63 gehen nach wie vor nicht.F. Schn. hat geschrieben:Kannst du es auch mal mit der aktuellen Beta probieren?
Mein Baubericht von der echten Bahn zum Schönberger Strand:
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/
https://www.facebook.com/Hein-Sch%C3%B6 ... 601976323/
- mittelfrankenbahner
- Beiträge: 63
- Registriert: 01.10.2019 22:11:28
- Aktuelle Projekte: Streckenprojekt Gräfenbergbahn (Aktuell Modul Gräfenberg & Igensdorf)
Objektbau für die Gräfenbergbahn - Wohnort: Mittelfranken
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Da sich das Thema um das Skript eh geklärt hat und ich jetzt auch auf die Variante zurückgreife bei der sich das Skript direkt mit dem Server von Zusi verbindet habe ich jetzt noch eine weitere Frage.
Meine Abfrage in dem Skript für die Türtaster sie so aus:
Pin 25 ist für das MFA der Leuchtmelder T
Pin 42 für den mittleren Türtaster die LED
Pin 41 für den rechten TT die LED
Pin 43 für den linken TT die LED
Meine Fragen:
1. Da die Türen bei der S-Bahn schon ab 7km/h vorgewählt werden können und ich dies auch mache, geht dann schon am MFA der LM aus. Welche Abfrage müsste ich dann einbauen damit dies nicht geschieht?
2. Die linke und rechte TT-LED soll ab 7km/h blinken. Wie funktioniert das dann? Also wenn ich eine dritte Abfrage einbaue und 0x00C abfrage, dann habe ich das Problem dass die LEDs zwar blinken, nach Stillstand aber immer leuchten (beide) .
Meine Abfrage in dem Skript für die Türtaster sie so aus:
Code: Alles auswählen
if (dataGroup.i == 0x000A) {
if(nutzdata.b[0] == 1) {
digitalWrite(25, LOW);
digitalWrite(42, LOW);
}
if(nutzdata.b[0] == 0) {
digitalWrite(25, HIGH);
digitalWrite(42, HIGH);
}
}else if(dataGroup.i == 0x0008) {
if(nutzdata.b[0] == 1) {digitalWrite(43, LOW);}
if(nutzdata.b[0] == 0) {digitalWrite(43, HIGH);}
if(nutzdata.b[0] == 2) {
digitalWrite(43, LOW);
digitalWrite(43, LOW);
}
}else if(dataGroup.i == 0x0009) {
if(nutzdata.b[0] == 1) {digitalWrite(41, LOW);}
if(nutzdata.b[0] == 0) {digitalWrite(41, HIGH);}
if(nutzdata.b[0] == 2) {
digitalWrite(41, LOW);
digitalWrite(41, LOW);
}
}
Pin 42 für den mittleren Türtaster die LED
Pin 41 für den rechten TT die LED
Pin 43 für den linken TT die LED
Meine Fragen:
1. Da die Türen bei der S-Bahn schon ab 7km/h vorgewählt werden können und ich dies auch mache, geht dann schon am MFA der LM aus. Welche Abfrage müsste ich dann einbauen damit dies nicht geschieht?
2. Die linke und rechte TT-LED soll ab 7km/h blinken. Wie funktioniert das dann? Also wenn ich eine dritte Abfrage einbaue und 0x00C abfrage, dann habe ich das Problem dass die LEDs zwar blinken, nach Stillstand aber immer leuchten (beide) .
- nonesense
- Beiträge: 508
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Du hast ja immer die Möglichkeit Werte miteinander zu kombinieren. Bau doch zusätzliche Bedingungen ein, die die Geschwindigkeit berücksichtigen.
Und zum Blinken empfehle ich Blinkervariable zu erstellen. Das ist eine globale Boolean-Variable die in einem festen Takt umschaltet. Die kannst du dann überall verwenden, wo etwas blinken soll, z.B. auch bei der PZB.
Und zum Blinken empfehle ich Blinkervariable zu erstellen. Das ist eine globale Boolean-Variable die in einem festen Takt umschaltet. Die kannst du dann überall verwenden, wo etwas blinken soll, z.B. auch bei der PZB.
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Zu 1. Was passiert denn im Zusi-Führerstand? Ist das ein Bug von Zusi selbst, oder nur ein Problem, dass du die passende Größe nicht findest? (In Punkt 1 würde ich von Arnes Tipp abraten.)
Zu 2. und zum blinken generell: Funktioniert das bei dir überhaupt? Weil mit 2x digitalWrite wirst du normalerweise kein Blinken hinbekommen. Du wirst da beispielsweise so vorgehen müssen, wie Arne beschrieben hat.
Zu 2. und zum blinken generell: Funktioniert das bei dir überhaupt? Weil mit 2x digitalWrite wirst du normalerweise kein Blinken hinbekommen. Du wirst da beispielsweise so vorgehen müssen, wie Arne beschrieben hat.
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Hallo liebe Zusianen. Ich hab meinen arduino mit zusi verbunden. Ich habe nicht ganz verstanden was ist "Client.write (Abfrage). Ich habe 108 eingegeben ohne Ergebnis. Dann habe ich 166 probiert und war fast richtig. LM 85, LM 55 und Sifa haben funktioniert. Was ich nur brauche, ist die LEDs von den Türenknöpfen von einer 423. Dazu habe ich die Abschnitt von Lennart2210 hinzugefügt, leider unerfolgreich ..
Danke im voraus
Adam
Danke im voraus
Adam
Zuletzt geändert von Adam164 am 16.06.2020 13:56:10, insgesamt 1-mal geändert.
- nonesense
- Beiträge: 508
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Moin!
Dein Funktionsaufruf für die Abfrage ist für mich nicht schlüssig.
Kannst nicht nur einen Wert senden, sondern muss eine ganze Ganze Struktur übertragen, in der die benötigten Daten aufgelistet werden. Das ist sowohl beim Zusi2-Protokoll, als auch beim Zusi3-Protokoll so. Allerdings sind sie verschieden aufgebaut.
Welches Protokoll benutzt du denn?
Beim 3er sähe das z.B. so aus:
Erzeugen der Struktur:Dieses Array überträgst du dann so:
Die 150 steht dabei für die Anzahl der Zeichen in dem Array.
Gruß
Jens
Dein Funktionsaufruf für die Abfrage ist für mich nicht schlüssig.
Kannst nicht nur einen Wert senden, sondern muss eine ganze Ganze Struktur übertragen, in der die benötigten Daten aufgelistet werden. Das ist sowohl beim Zusi2-Protokoll, als auch beim Zusi3-Protokoll so. Allerdings sind sie verschieden aufgebaut.
Welches Protokoll benutzt du denn?
Beim 3er sähe das z.B. so aus:
Erzeugen der Struktur:
Code: Alles auswählen
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // Druck Hauptluftleitung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // Druck Bremszylinder
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // Druck Hauptluftbehälter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0, // Zugkraft gesamt
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x15, 0x0, // Fahrstufe
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1b, 0x0, // LM Schleudern
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1c, 0x0, // LM Gleiten
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen <<<<< T Ü R E N >>>>>
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7c, 0x0, // Zugkraft gesamt Steuerwagen
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x85, 0x0, // Fahrstufe Steuerwagen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
Code: Alles auswählen
client.write (Abfrage, 150);
Gruß
Jens
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Danke Jens für die Antwort. Es hat mir sehr geholfen um esbisschen besser zu verstehen. Ich benutze das Script von der Seite 11 (Zusi 3-protocoll). ALLES funktioniert in Ordnung
Jetzt versuche ich die Lämpchen vom den Türen von einer 423 richtig einzustellen.
Das "T" Lämpchen (Pin 25) funktioniert normal. Die Linke TT (43) und rechte TT (41) funktionieren aber nicht..
Jetzt versuche ich die Lämpchen vom den Türen von einer 423 richtig einzustellen.
Das "T" Lämpchen (Pin 25) funktioniert normal. Die Linke TT (43) und rechte TT (41) funktionieren aber nicht..
Code: Alles auswählen
#include <Dhcp.h> //Einbindung der Bibliotheken
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <SPI.h>
IPAddress ip(169, 254, 111, 122); //IP-Adresse vom Arduino Ethernet Shield
IPAddress server(169, 254, 111, 121); //IP-Adresse vom Zusi3-Rechner
byte mac[] = { 0x00, 0x1B, 0xB9, 0x84, 0xCB, 0x60 }; //MAC des Arduinos (fast frei wählbar)
// Byte Serie zum Verbindungsaufbau
uint8_t Anmeldung[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x4, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0xA, 0x0,
0x0, 0x0, 0x3, 0x0, 0x46, 0x61, 0x68, 0x72, 0x70, 0x75, 0x6C, 0x74, 0x5, 0x0, 0x0, 0x0, 0x4, 0x0, 0x32, 0x2E, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
// Byte Serie der angeforderten Daten, die der Server senden soll
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // Druck Hauptluftleitung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // Druck Bremszylinder
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // Druck Hauptluftbehälter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0, // Zugkraft gesamt
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x15, 0x0, // Fahrstufe
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1b, 0x0, // LM Schleudern
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1c, 0x0, // LM Gleiten
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen <<<<< T Ü R E N >>>>>
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7c, 0x0, // Zugkraft gesamt Steuerwagen
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x85, 0x0, // Fahrstufe Steuerwagen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
EthernetClient client;
union //Datentyp zur Abfrage des Knotens
{
byte b[4];
int i;
} dataLng;
union
{
byte b[2];
int16_t i;
} dataGroup;
int ebene = 0;
int16_t ebene1Status = 0;
int16_t ebene2Status = 0;
int16_t ebene3Status = 0;
int16_t ebene4Status = 0;
int count;// Testvariable für TEST LED blinken
union
{
byte b[4];
float f;
int i;
int16_t i16;
} nutzdata;
#define MAX_NUTZDATA 4
uint8_t clientForceRead()
{
while (!client.available()) {}
return client.read();
}
//Hauptprogramm
void setup() {
// Aus und Eingänge festlegen
pinMode(22, OUTPUT); //PIN22 Ausgang LM hohe Abbremsung ein
pinMode(23, OUTPUT); //PIN23 Ausgang LM ZS Aus
pinMode(24, OUTPUT); //PIN24 Ausgang LM HS Aus
pinMode(25, OUTPUT); //PIN25 Ausgang LM TAV
pinMode(26, OUTPUT); //PIN26 Ausgang LM SIFA
pinMode(27, OUTPUT); //PIN27 Ausgang LM 55
pinMode(28, OUTPUT); //PIN28 Ausgang LM 99
pinMode(29, OUTPUT); //PIN29 Ausgang LM 70
pinMode(30, INPUT); //PIN30 Eingang Lampentest MFA
pinMode(31, OUTPUT); //PIN31 Ausgang LM 85
pinMode(32, INPUT); //PIN32 Eingang Beleuchtung MFA heller
pinMode(33, OUTPUT); //PIN33 Ausgang LM Befehl 40
pinMode(34, INPUT); //PIN34 Eingang Beleuchtung MFA dunkler
pinMode(35, OUTPUT); //PIN35 Ausgang LM 500Hz
pinMode(37, OUTPUT); //PIN37 Ausgang LM 1000Hz
pinMode(21, OUTPUT); //PIN21 AUSGANG LM SCHLEUDERN
Ethernet.begin(mac, ip); // Zuordnung von IP und MAC an das Shield
Serial.begin(115200); // serielle Schnittstelle am USB Anschluss für Debugging
Serial1.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial2.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial3.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
while (!Serial) {
; // auf die serielle Schnittstelle warten
}
delay(1000); // Zeit, dass sich das Ethernet Shield initialisiert (1000ms)
Serial.println("verbinden..."); // Meldung an den seriellen Monitor
if (client.connect(server, 1436)) { // Sobald die Verbindung steht erfolgt die Meldung auf den Monitor
Serial.println("Verbunden!"); // Meldung verbunden
Serial.println(ip); // ip Client (PC) auf dem Monitor ausgeben
Serial.println(server); // ip Server (Zusi3) auf dem Monitor ausgeben
}
else {
Serial.println("Verbindung Fehlgeschlagen"); // Falls die Verbindung nicht klappt erfolgt die Meldung auf den Monitor
}
// Byte Serien zum Zusi Server schreiben
client.write (Anmeldung, 59);
client.write (Abfrage, 150); // *** Vorsicht !!! *** Muss der tatsaechlichen Anzahl von Bytes in der Serie "Abfrage" s.o. entsprechen
}
void(* resetFunc) (void) = 0; // Reset Funktion war nur für einen Test gedacht, wird nicht benötigt
// Endlosschleife
void loop() {
if (client.available()) {
dataLng.b[0] = clientForceRead();
dataLng.b[1] = clientForceRead();
dataLng.b[2] = clientForceRead();
dataLng.b[3] = clientForceRead();
if (dataLng.i == 0) { //BEGINN KNOTEN
ebene++;
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
if (ebene == 1) {
ebene1Status = dataGroup.i;
} else if (ebene == 2) {
ebene2Status = dataGroup.i;
} else if (ebene == 3) {
ebene3Status = dataGroup.i;
} else if (ebene == 4) {
ebene4Status = dataGroup.i;
}
} else if (dataLng.i == -1) { //ENDE KNOTEN
ebene--;
if (ebene < 0) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
}
} else if (dataLng.i == 1) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
} else { //ATTRIBUT
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
nutzdata.i = 0; //Löschen der Nutzdaten Variable
for(int i = 0; i < dataLng.i - 2; i++) { //Schleife zum Auslesen der Nutzdaten
byte b = clientForceRead();
if (i < MAX_NUTZDATA) {
nutzdata.b[i] = b;
}
}
//AUSWERTUNG
if ((ebene >= 1) && (ebene1Status == 0x0001)) { //VERBINDUNGSAUFBAU
} else if ((ebene >= 1) && (ebene1Status == 0x0002)) { //FAHRPULT
if ((ebene >= 2) && (ebene2Status == 0x000A)) { //FST-DATA
if ((ebene >= 3) && (ebene3Status == 0x0022)) { //NBÜ-DATA
} else if ((ebene >= 3) && (ebene3Status == 0x0064)) { //SIFA
if (ebene == 3) {
if (dataGroup.i == 0x0002) { // Status Sifa-Leuchtmelder
if (nutzdata.b[0] == 1) {digitalWrite(26, HIGH);} //SIFA Leuchtmelder einschalten
if (nutzdata.b[0] == 0) {digitalWrite(26,LOW);} // SIFA Leuchtmelder ausschalten
} else if (dataGroup.i == 0x0003) { // Status Sifa-Hupe
if (nutzdata.b[0] == 2) Serial.println("SIFA Hupe Zwangsbremsung");
if (nutzdata.b[0] == 1) Serial.println("SIFA Hupe Warnung");
if (nutzdata.b[0] == 0) Serial.println("SIFA Hupe aus");
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0065)) { //PZB
if ((ebene >= 4) && (ebene4Status == 0x0003)) { //Indusi-Betriebsdaten
if (ebene == 4) {
if (dataGroup.i == 0x0005) { // Melder 1000 Hz
if (nutzdata.b[0] == 1) {digitalWrite(37, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(37, LOW);}
} else if (dataGroup.i == 0x0006) { // Melder U
if (nutzdata.b[0] == 1) {digitalWrite(27, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(27, LOW);}
} else if (dataGroup.i == 0x0007) { // Melder M
if (nutzdata.b[0] == 1) {digitalWrite(29, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(29, LOW);}
} else if (dataGroup.i == 0x0008) { // Melder O
if (nutzdata.b[0] == 1) {digitalWrite(31, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(31, LOW);}
} else if (dataGroup.i == 0x000A) { // Melder 500 Hz
if (nutzdata.b[0] == 1) {digitalWrite(35, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(35, LOW);}
} else if (dataGroup.i == 0x000B) { // Melder Befehl
if (nutzdata.b[0] == 1) {digitalWrite(33, HIGH);}
if (nutzdata.b[0] == 0) {digitalWrite(33, LOW);}
}
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0066)) { //Türsystem
if (dataGroup.i == 0x000A) {
if(nutzdata.b[0] == 1) {
digitalWrite(25, HIGH);
digitalWrite(42, HIGH);
}
if(nutzdata.b[0] == 0) {
digitalWrite(25, LOW);
digitalWrite(42, LOW);
}
}else if(dataGroup.i == 0x0008) {
if(nutzdata.b[0] == 1) {digitalWrite(43, HIGH);}
if(nutzdata.b[0] == 0) {digitalWrite(43, LOW);}
if(nutzdata.b[0] == 2) {
digitalWrite(43, HIGH);
digitalWrite(43, HIGH);
}
}else if(dataGroup.i == 0x0009) {
if(nutzdata.b[0] == 1) {digitalWrite(41, HIGH);}
if(nutzdata.b[0] == 0) {digitalWrite(41, LOW);}
if(nutzdata.b[0] == 2) {
digitalWrite(41, HIGH);
digitalWrite(41, HIGH);
}
}
} else if (ebene == 2) {
if (dataGroup.i == 0x0001) { // Geschwindigkeit Meter/Sekunde
byte Geschw = nutzdata.f * 3.6;
//Serial.print("A");
//Serial.println(Geschw);
} else if (dataGroup.i == 0x000A) { // Zugkraft Ist/Achse in Newton
byte Zugkraft_ist = nutzdata.f;
//Serial.println(Zugkraft_ist);
} else if (dataGroup.i == 0x000C) { // Zugkraft Soll/Achse in Newton
byte Zugkraft_soll = nutzdata.f;
//Serial.println(Zugkraft_soll);
}
}
}
}
}
}
// wenn der Server getrennt wird, stoppt der Client und gibt seriell eine Meldung ab:
if (!client.connected()) {
Serial.println();
Serial.println("Verbindung abgebrochen");
client.stop();
// mache nichts:
while (true);
//resetFunc ();
}
}
Zuletzt geändert von Adam164 am 17.06.2020 20:25:28, insgesamt 2-mal geändert.
- nonesense
- Beiträge: 508
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Moin!
Bitte verwende für Code nicht den "Quote", sondern "Code". Am beste, du änderst deinen Beitrag noch. Das ist dann besser zu lesen.
Abgesehen davon, dass da ein paar Zeilen doppelt sind und die Formatierung nicht ganz optimal ist, sieht das aber gut aus.
Es ist ist manchmal hilfreich, wenn man sich den Zustand auf der seriellen Ausgabe anzeigen zu lassen. Und ich würde mir dabei alle Atribute im Konten 0x66 anzeigen lassen, z.B. so:Gruß
Jens
Bitte verwende für Code nicht den "Quote", sondern "Code". Am beste, du änderst deinen Beitrag noch. Das ist dann besser zu lesen.
Abgesehen davon, dass da ein paar Zeilen doppelt sind und die Formatierung nicht ganz optimal ist, sieht das aber gut aus.
Es ist ist manchmal hilfreich, wenn man sich den Zustand auf der seriellen Ausgabe anzeigen zu lassen. Und ich würde mir dabei alle Atribute im Konten 0x66 anzeigen lassen, z.B. so:
Code: Alles auswählen
if(dataGroup.i == 0x0008) {
Serial.print("Status Melder links: ");
Serial.println(nutzdata.b[0]);
}
Jens
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Danke nochmal Jens!!! Jetzt alles funktioniert ja perkeft! Auch, kann ich was mehr (vielleicht) entdecken bzw. entwickeln durch "Serial.print" Funktion
Unten poste ich mein Skript, wahrscheinlich hilft's man weiter
Gruß
Adam
Unten poste ich mein Skript, wahrscheinlich hilft's man weiter
Gruß
Adam
Code: Alles auswählen
#include <SPI.h>
#include <Ethernet.h> //<Ehternet2.h>
boolean running = false;
unsigned long interval = 500; // the time we need to wait
unsigned long previousMillis = 0; // millis() returns an unsigned long.
byte ZusiIP[4] = {192, 168, 0, 44};
float vv;
int hll = 0;
int n = 0;
int nn = 0;
int f = 1;
int x = 0;
int vIst;
int Data1[5];
int Eingangswerte[16];
int StartSerie[16] = { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 10, 0, 6, 0, 0, 0 };
int StartSerie2[16] = { 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0 };
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x1D, 0x8E };
IPAddress ip(169, 254, 196, 149);//ip adres Arduino Ethernet Shield
IPAddress server(169, 254, 196, 148); //ip Adresse Zusi3
// Byte Serie zum Verbindungsaufbau
uint8_t Anmeldung[] = { 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x4, 0x0, 0x0, 0x0, 0x2, 0x0, 0x2, 0x0, 0xA, 0x0,
0x0, 0x0, 0x3, 0x0, 0x46, 0x61, 0x68, 0x72, 0x70, 0x75, 0x6C, 0x74, 0x5, 0x0, 0x0, 0x0, 0x4, 0x0, 0x32, 0x2E, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
// Byte Serie der angeforderten Daten, die der Server senden soll
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // Druck Hauptluftleitung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // Druck Bremszylinder
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // Druck Hauptluftbehälter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0, // Zugkraft gesamt
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // Hauptschalter
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x15, 0x0, // Fahrstufe
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x20, 0x0, // LM Hochabbremsung Aus/Ein
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1b, 0x0, // LM Schleudern
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1c, 0x0, // LM Gleiten
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen <<<<< T Ü R E N >>>>>
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x7c, 0x0, // Zugkraft gesamt Steuerwagen
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x85, 0x0, // Fahrstufe Steuerwagen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
EthernetClient client;
union //Datentyp zur Abfrage des Knotens
{
byte b[4];
int i;
} dataLng;
union
{
byte b[2];
int16_t i;
} dataGroup;
int ebene = 0;
int16_t ebene1Status = 0;
int16_t ebene2Status = 0;
int16_t ebene3Status = 0;
int16_t ebene4Status = 0;
int count;// Testvariable für TEST LED blinken
union
{
byte b[4];
float f;
int i;
int16_t i16;
} nutzdata;
#define MAX_NUTZDATA 4
uint8_t clientForceRead()
{
while (!client.available()) {}
return client.read();
}
//Hauptprogramm
void setup() {
// Aus und Eingänge festlegen
pinMode(22, OUTPUT); //PIN22 Ausgang LM hohe Abbremsung ein
pinMode(23, OUTPUT); //PIN23 Ausgang LM TAV
pinMode(24, OUTPUT); //PIN24 Ausgang TT LINKS
pinMode(25, OUTPUT); //PIN25 Ausgang TT RECHTS
pinMode(26, OUTPUT); //PIN26 Ausgang LM SIFA
pinMode(27, OUTPUT); //PIN27 Ausgang LM 55
pinMode(28, OUTPUT); //PIN28 Ausgang LM 99
pinMode(29, OUTPUT); //PIN29 Ausgang LM 70
pinMode(30, INPUT); //PIN30 Eingang Lampentest MFA
pinMode(31, OUTPUT); //PIN31 Ausgang LM 85
pinMode(32, INPUT); //PIN32 Eingang Beleuchtung MFA heller
pinMode(33, OUTPUT); //PIN33 Ausgang LM Befehl 40
pinMode(34, INPUT); //PIN34 Eingang Beleuchtung MFA dunkler
pinMode(35, OUTPUT); //PIN35 Ausgang LM 500Hz
pinMode(37, OUTPUT); //PIN37 Ausgang LM 1000Hz
pinMode(21, OUTPUT); //PIN21 AUSGANG LM SCHLEUDERN
Ethernet.begin(mac, ip); // Zuordnung von IP und MAC an das Shield
Serial.begin(115200); // serielle Schnittstelle am USB Anschluss für Debugging
Serial1.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial2.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
Serial3.begin(19200); // serielle Ausgabe an den nächsten µC (falls vorhanden) für die Zeiger und Lampenausgabe
while (!Serial) {
; // auf die serielle Schnittstelle warten
}
delay(1000); // Zeit, dass sich das Ethernet Shield initialisiert (1000ms)
Serial.println("verbinden..."); // Meldung an den seriellen Monitor
if (client.connect(server, 1436)) { // Sobald die Verbindung steht erfolgt die Meldung auf den Monitor
Serial.println("Verbunden!"); // Meldung verbunden
Serial.println(ip); // ip Client (PC) auf dem Monitor ausgeben
Serial.println(server); // ip Server (Zusi3) auf dem Monitor ausgeben
}
else {
Serial.println("Verbindung Fehlgeschlagen"); // Falls die Verbindung nicht klappt erfolgt die Meldung auf den Monitor
}
// Byte Serien zum Zusi Server schreiben
client.write (Anmeldung, 59);
client.write (Abfrage, 154); // *** Vorsicht !!! *** Muss der tatsaechlichen Anzahl von Bytes in der Serie "Abfrage" s.o. entsprechen
}
void(* resetFunc) (void) = 0; // Reset Funktion war nur für einen Test gedacht, wird nicht benötigt
// Endlosschleife
void loop() {
if (client.available()) {
dataLng.b[0] = clientForceRead();
dataLng.b[1] = clientForceRead();
dataLng.b[2] = clientForceRead();
dataLng.b[3] = clientForceRead();
if (dataLng.i == 0) { //BEGINN KNOTEN
ebene++;
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
if (ebene == 1) {
ebene1Status = dataGroup.i;
} else if (ebene == 2) {
ebene2Status = dataGroup.i;
} else if (ebene == 3) {
ebene3Status = dataGroup.i;
} else if (ebene == 4) {
ebene4Status = dataGroup.i;
}
} else if (dataLng.i == -1) { //ENDE KNOTEN
ebene--;
if (ebene < 0) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
}
} else if (dataLng.i == 1) { //AUSNAHMEFEHLER: Sollte nicht auftreten, Hilfsweise Arduino neustarten
resetFunc ();
} else { //ATTRIBUT
dataGroup.b[0] = clientForceRead();
dataGroup.b[1] = clientForceRead();
nutzdata.i = 0; //Löschen der Nutzdaten Variable
for (int i = 0; i < dataLng.i - 2; i++) { //Schleife zum Auslesen der Nutzdaten
byte b = clientForceRead();
if (i < MAX_NUTZDATA) {
nutzdata.b[i] = b;
}
}
//AUSWERTUNG
if ((ebene >= 1) && (ebene1Status == 0x0001)) { //VERBINDUNGSAUFBAU
} else if ((ebene >= 1) && (ebene1Status == 0x0002)) { //FAHRPULT
if ((ebene >= 2) && (ebene2Status == 0x000A)) { //FST-DATA
if ((ebene >= 3) && (ebene3Status == 0x0022)) { //NBÜ-DATA
} else if ((ebene >= 3) && (ebene3Status == 0x0064)) { //SIFA
if (ebene == 3) {
if (dataGroup.i == 0x0002) { // Status Sifa-Leuchtmelder
if (nutzdata.b[0] == 1) {
digitalWrite(26, HIGH); //SIFA Leuchtmelder einschalten
}
if (nutzdata.b[0] == 0) {
digitalWrite(26, LOW); // SIFA Leuchtmelder ausschalten
}
} else if (dataGroup.i == 0x0003) { // Status Sifa-Hupe
if (nutzdata.b[0] == 2) Serial.println("SIFA Hupe Zwangsbremsung");
if (nutzdata.b[0] == 1) Serial.println("SIFA Hupe Warnung");
if (nutzdata.b[0] == 0) Serial.println("SIFA Hupe aus");
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0065)) { //PZB
if ((ebene >= 4) && (ebene4Status == 0x0003)) { //Indusi-Betriebsdaten
if (ebene == 4) {
if (dataGroup.i == 0x0005) { // Melder 1000 Hz
if (nutzdata.b[0] == 1) {
digitalWrite(37, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(37, LOW);
}
} else if (dataGroup.i == 0x0006) { // Melder U
if (nutzdata.b[0] == 1) {
digitalWrite(27, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(27, LOW);
}
} else if (dataGroup.i == 0x0007) { // Melder M
if (nutzdata.b[0] == 1) {
digitalWrite(29, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(29, LOW);
}
} else if (dataGroup.i == 0x0008) { // Melder O
if (nutzdata.b[0] == 1) {
digitalWrite(31, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(31, LOW);
}
} else if (dataGroup.i == 0x000A) { // Melder 500 Hz
if (nutzdata.b[0] == 1) {
digitalWrite(35, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(35, LOW);
}
} else if (dataGroup.i == 0x000B) { // Melder Befehl
if (nutzdata.b[0] == 1) {
digitalWrite(33, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(33, LOW);
}
}
}
}
} else if ((ebene >= 3) && (ebene3Status == 0x0066)) { //Türsystem
if (dataGroup.i == 0x000A) {
if (nutzdata.b[0] == 0) {
digitalWrite(23, LOW);
}
if (nutzdata.b[0] == 1) {
digitalWrite(23, HIGH);
}
}
// TT LINKS
else if (dataGroup.i == 0x0008) {
Serial.print("Status Melder links: ");
Serial.println(nutzdata.b[0]);
if (nutzdata.b[0] == 1) {
digitalWrite(24, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(24, LOW);
}
}
// TT RECHTS
else if (dataGroup.i == 0x0009) {
if (nutzdata.b[0] == 1) {
digitalWrite(25, HIGH);
}
if (nutzdata.b[0] == 0) {
digitalWrite(25, LOW);
}
}
//TT LINKS & RECHTS BLINKEND
unsigned long currentMillis = millis();
if (nutzdata.b[0] == 2 && currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
running = !running; // toggle running variable
digitalWrite(24, running); // indicate via LED
digitalWrite(25, running);
}
} else if (ebene == 2) {
if (dataGroup.i == 0x0001) { // Geschwindigkeit Meter/Sekunde
byte Geschw = nutzdata.f * 3.6;
//Serial.print("A");
//Serial.println(Geschw);
} else if (dataGroup.i == 0x000A) { // Zugkraft Ist/Achse in Newton
byte Zugkraft_ist = nutzdata.f;
//Serial.println(Zugkraft_ist);
} else if (dataGroup.i == 0x000C) { // Zugkraft Soll/Achse in Newton
byte Zugkraft_soll = nutzdata.f;
//Serial.println(Zugkraft_soll);
}
}
}
}
}
}
// wenn der Server getrennt wird, stoppt der Client und gibt seriell eine Meldung ab:
if (!client.connected()) {
Serial.println();
Serial.println("Verbindung abgebrochen");
client.stop();
// mache nichts:
while (true);
//resetFunc ();
}
}
Zuletzt geändert von Adam164 am 18.06.2020 05:45:08, insgesamt 1-mal geändert.
- Formsignal
- Beiträge: 138
- Registriert: 13.11.2018 23:34:14
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Ein kleiner Tipp an die Leute, die mit den Ethernet-Interfaces für die Arduinos Probleme haben. Ich selber nutze "clone" Interfaces aus Fernost und hatte immer wieder Probleme, dass diese sich nach einem Neustart nicht richtig initialisieren und keine Netzwerk-Verbindung aufgebaut wird. Es half nur ein Reset mittels dem Button. Die Symptome sind vorwiegend bei externen Netzteilen am Arduino und USB-Netzteilen aufgetreten.
Die Lösung ist denkbar einfach: Ein kleines RC-Netzwerk resettet das Interface kurz nach dem Kaltstart. Wird u.A. hier http://tigawd.blogspot.com/2015/05/ardu ... ernet.html gut beschrieben.
Die Lösung ist denkbar einfach: Ein kleines RC-Netzwerk resettet das Interface kurz nach dem Kaltstart. Wird u.A. hier http://tigawd.blogspot.com/2015/05/ardu ... ernet.html gut beschrieben.
Viele Grüße,
Franz aká Formsignal
Franz aká Formsignal
- Muckelchen
- Beiträge: 25
- Registriert: 25.06.2019 12:26:56
- Wohnort: Hannover
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Hallo in die Runde,
ich habe das Problem, dass die Lampen für die PZB unregelmäßig blinken. Bei durchschicht des Threads habe ich leider keine Antwort auf diese Frage gefunden (oder zumindest keine für Dumme, wie mich). Daher die Frage, ob da jemand eine Lösung und eventuell einen passenden Codeschnipsel kennt? Ich bin noch recht neu in dem Bereich, also sorry, falls ich die Lösung dafür irgendwie übersehen habe.
Danke schon mal im Vorraus.
Grüße
ich habe das Problem, dass die Lampen für die PZB unregelmäßig blinken. Bei durchschicht des Threads habe ich leider keine Antwort auf diese Frage gefunden (oder zumindest keine für Dumme, wie mich). Daher die Frage, ob da jemand eine Lösung und eventuell einen passenden Codeschnipsel kennt? Ich bin noch recht neu in dem Bereich, also sorry, falls ich die Lösung dafür irgendwie übersehen habe.
Danke schon mal im Vorraus.
Grüße
- nonesense
- Beiträge: 508
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Hallo Muckelchen,
dasThema wird auf Seite 11 behnadelt, wobei dort nicht direkt auf das Asychrone Blinken eingenagen wird.
Du musst dir das Blinken selber erzeugen. Dazu kanst du die Infos aus "Zustand Zugsicherung" und " Zusatzinfo Melderbild" verwenden.
Gruß
Jens
dasThema wird auf Seite 11 behnadelt, wobei dort nicht direkt auf das Asychrone Blinken eingenagen wird.
Du musst dir das Blinken selber erzeugen. Dazu kanst du die Infos aus "Zustand Zugsicherung" und " Zusatzinfo Melderbild" verwenden.
Gruß
Jens
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Hallo miteinander,
zunächst mal ein großes Dankeschön an alle, die ihr Wissen hier für andere zur Verfügung stellen. Das hat mir bereits sehr geholfen!
Ich bin gerade dabei das vielzitierte Skript für meine eigenen Zwecke etwas zu erweitern. PZB und Geschwindigkeitsanzeiger laufen bereits beide. Nun möchte ich auch ein umgebautes HL/HBL-Manometer hinzufügen. Da hapert es aber noch am Code und mir ist nicht ganz klar wieso.
Ich habe die Datenabfrage erweitert um
sowie
und zuletzt die Auswertung
Ich bekomme leider zu keinem Punkt die Ausgabe "HL" oder "HBL" über den Serial.print angezeigt -> dürfte bedeuten, dass nicht mal der Case 0x0002 bzw. 0x0004 ausgelöst wird. Da der Tacho aber munter und exakt jederzeit die Geschwindigkeit anzeigt, funktioniert die Switchanwendung generell zumindest.
Ich bin mir folglich auch nicht sicher, ob mir Zusi die Daten überhaupt sendet. Hat jemand eine Idee, warum das nicht funktioniert bzw. sieht jemand den Fehler?
Nochmals vielen Dank! (alleine schon für die bisherige Unterstützung!!!)
MaxK
zunächst mal ein großes Dankeschön an alle, die ihr Wissen hier für andere zur Verfügung stellen. Das hat mir bereits sehr geholfen!
Ich bin gerade dabei das vielzitierte Skript für meine eigenen Zwecke etwas zu erweitern. PZB und Geschwindigkeitsanzeiger laufen bereits beide. Nun möchte ich auch ein umgebautes HL/HBL-Manometer hinzufügen. Da hapert es aber noch am Code und mir ist nicht ganz klar wieso.
Ich habe die Datenabfrage erweitert um
Code: Alles auswählen
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0,
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // Geschwindigkeit m/s
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // Druck HL
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // Druck HBL
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1D, 0x0, // MG-Bremse
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x25, 0x0, // Fahrtrichtung Vorne
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x26, 0x0, // Fahrtrichtung Rueck
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x57, 0x0, // Zustand Federspeicherbremse
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // SIFA
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x65, 0x0, // Zugsicherung
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Türen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
Code: Alles auswählen
client.write (Abfrage, 122);
Code: Alles auswählen
else if (ebene == 2){
switch(dataGroup.i){
case 0x0001: //Geschwindigkeit in m/s
float geschwindigkeit = nutzdata.f * 3.6;
if (geschwindigkeit < 0) geschwindigkeit = 0 - geschwindigkeit;
if (geschwindigkeit == 0) analogWrite(Tacho, 0);
else if(geschwindigkeit <= 10) analogWrite(Tacho, geschwindigkeit /10* 8);
else if(geschwindigkeit <= 20) analogWrite(Tacho, 8+(geschwindigkeit- 10)/10* 4);
else if(geschwindigkeit <= 30) analogWrite(Tacho, 12+(geschwindigkeit- 20)/10* 12);
else if(geschwindigkeit <= 40) analogWrite(Tacho, 24+(geschwindigkeit- 30)/10* 13);
else if(geschwindigkeit <= 80) analogWrite(Tacho, 37+(geschwindigkeit- 40)/10* 14);
else if(geschwindigkeit <= 90) analogWrite(Tacho, 93+(geschwindigkeit- 80)/10* 13);
else if(geschwindigkeit <= 100) analogWrite(Tacho, 106+(geschwindigkeit- 90)/10* 15);
else if(geschwindigkeit <= 130) analogWrite(Tacho, 121+(geschwindigkeit-100)/10* 13);
else if(geschwindigkeit <= 140) analogWrite(Tacho, 160+(geschwindigkeit-130)/10* 12);
else if(geschwindigkeit <= 145) analogWrite(Tacho, 172+(geschwindigkeit-140)/10* 13);
else analogWrite(Tacho, 177);
break;
case 0x0002: //Druck HL
Serial.println("HL");
set_hl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
break;
case 0x0004: //Druck HBL
Serial.println("HBL");
set_hbl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
break;
}
Ich bin mir folglich auch nicht sicher, ob mir Zusi die Daten überhaupt sendet. Hat jemand eine Idee, warum das nicht funktioniert bzw. sieht jemand den Fehler?
Nochmals vielen Dank! (alleine schon für die bisherige Unterstützung!!!)
MaxK
- Carsten Hölscher
- Administrator
- Beiträge: 33467
- Registriert: 04.07.2002 00:14:42
- Wohnort: Braunschweig
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
In den Zusi-Netzwerkseinstellungen auf den Client doppelklicken zeigt die verschickten Daten an.
Carsten
Carsten
- nonesense
- Beiträge: 508
- Registriert: 15.07.2006 12:50:10
- Aktuelle Projekte: QDmi
Fahrpult Einheitsführerstand
Ludmilla - Wohnort: Köln
- Kontaktdaten:
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Um zu prüfen, ob die Daten auch in deiner switch/case-Anweisung ankommen, kannst du auch serielle Ausgaben an den stellen machen.
Und du kannst testweise die Geschwindigkeit auf den Manometern ausgeben, bzw. umgekehrt.
Und du kannst testweise die Geschwindigkeit auf den Manometern ausgeben, bzw. umgekehrt.
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Vielen Dank für euer Feedback!
Letztlich fehlten tatsächlich Klammern in der "Switch"-Anwendung, ohne die immer nach dem ersten Case abgebrochen wurde...
z.B.:
case 0x0002: { //Druck HL
Serial.println("HL");
set_hl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
break; }
Kleiner Tipp meinerseits für alle mit ähnlichen Problemen:
Schaut auch nach, ob eurer Fahrzeugmodell in Zusi die gewünschte Funktion überhaupt hat. Unser Stadler Flirt besitzt beispielsweise gar keine Federspeicherbremse, sodass ich dazu natürlich auch niemals den Zustand "Federspeicherbremse angelegt" vom Server gesendet bekomme;)
Letztlich fehlten tatsächlich Klammern in der "Switch"-Anwendung, ohne die immer nach dem ersten Case abgebrochen wurde...
z.B.:
case 0x0002: { //Druck HL
Serial.println("HL");
set_hl(nutzdata.f); //eigene Funktion zum Ansteuern des Schrittmotors
break; }
Kleiner Tipp meinerseits für alle mit ähnlichen Problemen:
Schaut auch nach, ob eurer Fahrzeugmodell in Zusi die gewünschte Funktion überhaupt hat. Unser Stadler Flirt besitzt beispielsweise gar keine Federspeicherbremse, sodass ich dazu natürlich auch niemals den Zustand "Federspeicherbremse angelegt" vom Server gesendet bekomme;)
- Johannes
- Beiträge: 3210
- Registriert: 14.03.2009 22:36:06
- Aktuelle Projekte: Zusitools (http://git.io/zusitools)
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Was hat der Arduino da für einen komischen C-Compiler am Start? Das sollte in normalem C keinen Unterschied machen, wenn man nicht grade Variablen in dem Block deklarieren will.
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Da war meine Vermutung mit den Klammern ja doch richtig... nachdem ich allerdings auch Arduino-Code ohne die Klammern gefunden habe, habe ich das als "wohl doch nicht" abgehakt
Re: Der Ardunio und direkte Ausgaben vom ZusiServer über TCP
Was ja hier der Fall ist:
Code: Alles auswählen
float geschwindigkeit = nutzdata.f * 3.6;
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat