WERMA ClearSIGN Hack

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 <SoftwareSerial.h>
/**
* 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);
}