psieg/Lightpack

How to use with 12V 5050 light strips that have a R G and B on the strip

Le0nyx opened this issue · 2 comments

Hello,

I would like to build my own Ambient lights out of the 5050 LED Strips. I have made the circuit necessary, but was wondering if i needed to change something within Prismatik to give the arduino the rgb values instead of what i think it does the custom adressable LED values. How would i do that?
Would appreciate some help a lot. I have the circuitry all set up only need the software for it and maybe the code on the arduino.

Screenshot 2024-07-19 193332

hi
prismatik does not require special configuration
but your board has to speak one of the protocols supported by prismatik
and in prismatik you set that, and 1 (one) LED, since your strip is not addressable (as per the schematic you are showing)

Hello there,

I actually found the solution for my problem. There is nothing wrong with Prismatik.
Some settings do need to be adjusted for it to work correctly, although I found out what good middle point i need to use for it.
The Arduino just needs some easing to get rid of the flickering. Though be aware with me having some values under zero in my code the lights reach mathematically never zero, but it turned out I kind of like it still being a bit bright even when turning it off in Prismatik.

Though that issue can be handled by a simple if statement set to if it recieves for all 3 values zero or near zero

Here my notes for settings i took:

MOSFETS NEEDED FOR THIS PROJECT RESISTORS AND CABLES NEEDED AND AN ARDUINO

I used Prismatik for this: https://github.com/psieg/Lightpack For what to grab deactivate all other zones and just drag the 1 over the full screen 4 amps max and 50 mili amps per led

screen grabbing average color on all leds 130 ms of frames overbrighten on 36 scene luminosity threshold 12 minimum luminosity level gamma 2.00 overall brightness 100 brightness cap 100

if static light change to mood light and then static and choose colour

The code i have on the arduino actually:

#define RED_PIN 9
#define GREEN_PIN 10
#define BLUE_PIN 11

float currentRed = 0;
float currentGreen = 0;
float currentBlue = 0;

int targetRed = 0;
int targetGreen = 0;
int targetBlue = 0;

const int updatesPerSecond = 60; // Adjust this value for the desired updates per second
const int delayTime = 1000 / updatesPerSecond; // Delay between updates

void setup() {
Serial.begin(115200);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
Serial.println("Arduino ready");
}

void loop() {
if (Serial.available() >= 3) {
targetRed = Serial.read();
targetGreen = Serial.read();
targetBlue = Serial.read();
}

smoothTransition();
delay(delayTime); // Adjust delay for desired updates per second
}

void smoothTransition() {
float easing = 0.045; // Adjust this value for different easing effects (0 < easing <= 1)
float threshold = 1.1; // Only update if the change is larger than this threshold

float deltaRed = targetRed - currentRed;
float deltaGreen = targetGreen - currentGreen;
float deltaBlue = targetBlue - currentBlue;

if (abs(deltaRed) > threshold) {
currentRed += deltaRed * easing;
}

if (abs(deltaGreen) > threshold) {
currentGreen += deltaGreen * easing;
}

if (abs(deltaBlue) > threshold) {
currentBlue += deltaBlue * easing;
}

analogWrite(RED_PIN, (int)currentRed);
analogWrite(GREEN_PIN, (int)currentGreen);
analogWrite(BLUE_PIN, (int)currentBlue);
}