Cambios en el RGB.

Cerrado
Juan Ramon
Mensajes: 239
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Cambios en el RGB.

Mensaje por Juan Ramon » Vie Mar 29, 2019 2:18 pm

Iniciado por manuch
Hola a todos:

Me ha llevado dos fines de semana y medio, jejeje, llegar a la siguiente conclusión, pero no a la solución de lo siguiente.
He estado haciendo unas modificaciones en el RGB y no daba con la solución a la implantación de unos nuevos componentes, y el motivo del mismo es que el nuevo configurador ha cambiado la estructura del RGB, creo entender que ya no se basa en 255 colores, sino en 65.535 o al menos creo que por ahí van los tiros.

El tema es que antes tenia esto:
void OutControl(){

Código: Seleccionar todo

///////////// RGB ///////////////
  
  if (circuits[1].Value == 0) {
 
 byte mybyte= (circuits[2].Value * 2.55);
 analogWrite(2,mybyte); // mandamos valor rojo

 mybyte= (circuits[3].Value * 2.55);
 analogWrite(3,mybyte); // mandamos valor verde
 
 mybyte= (circuits[4].Value * 2.55);
 analogWrite(4,mybyte); // mandamos valor azul 
 }
else {SetRGBLed(2,3,4,circuits[1].Value,false); 
 
} 
... y esa estructura solo hace que me funcionen los leds que el configurador tiene ya establecidos (circuito RGB), pero el dimmer no funciona.

Si entes eran 255 colores, se dividia entre 100 y en el codigo ponia 2.55, ahora si son 65.535 colores, da igual que ponga 655 ó 655.35, porque no funciona (se ve el color muy clarito, casi ni se aprecia)

Alguna sugerencia¿?

Comentarios
Roberto
Estos colores son para mkr.. Un mega no da esa capacidad, le falta músculos.

El configurador nada tiene que ver con el circuito dimmer y la forma de mandar el valor a una salida pwm eso es código de usuario ..

El caso .. Es que nada ha cambiado en ese sentido el circuito da un valor 0 a 100 y el usuario lo gestiona sin más

manuch
Gracias Roberto, pero si tengo el código introducido manualmente por tener la tira de leds controlada por un circuito RGB y tres dimmer, en mi caso me está fallando el control dimmer, no funciona bien ese código con el configurador nuevo. Hay algo que se escapa.

Roberto
Yo T puedo asegurar que t estas liando... El configurador nunca se ha encargado de eso... El problema lo tiene en código de usuario...

manuch
Es muy probable que me esté liando, jejeje.

Pero bueno, hago una propuesta nueva... y parto de cero.
Comienzo con un proyecto nuevo, selecciono el chip mkr1000... creo unas entradas y unas salidas, y cuando creo un circuito dimmer, entro en configuración del circuito ¿porqué está todo inabilitado?, no me deja marcar nada... lo siento mucho, pero me siento totalmente perdido...

Me suena que Domobur o Bobq comentaron algun problema referente al RGB tambien... pero no lo localizo

Edito:

A lo máximo que llego es poner cada color en cada dimmer, pero se ilumina como máximo un 10% de lo que deberia (el codigo es el mismo que tenia inicialmente)

Código: Seleccionar todo

byte mybyte= (circuits[2].Value * 2.55);
analogWrite(2,mybyte); // mandamos valor rojo

mybyte= (circuits[3].Value * 2.55);
analogWrite(3,mybyte); // mandamos valor verde

mybyte= (circuits[4].Value * 2.55);
analogWrite(4,mybyte); // mandamos valor azul
}
Roberto, no te lo tomes a mal, pero yo te digo que tengo un IDE creado con el configurador anterior, el cual me da con el codigo de arriba una intensidad luminica del 100% y si lo vuelvo a guardar ahora con el configurador nuevo, me crea un IDE nuevo y la intensidad luminica que alcanza es de alrededor de un 10% solo (con el mismo código insisto).

Código: Seleccionar todo

 #ifdef EXC_ARDUINO_MKR
    short RGBredVal = 65535;
    short RGBblueVal = 0;
    short RGBgreenVal =0;
    short RGBSpeed=1;
  #else
    byte RGBredVal = 255;
    byte RGBblueVal = 0;
    byte RGBgreenVal =0;
    byte RGBSpeed=14; 
... no entiendo el código pero estos valores cambian por ejemplo

No te digo que el código esté mal, pero el código de usuario hay que variarlo con el configurador nuevo. Si cada color me lo da correctamente cada dimmer, hay manera de proporcionalmente aumentar la intensidad?
SOLUCIÓN:

ya lo tengo, ahora se pone de esta manera:

Código: Seleccionar todo

int mybyte= map(circuits[2].Value, 0 ,100, 0, 65535);
analogWrite(2,mybyte); // mandamos valor rojo

mybyte= map(circuits[3].Value, 0 ,100, 0, 65535);
analogWrite(3,mybyte); // mandamos valor verde

mybyte= map(circuits[4].Value, 0 ,100, 0, 65535);
analogWrite(4,mybyte); // mandamos valor azul
}
Roberto
Vaya.. no habias especificado mkr en el post.

Esto esta perfecto para el mkr... manuchu si me hubieras puesto configura el dimer led con mkr te lo hubiera puesto en dos minutos hombre...

En un mega seguimos exactamente igual , pues el mega sigue teniendo una capacidad maxima de 8bit para pwm.

https://www.arduino.cc/en/Tutorial/PWM

El mkr como ya has visto tiene una capacidad de 16bit, la cual configuramos en esta linea.
analogWriteResolution(16);

Pero nada cambia... solo que la placa mkr es mas potente y tiene mas resolución...

Y lo ultimo... el circuito dimmer nunca ha tenido una opción precocinada ... no es un bug... es que siempre ha sido el usuario el que lo configura.

manuch
Es cierto... mañana edito el título que con tapatalk me da error.

Hay una cosa que no se porque pero no funciona (en el mkr1000, jejeje), no le di importancia porque no lo uso, pero es lo del color aleatorio en el RGB, cuando le doy no hace nada, si alguien tiene implementados leds, puede confirmarlo?

Roberto
Si... yo lo tengo puesto en el salon y lo uso mucho... es lo que mas uso del rgb...

Puedes subir tu archivo de funciones comunes para ver si lo tienes implementado con un configurador moderno?

Manuchu ya se que te pasa... Pon una velocidad rgb muy alta... Mayor de 100




caponovalle
hola creo 3 circuitos dimmer sin darle ninguna salida y le meto este codigo y funciona perfecto:
Código:

Código: Seleccionar todo

int mybyte= map(circuits[2].Value, 0 ,100, 0, 65535);
analogWrite(2,mybyte); // mandamos valor rojo

mybyte= map(circuits[3].Value, 0 ,100, 0, 65535);
analogWrite(3,mybyte); // mandamos valor verde

mybyte= map(circuits[4].Value, 0 ,100, 0, 65535);
analogWrite(4,mybyte); // mandamos valor azul
}
acontinuacion Meto circuito rgb con sus respectivas salidas, los dimmer funcionan muy mal y el rgb en forma aleatoria papadea un poco es molesto , con paleta de colores funciona bien
A que es debido? en el comentario anterior poníais algo de la velocida , puede ser la razon?
Un saludo y gracias

manuch
Mira como lo tengo yo implementado:

Código: Seleccionar todo

///////////// RGB ///////////////
  
  if (circuits[1].Value == 0) {
 
 int mybyte= map(circuits[2].Value, 0 ,100, 0, 65535);
 analogWrite(2,mybyte); // mandamos valor rojo
 
 mybyte= map(circuits[3].Value, 0 ,100, 0, 65535);
 analogWrite(3,mybyte); // mandamos valor verde
 
 mybyte= map(circuits[4].Value, 0 ,100, 0, 65535);
 analogWrite(4,mybyte); // mandamos valor azul 
 }
 
else {SetRGBLed(2,3,4,circuits[1].Value,false); // si ponemos true invertimos los colores
 
} 
Roberto
El problema es q das dos órdenes de forma simultánea, el dimmer y el RGB, y se están solapando.

El código de manuch lo soluciona con una condición, dando prioridad a la paleta sobre el dimmer, d tal manera q el dimmer solo funciona con la paleta apagada

caponovalle
Si no es mucho pedir Como seria el codigo con la condicion?

manuch
Si tienes el ejemplo en una central funcionando seguro que te viene mejor... y te da ideas
La central que paso la tengo en la cocina... en ella tengo un PIR que detecta cuando alguien entra en la cocina, también tengo una tira de leds blancos bajo los muebles superiores (que iluminan la encimera) y una tira de leds en el zócalo de los muebles inferiores (a modo decorativo), a parte sensor de temperatura, lux...
Es una central con una configuración muy corta así que es facilita de entender.
ejemploparaCAPONOVALLE.zip
a propósito... yo utilizo 7zip como compresor... (es gratuito y compatible con el resto de compresores) pero no me deja la web subir un archivo con extensión 7z, así que lo he renombrado con extensión zip... te lo digo por si no puedes descomprimirlo, renombra zip a 7z y funcionará

caponovalle
Muchas gracias manuch y roberto , cuando añado el codigo del circuito rgb me da el siguiente error al recopilar:

Código: Seleccionar todo

jardin:569:46: error: too many arguments to function 'void SetRGBLed(byte, byte, byte, byte)'

else {SetRGBLed(3,4,5,circuits[3].Value,false); // si ponemos true invertimos los colores

^

C:\Users\Usuario\Desktop\exterior\jardin\Common_functions.ino:1971:6: note: declared here

void SetRGBLed(byte RedPin, byte GreenPin, byte BluePin, byte Value){

^

exit status 1
too many arguments to function 'void SetRGBLed(byte, byte, byte, byte)' 
Roberto
En las versiones previas la función rgb era esta.

Código: Seleccionar todo

void SetRGBLed(byte RedPin, byte GreenPin, byte BluePin, byte Value, boolean invertir salida){ 
Tenia un parametro adicional , invertir salida , para tener compatibilidad con amplificador o no.

Con la versión moderna, al estar limitado a la mkrshield el mantenimieto y el uso es mas sencillo, eliminando el ultimo parametro. la funcion queda de esta manera.

Código: Seleccionar todo

void SetRGBLed(byte RedPin, byte GreenPin, byte BluePin, byte Value){ 
Por tanto el código del mega debe actualizarse para tener en cuenta que eso se ha simplificado y ya no hace falta el parametro para indicar la inversión de salida.

caponovalle
Perdona mi torpeza . Antes con el configurador viejo y el mega creaba 3 circuitos dimmer sin nombrar entradas y salidas y otro circuito RGB con las salidas correspondiente. Y le metía el codigo en void outcontrol () y ya estaría. Ahora en el nuevo configurador con un Mkr creo 3 circuito dimmer sin nombrar entradas y salidas y 1 circuito RGB sin nombrar salidas. Y le meto en void outcontro () el siguiente código .

Código: Seleccionar todo

//////////// RGB ///////////////

if (circuits[1].Value == 0) {

int mybyte= map(circuits[2].Value, 0 ,100, 0, 65535);
analogWrite(2,mybyte); // mandamos valor rojo

mybyte= map(circuits[3].Value, 0 ,100, 0, 65535);
analogWrite(3,mybyte); // mandamos valor verde

mybyte= map(circuits[4].Value, 0 ,100, 0, 65535);
analogWrite(4,mybyte); // mandamos valor azul
}

else {SetRGBLed(2,3,4,circuits[1].Value,false); // si ponemos true invertimos los colores

} 
Para que no salga el error que tengo que añadir o corregir?
Muchas gracia y perdonadme

Roberto
Cambiar la línea de la paleta a esto

Código: Seleccionar todo

else {SetRGBLed(2,3,4,circuits[1].Value); // si ponemos true invertimos los colores 
caponovalle
Perfecto ahora ya no me da errores . Muchas gracias.
Lo he probado los dimmes no me regular muy bien los pongo al 30% baja un poquito y si le pongo 10% sube un poco
Las colores aleatorio solo me funciona el verde + rojo.
Sabeis cual puede ser el problema? Tiene una fuente de 25a no creo que sea el problema
Un saludo y gracias

Roberto
Si la paleta va no es cableado, es código

Revisa tu código para dimmer, mira las funciones RGB d tu programa para tener un ejemplo.

caponovalle
Hola he hecho varias pruebas como base esta programación:

Código: Seleccionar todo

if (circuits[0].Value == 0) {
int mybyte= map(circuits[1].Value, 0 ,100, 0, 65535);
analogWrite(3,mybyte); // mandamos valor rojo

mybyte= map(circuits[2].Value, 0 ,100, 0, 65535);
analogWrite(4,mybyte); // mandamos valor verde

mybyte= map(circuits[3].Value, 0 ,100, 0, 65535);
analogWrite(5,mybyte); // mandamos valor azul
}
else {SetRGBLed(3,4,5,circuits[0].Value); // si ponemos true invertimos los colores
}
Los dimmer no regular casi nada y funcionan los 3 colores.
La paleta de colores funciona bien los 3 colores.
Y los colores aleatorios no funciona el azul .El rojo y el verde funciona pero la regulación funciona un poquito.

Tengo conectado los MKR Y AMPLI asi:

Q3 del mkr ------al------ R INPUT amplificador
Q4 del mkr ----- al------ G INPUT amplificador
Q5 del mkr------ al------ B INPUT amplificador
(tambien probre Q2 Q3 Q4 me hace lo mismo )
VIN del mkr----- al ------V+ INPUT amplificador

Tengo conectado AMPLI, FUENTE Y LED asi:

+ POWER------- a------- fuente de alimentación 24A +12v
-POWER-------- a-------- fuente de alimentación 24A - 12v
B OUTPUT ----- a ------- azul del led
G OUTPUT----- a-------- verde del led
R OUTPUT----- a --------red del led
V+ OUTPUT--- a --------negro o blanco del led

La alimentación del mkr y el aplificado las he cojido de la misma fuente de alimentación 12v y tambien las he separado y nada
He cambiado el amplificador por otro por si estaba mal pero me hace lo mismo.
Los aplificadores le he puesto la resistencia como hemos comentado en este foro https://domotica-arduino.es/foro/thread-2334.html y en mega me funciona bien.
Adjunto rcc

Otra duda que me surge, meti los 3 dimmer y RGB en el servidor como 4 circuitos como este:
<div style="position: absolute ; left: 50%; top:50%;"> <uc1:CircuitoLt runat="server" ID="CircuitoLt1" Index="0" Central="0" /></div>
Los 3 dimmer aparece el icono en el plano y funcionan pero el RGB tiene el icono pero no me va.

Gracias por leer este rollo y espero que lo entendáis .Un saludo y gracias.
result (6).rar
Roberto
q arduino usas?

caponovalle
Hola es un MKR 1000 y utilizo el configurador nuevo
Gracias

Roberto
Yo mismo lo tengo funcionando bien... lo acabo de ajustar para que podáis pegar y copiar códigos viejos con resolución de 8 bits sin que tengais que preocuparos de nada mas, ni resoluciones ni nada...

Según este cambio... en los códigos que pones quedarían(para 8 bit):

Código: Seleccionar todo

if (circuits[0].Value == 0) {
int mybyte= map(circuits[1].Value, 0 ,100, 0, 255);
analogWrite(3,mybyte); // mandamos valor rojo

mybyte= map(circuits[2].Value, 0 ,100, 0, 255);
analogWrite(4,mybyte); // mandamos valor verde

mybyte= map(circuits[3].Value, 0 ,100, 0, 255);
analogWrite(5,mybyte); // mandamos valor azul
}
else {SetRGBLed(3,4,5,circuits[0].Value); // si ponemos true invertimos los colores
}
Si no te va bien... asegúrate de tener las definiciones de la paca actualizadas...

Resistencias con la mkr shield no tienes que poner... eso solo es para el mega.

caponovalle
Gracias Roberto con el código que me diste ya me funciona.
Un saludo
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.
Juan Ramón.

Cerrado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado