Led Rosso non vuole "Sfumare"

Salve, Scusate se non includerò schemi, ma sono negato!

Vi spiego il mio problema ...

Ho realizzato un semplice circuito con 3 potenziometri ed un modulo "a tre led", desiderando variare le intensità di ogni colore con i potenziometri.

I potenziometri registrano regolarmente le variazioni (controllato da serial monitor) e i colori VERDE e BLU si accendono gradualmente, regolarmente, a seconda del "valore" letto dal potenziometro ...

Tuttavia, il led rosso non "sfuma" e si accende di colpo quando il potenziometro registra il valore "128" (circa) e non diventa ne più tenue abbassandolo, ne più intenso alzandolo, cosa che gli altri due led fanno regolarmente, miscelando i colori.

Secondo voi, da cosa potrebbe dipendere?

Questo è il programma che ho realizzato:

int potRosso = A1;  
int potVerde= A2;   
int potBlu= A3;       

int ledRosso = 8;
int ledBlu = 6;
int ledVerde = 5;

long valPotRosso = 0;
long valPotVerde = 0;
long valPotBlu = 0;

void setup() {
   
  Serial.begin(9600);
  
  pinMode (ledRosso, OUTPUT);
  pinMode (ledBlu, OUTPUT);
  pinMode (ledVerde, OUTPUT);
  
  
  
}

void loop() {
  
  valPotRosso = analogRead(potRosso)/4.01176471;    
  valPotVerde = analogRead(potVerde)/4.01176471;
  valPotBlu = analogRead(potBlu)/4.01176471;
  
          
Serial.println(valPotRosso);
Serial.println(valPotVerde);
Serial.println(valPotBlu);
          

  analogWrite (ledRosso,valPotRosso);
  analogWrite (ledVerde,valPotVerde);
  analogWrite (ledBlu,valPotBlu);
}

Sono consapevole che ci sono vie "migliori" per ottenere lo stesso risultato, ma purtroppo questo è quanto mi ha suggerito il mio (povero) cervello! ;-)

Ma non riesco a capire come mai il led rosso non vuole sfumare regolarmente!!

Grazie per le vostre spiegazioni! :)

Semplicemente dipende dal fatto che, come descritto nel reference di Arduino/Genuino UNO, il pin 8 NON è PWM ... e quindi non ci puoi fare l'analogWrite() :)

Spostalo sul pin 9 e vedrai che andrà ;)

Guglielmo

Semplifica i calcoli, non usare le virgole; invece di:

valPotRosso = analogRead(potRosso)/4.01176471;

usa la comoda map():

valPotRosso = map(analogRead(potRosso),0,1023,0,255);

Per i nomi dei pin, meglio usare const byte (ne abbiamo già parlato nel forum un pò di tempo fa):

const byte ledRosso = 9;

nid69ita: Per i nomi dei pin, meglio usare const byte (ne abbiamo già parlato nel forum un pò di tempo fa):

const byte ledRosso = 9;

In realtà ancora meglio usare le #define ... così si risparmia pure quel byte ;)

#define ledRosso 9
#define ledBlu 6
#define ledVerde 5

Guglielmo

Porcazza miseria! Grazie! Ora funge! :) prima avevo provato sul 7 e dava lo stesso problema, poi l'8 ... e al 9 non ci sono arrivato! :)

Grazie! Ora studierò gli altri consigli!!!

Se guardi bene il tuo Arduino UNO vedrai che SOLO vicino alcuni pin c'è stampato il simbolo ~ ... ... sono quelli che funzionano in PWM, gli altri NO !

Guglielmo