hab den Code von L-Vosje mit kleinen Änderungen auf Deutsch noch rumfliegen, Fehler bitte per PN melden!
Code: Alles auswählen
#include <SPI.h>
#include <Ethernet.h> //<Ehternet2.h>
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(192, 168, 0, 100);//ip adres Arduino Ethernet Shield
IPAddress server(ZusiIP[0], ZusiIP[1], ZusiIP[2], ZusiIP[3]); //ip Adresse Zusi3
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
};
uint8_t Abfrage[] = { 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xA, 0x0, // Abfrage = "Serie"
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, // v Ist
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, // P HLL
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x3, 0x0, // P BrZyl
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4, 0x0, // P HBL
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x9, 0x0, // F Gesamt
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xD, 0x0, // I Fahrleitung LOK
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0xE, 0x0, // U Fahrleitung LOK
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x13, 0x0, // HS LOK
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x19, 0x0, // s Zurückgelegt
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x23, 0x0, // t
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4C, 0x0, // r Bogen
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x4F, 0x0, // a X
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x50, 0x0, // a y
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x52, 0x0, // Drehbeschleunigung X
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x53, 0x0, // Drehbeschleunigung Y
0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x64, 0x0, // Status SIFA
//0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x66, 0x0, // Status Türen
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF
};
EthernetClient client;
void setup() {
Ethernet.begin(mac, ip);
Serial.begin(9600); // Serial 1 für Debugging
Serial1.begin(19200);
Serial2.begin(19200);
Serial3.begin(19200); // Serial 3 für LM und Analoganzeigen
while (!Serial) {
; // Wartet, bis die serielle Schnittstelle Kontakt aufgebaut hat
}
delay(1000); // Zeit zum initialisieren
Serial.println("Verbinden...");
if (client.connect(server, 1436)) { // Wenn Verbindung erfolgreich auf Monitor ausgeben
Serial.println("Verbunden");
Serial.println(ip); // ip Client (Shield)
Serial.println(server); // ip Server (Zusi3)
}
else {
Serial.println("Verbinden fehlgeschlagen"); // Wenn Verbindung nicht erfolgreich auf Monitor ausgeben
}
client.write (Anmeldung, 59);
client.write (Abfrage, 166); // *** Achtung !!! *** Muss der tatsächlichen Anzahl von Bytes in der Serie entsprechen
}
float inputValue;
union u_tag {
byte b[4];
float fval;
} u;
void loop() {
if (client.available()) {
byte c = client.read();
Eingangswerte[16] = (c);
if (f == 1) {
for (int i = 0; i <= 15; i++) {
Eingangswerte[i] = Eingangswerte[i + 1];
}
n = 0; nn = 0;
for (int i = 0; i <= 15; i++) {
if (Eingangswerte[i] == StartSerie[i]) {
n++;
}
if (Eingangswerte[i] == StartSerie2[i]) {
nn++;
}
}
if (n == 16 || nn == 16) {
byte c = client.read();
//************Sifa******************************************************************************************
}
//************Türen******************************************************************************************
if (c == 102)
{
}
//------------------------------------------------
//************Zugbeeinflussung******************************************************************************************
if (c == 101) // Nicht in der Serie!
{
}
//------------------------------------------------
else //Andere Datenverarbeitung
if (c != 100 && c != 101 && c != 102) {
{
Data1[0] = c; //ID
x = client.read(); //leeres High-Byte der ID
Data1[1] = client.read(); //Wert
Data1[2] = client.read(); //Wert
Data1[3] = client.read(); //Wert
Data1[4] = client.read(); //Wert
u.b[0] = Data1[1];
u.b[1] = Data1[2];
u.b[2] = Data1[3];
u.b[3] = Data1[4];
inputValue = (u.fval);
//************Geschwindigkeit******************************************************************************************
if (Data1[0] == 0x1) {
byte v = inputValue * 3.6;
vIst = v;
Serial3.print("A");
Serial3.println(v);
if (v >= 38)
{
Serial3.println("L1F");//LM Hochabbremsung an
}
else
{
Serial3.println("L1f");//LM Hochabbremsung aus
}
}
//************Durck HLL******************************************************************************************
if (Data1[0] == 0x2) {
hll = inputValue * 10;
int inputValue = 1180 - (hll * 4.66);
Serial3.print("#6 P");
Serial3.print(inputValue);
Serial3.println(" T1000");
Serial.print("#6 P");
Serial.print(inputValue);
Serial.println(" T1000");
}
//************Druck BrZyl******************************************************************************************
if (Data1[0] == 0x3) {
hll = inputValue * 10;
int inputValue = 730 + (hll * 26.6);
Serial3.print("#7 P");
Serial3.print(inputValue);
Serial3.println(" T1000");
Serial.print("#7 P");
Serial.print(inputValue);
Serial.println(" T1000");
}
//************Beschleunigung******************************************************************************************
if (Data1[0] == 0x4F) {
vv = inputValue * 2000;
Serial2.println(vv);
}
//************Radius******************************************************************************************
if (Data1[0] == 0x4C) {
vv = int(0 - (inputValue * 1000));
if (vv > 3500) {
vv = 3500;
}
if (vv < -3500) {
vv = -3500;
}
Serial1.println(vv);
//Serial.println(vv);
}
//************Uhrzeit******************************************************************************************
if (Data1[0] == 0x23) {
long ZeitInSekunden = inputValue * 86400;
long Stunden = ZeitInSekunden / 3600;
long Minuten = (ZeitInSekunden - (Stunden * 3600)) / 60;
long Sekunden = (ZeitInSekunden - (Stunden * 3600) - (Minuten * 60));
Serial3.print("T");
Serial.print("T");
if (Stunden < 10) Serial3.print("0");
if (Stunden < 10) Serial.print("0");
Serial3.print(Stunden);
Serial.print(Stunden);
Serial.print(":");
if (Minuten < 10) Serial3.print("0");
if (Minuten < 10) Serial.print("0");
Serial3.println(Minuten);
Serial.println(Minuten);
}
//************Oberspannung******************************************************************************************
if (Data1[0] == 0xE) {
int vv = (inputValue / 100);
Serial3.print("E");
Serial3.println(vv);
Serial.print("Spanning "); Serial.println(vv);
}
//************Zugkraft gesamt******************************************************************************************
if (Data1[0] == 0x9) {
int vv = (inputValue / 100);
Serial3.print("D");
Serial3.println(vv);
Serial.print("Kracht "); Serial.println(vv);
}
//------------------------------------------------
do {
x = client.read(); // 255
//------------------------------------------------
if (x != 255) {
x = client.read(); //leeres Byte
x = client.read(); //leeres Byte
x = client.read(); //leeres Byte
Data1[0] = client.read(); //ID
x = client.read(); //leeres Byte, HIGH-Byte der ID
Data1[1] = client.read(); //Wert
Data1[2] = client.read(); //Wert
Data1[3] = client.read(); //Wert
Data1[4] = client.read(); //Wert
u.b[0] = Data1[1];
u.b[1] = Data1[2];
u.b[2] = Data1[3];
u.b[3] = Data1[4];
inputValue = (u.fval);
//************Geschwindigkeit******************************************************************************************
if (Data1[0] == 0x1) {
byte v = inputValue * 3.6;
vIst = v;
Serial3.print("A");
Serial3.println(v);
if (v >= 38)
{
Serial3.println("L1F");//LM Hochabbremsung an
}
else
{
Serial3.println("L1f");//LM Hochabbremsung aus
}
}
//************Druck HLL******************************************************************************************
if (Data1[0] == 0x2) {
hll = inputValue * 10;
int inputValue = 1180 - (hll * 4.66);
Serial3.print("#6 P");
Serial3.print(inputValue);
Serial3.println(" T1000");
Serial.print("#6 P");
Serial.print(inputValue);
Serial.println(" T1000");
}
//************Druck BrZyl******************************************************************************************
if (Data1[0] == 0x3) {
hll = inputValue * 10;
int inputValue = 730 + (hll * 26.6);
Serial3.print("#7 P");
Serial3.print(inputValue);
Serial3.println(" T1000");
Serial.print("#7 P");
Serial.print(inputValue);
Serial.println(" T1000");
}
//************Beschleunigung******************************************************************************************
if (Data1[0] == 0x4F) {
vv = inputValue * 2000;
Serial2.println(vv);
}
//************Radius******************************************************************************************
if (Data1[0] == 0x4C) {
vv = int(0 - (inputValue * 1000));
if (vv > 3500) {
vv = 3500;
}
if (vv < -3500) {
vv = -3500;
}
Serial1.println(vv);
//Serial.println(vv);
}
//************Uhrzeit******************************************************************************************
if (Data1[0] == 0x23) {
//Serial.print("Zeit in Prozent: "); Serial.println(inputValue, DEC);
long ZeitInSekunden = inputValue * 86400;
long Stunden = ZeitInSekunden / 3600;
long Minuten = (ZeitInSekunden - (Stunden * 3600)) / 60;
long Sekunden = (ZeitInSekunden - (Stunden * 3600) - (Minuten * 60));
Serial3.print("T");
Serial.print("T");
if (Stunden < 10) Serial3.print("0");
if (Stunden < 10) Serial.print("0");
Serial3.print(Stunden);
Serial.print(Stunden);
Serial.print(":");
if (Minuten < 10) Serial3.print("0");
if (Minuten < 10) Serial.print("0");
Serial3.println(Minuten);
Serial.println(Minuten);
}
//************Oberspannung******************************************************************************************
if (Data1[0] == 0xE) {
int vv = (inputValue / 100);
Serial3.print("E");
Serial3.println(vv);
Serial.print("Spanning "); Serial.println(vv);
}
//************Zugkraft gesamt******************************************************************************************
if (Data1[0] == 0x9) {
int vv = (inputValue / 100);
Serial3.print("D");
Serial3.println(vv);
Serial.print("Kracht "); Serial.println(vv);
}
}
}
while (x != 255);
}
}
}
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("Verbindung abgebrochen");
client.stop();
// do nothing:
while (true);
}
}