salve,
mi sto dilettando con un controller per strip led RGB da 12v a + comune (non ricorderò mai e è catodo o anodo) cioè io tramtie un potenziometro leggo un vlore analogico, lo converto in digitale, lo porto in un valore compreso tra 0 e 360 e da li tramite l'immagine in allegato lo converto nei tre valori pwm dei led rosso verde e blu.
funziona fino alla conversione ad hue, da li in poi nulla.
i valori pwm dei tre colori rimangono fissi su 9 10 e 9, rispettivamente per rosso verde e blu
i è una variaile di swap, la uso mentre devo calcolare i valori intermedi di luminosità
per il debug uso uno schermo lcd 16x2, quindi ignorate le ultime 20 righe di codice, relative appunto all lcd.
sketch qui:
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int pwmred = 9;
const int pwmgreen = 10;
const int pwmblue = 6;
const int Apin = 0;
int Aread = 0; // lettura analogica
float tmpfloat = 0;
float hue = 0; // valore tra 0 e 360
float i = 0; // variabile di swap
float cst = 4.25; // costante di 255/60
float cst2 = 0.35190615; // verra salvato il valore di 1/1023*360
void setup() {
// put your setup code here, to run once:
pinMode(pwmred,OUTPUT);
pinMode(pwmgreen,OUTPUT);
pinMode(pwmblue,OUTPUT);
lcd.begin(16, 2);
}
void loop() {
// put your main code here, to run repeatedly:
Aread = analogRead(Apin);
tmpfloat = Aread;
cst2 = cst2;
hue = tmpfloat*360/1023; // Aread/cst2 = Aread/1023*360
if(hue>0 && hue<60)
{
analogWrite(pwmred,255);
analogWrite(pwmblue,0);
i= (hue/cst);
analogWrite(pwmgreen,i);
}
if(hue>60 && hue<120)
{
analogWrite(pwmgreen,255);
analogWrite(pwmblue,0);
i = 255-((hue-60)/cst);
analogWrite(pwmred,i);
}
if(hue>120 && hue<180)
{
analogWrite(pwmgreen,255);
analogWrite(pwmred,0);
i = (hue-120)/cst;
analogWrite(pwmblue,i);
}
if(hue>180 && hue<240)
{
analogWrite(pwmblue,255);
analogWrite(pwmred,0);
i = 255-((hue-180)/cst);
analogWrite(pwmgreen,i);
}
if(hue>240 && hue<300)
{
analogWrite(pwmblue,255);
analogWrite(pwmgreen,0);
i = (hue-240)/cst;
analogWrite(pwmred,i);
}
if(hue>300 && hue<360)
{
analogWrite(pwmred,255);
analogWrite(pwmgreen,0);
i = 255-((hue-300)/cst);
}
lcd.setCursor(0,0);
lcd.print("R");
lcd.setCursor(1,0);
lcd.print(pwmred);
lcd.setCursor(4,0);
lcd.print("G");
lcd.setCursor(5,0);
lcd.print(pwmgreen);
lcd.setCursor(8,0);
lcd.print("B");
lcd.setCursor(9,0);
lcd.print(pwmred);
lcd.setCursor(12,0);
lcd.print("A");
lcd.setCursor(13,0);
lcd.print(Aread);
lcd.setCursor(0,1);
lcd.print("H");
lcd.setCursor(2,1);
lcd.print(hue);
lcd.setCursor(8,1);
lcd.print("I");
lcd.setCursor(9,1);
lcd.print(i);
}