==== WERMA ClearSIGN Hack ==== {{:projekte:2023:20230207_180833.jpg?400|}} Dieser Code ermöglcht es die WERMA ClearSIGN direkt über UART anzusteuern, anstelle von IO-Link. Hierfür muss auf der Hauptleiterplatte das Signal zu den Leuchtsegmenten durchtrennt werden und ein UART-Signal eingespeist werden. Hier der Code für Arduino: #include /** * Protokoll * Baudrate 38400 * * Byte 0: 0 * Byte 1: 100 * Byte 2: 0/1 Blau 1 * Byte 3: 100 Blau Helligkeit in % * Byte 4: 0/1 Grün 1 * Byte 5: 100 Grün Helligkeit in % * Byte 6: 0/1 Rot 1 * Byte 7: 100 Rot Helligkeit in % * Byte 8: 0/1 Blau 1 * Byte 9: 100 Blau Helligkeit in % * Byte 10: 0/1 Grün 1 * Byte 11: 100 Grün Helligkeit in % * Byte 12: 0/1 Rot 1 * Byte 13: 100 Rot Helligkeit in % * Byte 14: 0/1 Blau 1 * Byte 15: 100 Blau Helligkeit in % * Byte 16: 0/1 Grün 1 * Byte 17: 100 Grün Helligkeit in % * Byte 18: 0/1 Rot 1 * Byte 19: 100 Rot Helligkeit in % * Byte 20: 0/1 Blau 1 * Byte 21: 100 Blau Helligkeit in % * Byte 22: 0/1 Grün 1 * Byte 23: 100 Grün Helligkeit in % * Byte 24: 0/1 Rot 1 * Byte 25: 100 Rot Helligkeit in % * Byte 26: 255 * */ // Set up a new SoftwareSerial object with RX in digital pin 10 and TX in digital pin 11 SoftwareSerial mySerial(10, 11); byte state = 0; byte r1 = 0; byte g1 = 0; byte b1 = 0; byte r2 = 0; byte g2 = 0; byte b2 = 0; byte r3 = 0; byte g3 = 0; byte b3 = 0; byte r4 = 0; byte g4 = 0; byte b4 = 0; void setup() { // Set the baud rate for the SerialSoftware object mySerial.begin(38400); } void loop() { switch(state) { case 0: if(b1 > 0) b1--; if(r2 > 0) r2--; if(g3 > 0) g3--; r1++; g2++; b3++; if(r1 == 100) state = 1; break; case 1: if(r1 > 0) r1--; if(g2 > 0) g2--; if(b3 > 0) b3--; g1++; b2++; r3++; if(g1 == 100) state = 2; break; case 2: if(g1 > 0) g1--; if(b2 > 0) b2--; if(r3 > 0) r3--; b1++; r2++; g3++; if(b1 == 100) state = 0; break; } mySerial.write((byte)0); mySerial.write((byte)100); mySerial.write((byte)1); //B mySerial.write((byte)b1); mySerial.write((byte)1); //G mySerial.write((byte)g1); mySerial.write((byte)1); //R mySerial.write((byte)r1); mySerial.write((byte)1); //B mySerial.write((byte)b2); mySerial.write((byte)1); //G mySerial.write((byte)g2); mySerial.write((byte)1); //R mySerial.write((byte)r2); mySerial.write((byte)1); //B mySerial.write((byte)b3); mySerial.write((byte)1); //G mySerial.write((byte)g3); mySerial.write((byte)1); //R mySerial.write((byte)r3); mySerial.write((byte)1); //B mySerial.write((byte)b1); mySerial.write((byte)1); //G mySerial.write((byte)g1); mySerial.write((byte)1); //R mySerial.write((byte)r1); mySerial.write((byte)255); delay(10); }