Hi zusammen, ich versuche mich zur zeit an einem eigenen Sketch für eine tpm2.net steuerung meiner 15x11 matrix mit ws2812B Led stripes.
Da ich bisher aber noch keine Große erfahrung mit arduino und dem ethernet shield habe, so wie mit der Arduino Programmierung, versuche ich aus vorhandenen Sketches etwas zusammen zu basteln.
über usb kann ich die led´s bereits mit jinx über tpm2 ansteuern. der Code dazu sieht wie folgt aus:
#include "pt.h"
#include "FastLED.h"
/* LED und Arduino Variablen */
#define NUM_LEDS 165 // Number of LEDs
#define MAX_ARGS 500 // Max Number of command arguments
#define BAUDRATE 500000 // Baudrate
#define SERIAL Serial // Serial port for communication
#define SERIAL_DEBUG Serial // Serial port for debugging
#define DATA_PIN 5 // PIN where LEDs are connected/Used for TM1809/WS2811 chipsets, because they dont use SPI
//#define CLOCK_PIN 4 // used for some SPI chipsets, e.g. WS2801
#define BRIGHTNESS 127 // define global brightness 0..255
//#define taster 12
//choose your LED chipset in void setup()
enum Protocol
{
// positions
posStart = 0,
posType = 1,
posFsHigh = 2,
posFsLow = 3,
posData = 4,
// bytes
tpm2Start = 0xc9,
tpm2DataFrame = 0xda,
tpm2Command = 0xc0,
tpm2Answer = 0xaa,
tpm2End = 0x36,
tpm2Ack = 0xAC
};
enum Mode
{
mNone,
mCommunication,
mProgram
};
struct Data
{
int pos;
uint8_t type;
uint16_t fs;
uint8_t command;
CRGB rgb[NUM_LEDS];
} data;
byte args[MAX_ARGS];
unsigned long lastDataAt = 0;
//int program = 0;
//int mode = mNone;
int effectDelay = 100;
static struct pt pt1;
void setup()
{
oneColorAll(0, 0, 20);
Serial.begin(BAUDRATE);
delay(2000);
oneColorAll(0, 0, 0);
//memset(data.rgb, 0, sizeof(struct CRGB) * NUM_LEDS);
FastLED.addLeds<WS2812, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
}
/* loop
*/
void loop()
{
if (Serial.available())
{
doCommunication();
}
}
/* do communication
*/
void doCommunication()
{
// read ...
while (SERIAL.available() > 0)
{
byte val = Serial.read();
if (val == tpm2Start || data.pos == posStart ) { //&& val == tpm2Start // Startbyte
resetVars();
}
else if (val == tpm2Start)
resetVars();
else if (data.pos == posType && (val == tpm2DataFrame || val == tpm2Command)) // Block-Art
data.type = val;
else if (data.pos == posFsHigh) // Framesize (High Bit)
{
data.fs = (val << 8) & 0xFF00;
if (data.fs > NUM_LEDS * 3)
{
resetVars();
continue;
}
}
else if (data.pos == posFsLow) // Framesize (Low byte)
{
data.fs += val & 0x00FF;
if (data.fs > NUM_LEDS * 3)
{
resetVars();
continue;
}
}
else if (data.pos == posData + data.fs && val == tpm2End) { // End Byte
parsePacket();
}
else if (data.pos >= posData && data.pos < posData + data.fs){ // Bytes zwischen Header und Ende lesen
evaluateData(val);
}
data.pos++;
}
}
/* evaluate data
*/
void evaluateData(byte val)
{
if (data.type == tpm2DataFrame) // frame data
{
uint8_t* rgb = (uint8_t*)data.rgb;
rgb[data.pos - posData] = val;
}
}
/* reset variables
*/
void resetVars()
{
memset(&data, 0, sizeof(Data));
//oneColorAll(0, 20, 0);
//data.rgb = (struct CRGB*)FastSPI_LED.getRGBData();
memset(data.rgb, 0, NUM_LEDS * sizeof(struct CRGB));
}
/* parse packet
*/
void parsePacket()
{
switch (data.type)
{
case tpm2DataFrame:
{
showLeds();
//break;
}
default:
; //break;
}
SERIAL.write(tpm2Ack);
resetVars();
data.pos = -1;
}
/* set LED color
*/
void setLedColor(int led, uint8_t r, uint8_t g, uint8_t b)
{
data.rgb[led].r = r;
data.rgb[led].g = g;
data.rgb[led].b = b;
}
/* one Color All
*/
void oneColorAll(uint8_t r, uint8_t g, uint8_t b)
{
resetVars();
for (int led = 0; led < NUM_LEDS; led++)
setLedColor(led, r, g, b);
showLeds();
//effectDelay = 1000;
}
/* Output Leds
*/
void showLeds()
{
FastLED.show();
}
Alles anzeigen
In diesen code möchte ich aber zum 1. einmal das problem beseitigen, dass man das sketch immer erst neu aufspielen muss, sonnst läuft es nach einem Stromverlust nicht mehr.
zum anderen sollen die daten die mir dann via netzwerk gesendet werden so wie im usb beispiel verarbeitet werden.
Toll wäre ein code der so wohl auf USB (TPM2) wie auch auf (TPM2.net) via Lan reagiert. das wäre dann eine schöne geschichte für alle die mit matrixen arbeitet oder versuchen wollen was aufzubauen.
Würde mich freuen wenn mir jemand der etwas mehr ahnung von der Materie hat etwas unter die Arme greifen könnte.