Ok here is what i have so far…
but there are 380 rows of code
void setup()
{
lcd.begin(20, 4);
lcd.clear();
lcd.setCursor(4, 1);
lcd.print("INITIALIZING");
Serial.begin(115200);
Serial1.begin(9600, SERIAL_8E2);
Serial2.begin(9600, SERIAL_8E2);
OpMode = 0;
ElNeg = false;
AzNeg = false;
A_LED_DOZ = 53;
A_LED_TLG = 52;
pinMode(A_LED_DOZ, OUTPUT);
pinMode(A_LED_TLG, OUTPUT);
x_TLG_analyse = true;
x_out_act = true;
/* lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AZIMUTH:");
lcd.setCursor(0, 1);
lcd.print("ELEVATION:");
lcd.setCursor(17, 0);
lcd.print("MIL");
lcd.setCursor(17, 1);
lcd.print("MIL");*/
}
void loop()
{
//EINGABE
if (digitalRead(7))
{
//Serial.println("SIMULATIONSBETRIEB");
OpMode = 1;
}
else
{
//Serial.println("DATEN-SICHTBETRIEB");
OpMode = 2;
}
//VERARBEITUNG
switch (OpMode)
{
case 1:
//OpMode 1=Simulationsbetrieb (SU_Tx)
break;
case 2:
//OpMode 2=Datensichtbetrieb (DOZ_Rx)
//Eingabe von DOZ
//if (x_TLG_analyse == true && x_out_act == true)
//{
//RxByte = 8;
//Serial2.readBytes(inBuffer, RxByte);
//}
while(Serial2.available() > 0)
inBuffer1[0] = Serial2.read();
/*
inBuffer[0] = Received Byte 1 = HEADER (5C, HEX)
inBuffer[1] = Received Byte 2 = Azimuth, MsPart
inBuffer[2] = Received Byte 3 = Azimuth, LsPart
inBuffer[3] = Received Byte 4 = Elevation, MsPart
inBuffer[4] = Received Byte 5 = Elevation, LsPart
inBuffer[5] = Received Byte 6 = N/A (FF, HEX)
inBuffer[6] = Received Byte 7 = Logikinfo (LSB = on Target)
inBuffer[7] = Received Byte 8 = EXOR Byte 1-7
*/
if (inBuffer1[0]==0x5C)
{
RxByte = 7;
Serial2.readBytes(inBuffer, RxByte);
//Auswertung starten
x_TLG_analyse = false;
x_CRP_TLG = false;
// Azimuth Wert zusammenführen
AzMSB = inBuffer[1];
AzLSB = inBuffer[2];
for (int i=0; i<=7; i++)
{
bitTemp = bitRead(AzMSB,i);
bitWrite(Az,i+8, bitTemp);
}
for (int i=0; i<=7; i++)
{
bitTemp = bitRead(AzLSB,i);
bitWrite(Az,i, bitTemp);
}
//Elevation Wert zusammenführen
ElMSB = inBuffer[3];
ElLSB = inBuffer[4];
for (int i=0; i<=7; i++)
{
bitTemp = bitRead(ElMSB,i);
bitWrite(El,i+8, bitTemp);
}
for (int i=0; i<=7; i++)
{
bitTemp = bitRead(ElLSB,i);
bitWrite(El,i, bitTemp);
}
El = UINTtoINT(El);
//Logikinfo auswerten
x_DOZonTg = bitRead(inBuffer[5], 0);
//Auswertung beendet
x_TLG_analyse = true;
}
else
{
x_TLG_analyse = false;
x_CRP_TLG = true;
x_TLG_analyse = true;
}
Serial.print(inBuffer1[0], HEX);
Serial.print("\t");
Serial.print(inBuffer[1], HEX);
Serial.print("\t");
Serial.print(inBuffer[2], HEX);
Serial.print("\t");
Serial.print(inBuffer[3], HEX);
Serial.print("\t");
Serial.print(inBuffer[4], HEX);
Serial.print("\t");
Serial.print(inBuffer[5], HEX);
Serial.print("\t");
Serial.print(inBuffer[6], HEX);
Serial.print("\t");
Serial.print(inBuffer[7], HEX);
Serial.print("\t");
Serial.print(inBuffer[8], HEX);
Serial.print("\t");
Serial.print(inBuffer[9], HEX);
Serial.print("\t");
Serial.println(inBuffer[10], HEX);
break;
}
//AUSGABE
//Ausgabe aktiv
x_out_act = false;
/*if (x_CRP_TLG)
{
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("TELEGRAM NOT CORRECT");
}
else
{*/
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AZIMUTH:");
lcd.setCursor(0, 1);
lcd.print("ELEVATION:");
lcd.setCursor(17, 0);
lcd.print("MIL");
lcd.setCursor(17, 1);
lcd.print("MIL");
digitalWrite(A_LED_TLG, x_CRP_TLG);
digitalWrite(A_LED_DOZ, x_DOZonTg);
//OpMode
switch (OpMode)
{
case 1:
lcd.setCursor(1, 2);
lcd.print("SIMULATIONSBETRIEB");
break;
case 2:
lcd.setCursor(1, 2);
lcd.print("DATEN-SICHTBETRIEB");
break;
default:
lcd.setCursor(2, 1);
lcd.print("CHECK SWITCH S1");
break;
}
//DOZ auf Ziel
if (x_DOZonTg)
{
lcd.setCursor(4, 3);
lcd.print("DOZ AUF ZIEL");
//digitalWrite(A_LED_DOZ, true);
}
else
{
lcd.setCursor(0, 3);
lcd.print(" ");
//digitalWrite(A_LED_DOZ, false);
}
//AZ-EL Werte
//Serial.print("AZIMUTH =\t");
//Serial.println(Az);
//Serial.print("ELEVATION =\t");
//Serial.println(El);
if (El <= 0)
{
lcd.setCursor(11, 1);
lcd.print("-");
El = El * -1;
ElNeg = true;
}
else
{
lcd.setCursor(11, 1);
lcd.print(" ");
ElNeg = false;
}
SEl = String(El);
lenEl = SEl.length();
lcd.setCursor(12, 1);
lcd.print(" ");
switch (lenEl)
{
case 4: //Stringlänge 4
cursEl=12;
break;
case 3: //Stringlänge 3
cursEl=13;
break;
case 2: //Stringlänge 2
cursEl=14;
break;
case 1: //Stringlänge 1
cursEl=15;
break;
default:
lcd.setCursor(12 ,1);
lcd.print(" ");
cursEl=12;
break;
}
// set Cursor Pos in relation to Az-Value (Komma immer an der gleichen Stelle)
SAz = String(Az);
lenAz = SAz.length();
lcd.setCursor(12, 0);
lcd.print(" ");
switch (lenAz)
{
case 4: //Stringlänge 4
cursAz=12;
break;
case 3: //Stringlänge 3
cursAz=13;
break;
case 2: //Stringlänge 2
cursAz=14;
break;
case 1: //Stringlänge 1
cursAz=15;
break;
default:
lcd.setCursor(12 ,0);
lcd.print(" ");
cursAz=12;
break;
}
//print Az, El Values to LCD
lcd.setCursor(cursAz ,0);
lcd.print(Az);
lcd.setCursor(cursEl, 1);
lcd.print(El);
//Ausgabe aktiv
x_out_act = true;
//}
}
/*************************************************************************************
** Umrechnung UNSIGNED INT to SIGNED INT (2nd Complement)
*************************************************************************************/
int UINTtoINT(unsigned int input)
{
//Signed INT to Unsigned INT umrechunng
//2er-Komplement = MSB sign bit, Rest invertiert, +1
int result;
byte temp_array[15];
for (int i=0; i<15; i++)
{
temp_array[i] = bitRead(input, i);
}
for (int i=0; i<15; i++)
{
switch (temp_array[i])
{
case 0:
temp_array[i] = 1;
break;
case 1:
temp_array[i] = 0;
break;
}
}
for (int i=0; i<15; i++)
{
bitWrite(result, i, temp_array[i]);
}
bitWrite(result, 15, 1); //Mark as negative
result=result+1;
return result;
}