Come variare colore ad un led RGB con potenziometro

Ciao, (per didattica) con un led RGB sto cercando di passare da un colore all’altro ruotando la manopola di un potenziometro, ma non ottengo colori netti, rosso, blu e verde. Mi piacerebbe che in base ad una soglia si verifichi il passaggio netto del colore. Potete darmi delle indicazioni?
Grazie Guido

int soglia = 10;


void setup() {
 Serial.begin(9600); // inizializzazione porta seriale 

 pinMode (2, OUTPUT); // blu
 pinMode (3, OUTPUT); // verde
 pinMode (4, OUTPUT); // rosso
}

void loop() {
   int level = analogRead (A0);

  Serial.println(level); // scrivo il valore sulla seriale 
    delay(200);

  if(( level > 256 - soglia) && ( level <256 + soglia )) {
     digitalWrite (2, HIGH);  
      
    }
  else {
    digitalWrite (2, LOW);
    digitalWrite (3, LOW);
    digitalWrite (4, LOW);
    
    }
    if(( level > 512 - soglia) && ( level <256 + soglia )) {
    digitalWrite (3, HIGH);
      
    }
  else {
    digitalWrite (2, LOW);
    digitalWrite (3, LOW);
    digitalWrite (4, LOW);
    
    }
     if(( level > 768 - soglia) && ( level <768 + soglia )) {
    digitalWrite (4, HIGH);  
     
    }
  else {
   digitalWrite (2, LOW);
    digitalWrite (3, LOW);
    digitalWrite (4, LOW);
    
    }

}

Adopero un led ad anodo comune, collegato ai 5V.
Scheda: Arduino Mega 2560.

Per cambiare tre colori va bene come hai fatto, ma sono sbagliate le condizioni degli if()

dovresti fare qualcosa del genere

// Valori numerici messi a caso poi tu metti i valori giusti nelle condizioni

//primo colore

if(valore>=255 && valore <= 300){ // se il valore è compreso tra 255 e 300

RGB primo colorre

}

else if(valore>=301 && valore <= 500){
  RGB secondo colore

}

else if(valore>=501 && valore <= 1024){
  RGB terzo  colore

}

else if(valore < 255){


 RGB SPENTO
   

}

Secondo me, negli if in cui accendi un colore, spegni gli altri due e togli quei else

... ma quello che serve e' un passaggio graduale fra tutte le combinazioni di colori ? ... perche' se e' cosi, mi sa che serve almeno una matrice che contenga le varie gradazioni, e che piloti i tre canali PWM in base al valore del potenziometro ... o sbaglio ?

Mi pare voglia fare qualcosa di più semplice. Almeno io ho capito così.
0-1023 lo divide in 3 parti, una per ogni singolo colore, senza mix

Pero’ cosi torna a zero fra i tre colori … cioe’, se non fa i mix …

Altrimenti dovrebbe basarsi su una curva tipo questa, dividendola in 1023 gruppi di valori, in questo modo farebbe tutti i possibili mixaggi, non solo le coppie (pero’ e’ un po piu complesso da fare, credo)

rgbcurve.png

(disegnato un po del cavolo, lo so, ma e’ solo per dare l’idea)

Ciao, grazie per i consigli. Scritto cosi sembra funzionare:

void setup() {
Serial.begin(9600); // inizializzazione porta seriale

pinMode (2, OUTPUT); // blu
pinMode (3, OUTPUT); // verde
pinMode (4, OUTPUT); // rosso

}

void loop() {
int valore = analogRead (A0);
Serial.println(valore); // scrivo il valore sulla seriale
delay(500); //Il tempo importante se messo molto basso il led diventa bianco.

//primo colore

if(valore>=255 && valore <= 300){ // se il valore è compreso tra 255 e 300

digitalWrite (2, HIGH); //RGB primo colorre
delay(50);
}

else if(valore>=301 && valore <= 500){
digitalWrite (3, HIGH); //RGB secondo colore
delay(50);

}

else if(valore>=501 && valore <= 1024){
digitalWrite (4, HIGH); //RGB terzo colore
delay(50);

}

else if(valore < 255){

//RGB SPENTO
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, LOW);

}

}//void

scrivo sembra perchè uso un led RGB ad anodo comune ed è collegato ai 5V (5V di Arduino) con un pin del potenziometro. Se collego pin del pot. e anodo led ottengo sempre 1024 led blu acceso, se scollego pin pot. (rimane centrale collegato ad A0 e massa/GND) ottengo una variazione/passagio di colore non costante (se posiziono ad es. il potenziometro sul colore rosso dopo un pò cambia da solo). Purtroppo non ho un led RGB a catodo comune per fare la controprova.

>Guidobat: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Guglielmo