also von den sedu boards halte ich momentan nicht all zu viel da diese auf 256 led begrenzt sind, so wie ich das bei einem gelesen habe.
Alternativ ginge natürlich auch das TPM2 Protokoll, bei diesem hab ich zumindest mir dem Testcode den ich im Netz gefunden habe schon einen Blinker nachdem die Serial Verbíndung aufgebaut wurde.
nur hab ich damit leider Auch noch keinen rechten erfolg verbuchen können. liegt evtl daran das ich warscheinlich noch ein paar parameter falsch habe.
Im debug modus konnte ich zumindest mal einen befehl hin und her senden so das ich antwort vom arduino erhalte. doch die programme davon hab ich nicht zum laufen gebracht.
#include <pt.h>
#include "FastLED.h"
/*==============================================================================*/
/* LED und Arduino Variablen */
/*==============================================================================*/
#define NUM_LEDS 40 // Number of LEDs
#define MAX_ARGS 10 // 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 6 // 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 255 // define global brightness 0..255
//choose your LED chipset in void setup()
/*==============================================================================*/
/* TPM2 Variablen */
/*==============================================================================*/
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;
/*==============================================================================*/
/* Variablen für Effekte */
/*==============================================================================*/
int BOTTOM_INDEX = 0;
int TOP_INDEX = int(NUM_LEDS/2);
int EVENODD = NUM_LEDS%2;
/*==============================================================================*/
/* debug code
/*==============================================================================*/
// comment this line out to disable debugging
//#define DEBUG
#ifdef DEBUG
void debug(const char* str)
{
SERIAL_DEBUG.println(str);
}
void debug(const char* str, uint16_t val, int fmt = DEC)
{
SERIAL_DEBUG.print(str);
SERIAL_DEBUG.println(val, fmt);
}
int freeRam()
{
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}
#else
# define debug( ... )
#endif
void setup()
{
SERIAL.begin(BAUDRATE);
delay(1000);
memset(data.rgb, 0, sizeof(struct CRGB) * NUM_LEDS);
// Uncomment one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<TM1804, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<TM1809, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastSPI_LED2.addLeds<WS2811, DATA_PIN, GRB>(data.rgb+18, NUM_LEDS/3);
// FastLED.addLeds<WS2811, 8, RGB>(data.rgb + 225, NUM_LEDS/4);
// FastLED.addLeds<WS2812, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<WS2812B, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
FastLED.addLeds<NEOPIXEL, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<WS2811_400, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<UCS1903, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<WS2801, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<SM16716, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<LPD8806, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(data.rgb, NUM_LEDS);
// FastLED.addLeds<WS2811, DATA_PIN, RGB>(data.rgb, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
oneColorAll(255,0,0);
#ifdef DEBUG
SERIAL_DEBUG.begin(BAUDRATE);
// wait for serial port to connect. Needed for Leonardo only
while (!SERIAL_DEBUG)
delay(1);
SERIAL_DEBUG.println("Setup done");
#endif
memset(args, 0, MAX_ARGS);
resetVars();
PT_INIT(&pt1);
}
/*==============================================================================*/
/* Thread für Programm/Effekte
/*==============================================================================*/
static int playProgramThread(struct pt *pt)
{
static unsigned long timestamp = 0;
PT_BEGIN(pt);
while(1)
{
PT_WAIT_UNTIL(pt, millis() - timestamp > effectDelay);
playProgram();
timestamp = millis();
}
PT_END(pt);
}
/*==============================================================================*/
/* loop
/*==============================================================================*/
Alles anzeigen