projekte:2023:wermaclearsign

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);
}
  • projekte/2023/wermaclearsign.txt
  • Zuletzt geändert: 2023/02/07 17:19
  • von dominik