Variar led RGB por tensión

hola necesito su ayuda, creo que algo estoy haciendo mal quiero que a medida que suba la tención del pin del adc varia cambiando de color el led rgb, no se si esta bien el pwm por sofware.

int led_r = 0;
int led_g = 1;
int led_b = 2;
int pin=4;
int analogico;
struct RGB {int r, g, b ;} ;

const struct RGB rgb[]={{  0,  0,  0},  // 0   la nada
                        {255,  0,  0},  // 1   rojo
                        {  0,255,  0},  // 2   verde
                        {  0,  0,255},  // 3   azul
                        {  0,240,255},  // 4   cyan
                        {255,  0,125},  // 5   rosa
                        {100,  0,255},  // 6   morado
                        {255,220,  0},  // 7   amarillo
                        {255, 80,  0},  // 8   naranja
                        {255,255,255},  // 9   blanco
                        {255,255,255}}; // 10  blanco

//--------------------------------------------------
struct RGB pwm = {0,0,0} ;

void setup() {
 pinMode(led_r, OUTPUT);
 pinMode(led_g, OUTPUT);
 pinMode(led_b, OUTPUT);

}

void loop() {
 analogico = analogRead(pin);  
 pwm = rgb[analogico];
  analogWrite(0,led_r / 25);
  analogWrite(1,led_g/ 25);
  analogWrite(2,led_b/ 25);
}

Revisa los pines que usas:
analogWrite()
Los pines para analogwrite al menos en un UNO son 3.5,6,9,10,11.

Desanconsejo dividir el valor entre 25 si quieres disminuir el brillo del led puedes cambiar el valor en la constante o en cualquier caso restar, si lo que quieres es quitar un % del brillo usa map() para una "regla de tres"

Estoy usando el attiny85 pero no esta bien armado el código, voy usar el timer 1 para generar el pwm por software, no se como usar el analogwrite para tener 3 pwm, la idea es ir cambiando los colores amedida que ingresa tencion por el pin, de 0 a 5 volt mostrar un color cada 0.5 volt

Tienes una estructura, entonces los valores deben indicarse para valores que van de 0 a 10. Eso no lo veo.
Tus valores pueden ir de 0 a 1023 porque eso devuelve el analogRead del ADC.
Asi que primera corrección.
Luego cuando determinas el valor del ADC debes elegir el color que no se con que criterio lo haces pero tienes que enviar pwm[algo].r, pwm[algo].g, pwm[algo].b

o sea

  analogWrite(led_r, pwm[color].r);
  analogWrite(led_g, pwm[color].g);
  analogWrite(led_b, pwm[color].b);

Asi que siguiendo tu lógica tal vez debas mapear con los valores del adc los 0 a 10 posibles colores que tienes

asi me parece mejor, que errores puede tener ?

#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

int led_r = 0;
int led_g = 1;
int led_b = 2;
int pin=4;
int analogico;
struct RGB {int r, g, b ;} ;

const struct RGB rgb={{ 0, 0, 0}, // 0 la nada
{255, 0, 0}, // 1 rojo
{ 0,255, 0}, // 2 verde
{ 0, 0,255}, // 3 azul
{ 0,240,255}, // 4 cyan
{255, 0,125}, // 5 rosa
{100, 0,255}, // 6 morado
{255,220, 0}, // 7 amarillo
{255, 80, 0}, // 8 naranja
{255,255,255}, // 9 blanco
{255,255,255}}; // 10 blanco

//--------------------------------------------------
struct RGB pwm = {0,0,0} ;

void setup() {
pinMode(led_r, OUTPUT);
pinMode(led_g, OUTPUT);
pinMode(led_b, OUTPUT);

TCCR1 |= 0b00001111;
TIMSK |= (1 << TOIE1);
sei();
}

void loop() {
analogico = analogRead(pin)/25;
pwm = rgb[analogico];

}
ISR(TIMER1_OVF_vect) {
static int contador=0x00;

if(contador==0x00) PORTB = 0x00;
else {
if(contador==pwm.r) digitalWrite(led_r, HIGH); ;
if(contador==pwm.g) digitalWrite(led_g, HIGH); ;
if(contador==pwm.b) digitalWrite(led_b, HIGH); ;
}
contador-- ;
}

No así no funciona! Voy a probar de otra manera ! ahi me trabe no se como implementarlo sin comparacion

 int analogico;
int pin = 4;
int valor;
 int pin_luz_roja =  0 ;
int pin_luz_verde =  1 ;
int pin_luz_azul =  2 ;

void color (int r, int  g, int b)
 {
  analogWrite ( pin_luz_roja, r ) ;
  analogWrite ( pin_luz_verde, g) ;
  analogWrite ( pin_luz_azul, b) ;
}


void setup ()  {
  pinMode ( pin_luz_roja, INPUT ) ;
  pinMode ( pin_luz_verde, INPUT ) ;
  pinMode ( pin_luz_azul, INPUT ) ;
}
void loop ()  {
  
analogico = analogRead(pin);  
 
           color (  0,  0,  0); // 0   la nada
           color (255,  0,  0);  // 1   rojo
           color  (  0,255,  0); // 2   verde
           color (  0,  0,255);  // 3   azul
           color   (  0,240,255);  // 4   cyan
           color  (255,  0,125);  // 5   rosa
           color   (100,  0,255);  // 6   morado
           color    (255,220,  0);  // 7   amarillo
          color   (255, 80,  0);  // 8   naranja
           color   (255,255,255);  // 9   blanco
          color   (255,255,255); // 10  blanco

}

Nunca uses en etapa de programación el pin 0 o el 1 que corresponden a RX o TX o vice versa. Usa los que te indicó @cuantron que son PWM.

es un attiny85 el controlador, igual estoy trabado como implemento el adc para contolar

Ok, recuerda las normas, explica siempre el contexto con el que trabajas. Nosotros no estamos en tu banco de trabajo. Quiere decir que los comentarios sobre los PWM que te hemos sugerido no tienen relevancia.

sigo enredado sin poder dar en el clavo

 int analogico;
int pin = 4;
int valor;
 int pin_r =  0 ;
int pin_g =  1 ;
int pin_b =  2 ;
int cont;


struct RGB {int pin_r, pin_g, pin_b ;} ;

const struct RGB rgb[]={{  0,  0,  0},  // 0   la nada
                        {255,  0,  0},  // 1   rojo
                        {  0,255,  0},  // 2   verde
                        {  0,  0,255},  // 3   azul
                        {  0,240,255},  // 4   cyan
                        {255,  0,125},  // 5   rosa
                        {100,  0,255},  // 6   morado
                        {255,220,  0},  // 7   amarillo
                        {255, 80,  0},  // 8   naranja
                        {255,255,255},  // 9   blanco
                        {255,255,255}}; // 10  blanco

//--------------------------------------------------
struct RGB color = { pin_r, pin_g, pin_b} ;
           

                        
void  color (int r, int  g, int b)
 {
  analogWrite ( pin_r, r ) ;
  analogWrite ( pin_g, g) ;
  analogWrite ( pin_b, b) ;
}


void setup ()  {
  pinMode ( pin_r, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
}
void loop ()  {
delay(20);
       
analogico = analogRead(pin)/ 30;  
color = rgb[analogico]

}

No has visto como te he indicado que se leen los valores de la estructura?
Ahh lo has cambiado todo

Lo hice en un pic y me funciono bien, quiero aprender arduino y no me sale, tengo que sacarme de la cabeza el pic, en arduino me marea

Esto debería estar mas cerca de lo que necesitas.

int tipo_color;
int pin_r =  0;
int pin_g =  1;
int pin_b =  2;
int pin   =  4;
int cont;
int valor;

struct RGB {int pin_r, pin_g, pin_b;};

const struct RGB rgb[]={
                        {  0,   0,   0},  // 0   la nada
                        {255,   0,   0},  // 1   rojo
                        {  0, 255,   0},  // 2   verde
                        {  0,   0, 255},  // 3   azul
                        {  0, 240, 255},  // 4   cyan
                        {255,   0, 125},  // 5   rosa
                        {100,   0, 255},  // 6   morado
                        {255, 220,   0},  // 7   amarillo
                        {255,  80,   0},  // 8   naranja
                        {255, 255, 255},  // 9   blanco
                        {255, 255, 255}
                       }; // 10  blanco

void  color (int r, int  g, int b) {
  analogWrite ( pin_r, r ) ;
  analogWrite ( pin_g, g) ;
  analogWrite ( pin_b, b) ;
}


void setup ()  {
  pinMode ( pin_r, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
}

void loop ()  {
  delay(20);
  tipo_color = map(analogRead(pin), 0, 1023, 0, 10);
  color(rgb[tipo_color].r, rgb[tipo_color].g, rgb[tipo_color].b);
}

Tengo un tremendo problema con mi plataforma de compilación en modo AVR asi que no se si funciona o no. Si compila o no.
Ya me diras.

Lo voy a probar, me gusta bastante arduino voy a seguir hasta aprender bien todo!!!

color(rgb[tipo_color].r, rgb[tipo_color].g, rgb[tipo_color].b);
esa linea da error, es lo que me pasa no logro hacer funcionar la estructura la funcion y el adc.

Estoy cargando los ATtiny para verificar en el IDE.
Yo uso Platformio y me esta fallando, dame unos minuto y te respondo.
Revisa el código xq hice correcciones, saqué la linea donde vuelves a definir color x segunda vez, una como variable de estructura y otra como procedimiento.
Deje solo el procedimiento.

Esto compila sin problemas.

int tipo_color;
int pin_r =  0;
int pin_g =  1;
int pin_b =  2;
int pin   =  4;
int cont;
int valor;

struct RGB {int pin_r, pin_g, pin_b;};

const struct RGB rgb[]={
                        {  0,   0,   0},  // 0   la nada
                        {255,   0,   0},  // 1   rojo
                        {  0, 255,   0},  // 2   verde
                        {  0,   0, 255},  // 3   azul
                        {  0, 240, 255},  // 4   cyan
                        {255,   0, 125},  // 5   rosa
                        {100,   0, 255},  // 6   morado
                        {255, 220,   0},  // 7   amarillo
                        {255,  80,   0},  // 8   naranja
                        {255, 255, 255},  // 9   blanco
                        {255, 255, 255}
                       }; // 10  blanco

void  color (int r, int  g, int b) {
  analogWrite ( pin_r, r ) ;
  analogWrite ( pin_g, g) ;
  analogWrite ( pin_b, b) ;
}


void setup ()  {
  pinMode ( pin_r, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
}

void loop ()  {
  delay(20);
  tipo_color = map(analogRead(pin), 0, 1023, 0, 10);
  color(rgb[tipo_color].pin_r, rgb[tipo_color].pin_g, rgb[tipo_color].pin_b);
}
void setup ()  {
  pinMode ( pin_r, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
  pinMode ( pin_g, INPUT ) ;
}

¿No deberían ser OUTPUT?

Si claro, lo vengo arrastrando pq ni lo miré.
Estaba bien en el primer código, se equivoca en el post#6.

si pero no funciona igual, me esta volviendo loco!

Momento entoces, muestra la tira que usas, como esta conectada.
Arma un croquis, foto, súbela asi nos entendemos mejor. Si puedes con algun programa ECAD mejor.
Mas simple
Funciona el ADC? o deja el ADC para otro momento y pon solamente algo fijo

tipo_color = 1;

me dices que eso no muestra un color fijo?
ok, quita los rgb[] y pon

color(255, 0, 0); // para el rojo

debería mostrar el led o la tira en ROJO como tu has definido.
Vamos, que hay muchas cosas simples que se pueden probar sin decir NO funciona!!
Primero se debe establecer que electricamente funciona, luego el código.

Lo probé en físico y proteus, probé el led rgb si funcionaba, si encendía puse un código simple y enciende todos los colores, ahora con el potenciometro no lo pude hacer andar

ASI EL CODIGO ENCIENDE EL ROJO

int tipo_color;
int pin_r =  0;
int pin_g =  1;
int pin_b =  2;
int pin   =  4;
int cont;
int valor;


void  color (int r, int  g, int b) {
  analogWrite ( pin_r, r ) ;
  analogWrite ( pin_g, g) ;
  analogWrite ( pin_b, b) ;
}


void setup ()  {
  pinMode ( pin_r, OUTPUT ) ;
  pinMode ( pin_g, OUTPUT) ;
  pinMode ( pin_g, OUTPUT ) ;
}

void loop ()  {
  delay(20);
 
  color(255, 0, 0);
}