Premettendo che ho controllato e ricontrollato insieme ad un'altra persona i contatti sulla centralina e che faccio uso dello sketch relativo in Arduino, se imposto tutto a 0 non mi si spengono i colori, se metto 2 colori a valore 250 non si mescolano ottenendo sempre con accensione di blu verde e rosso solo una dissolvenza che ad un certo punto tende al colore che desidero. solo un paio di volte su tanti tentativi queste mescolanze sono state decise, per cui la riuscita dipende anche dai contatti. Lo sketch lo compilo cambiando i valori di quelli che credo 3 cicli precompilati. Qui ho portato tutto a 250 negli ipotetici 3 cicli, mentre il define delay time da 10 a 60 nella speranza di avere tutto bianco con pause tra cicli (dove sbaglio?):
// Define Pins
#define BLUE 3
#define GREEN 5
#define RED 6
void setup()
{
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
}
// define variables
int redValue;
int greenValue;
int blueValue;
// main loop
void loop()
{
#define delayTime 60 // fading time between colors
redValue = 255; // choose a value between 1 and 255 to change the color.
greenValue = 255;
blueValue = 255;
// this is unnecessary as we've either turned on RED in SETUP
// or in the previous loop ... regardless, this turns RED off
// analogWrite(RED, 0);
// delay(1000);
for (int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
{
redValue -= 1;
greenValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(RED, 255 - redValue);
// analogWrite(GREEN, 255 - greenValue);
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
delay(delayTime);
}
redValue = 255;
greenValue = 255;
blueValue = 255;
for (int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
{
greenValue -= 1;
blueValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(GREEN, 255 - greenValue);
// analogWrite(BLUE, 255 - blueValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(delayTime);
}
redValue = 255;
greenValue = 255;
blueValue = 255;
for (int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
{
// The following code has been rearranged to match the other two similar sections
blueValue -= 1;
redValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(BLUE, 255 - blueValue);
// analogWrite(RED, 255 - redValue);
analogWrite(BLUE, blueValue);
analogWrite(RED, redValue);
delay(delayTime);
}
}
@al19701: in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.
Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmdT su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto.
Nei 3 cicli for di questo sketch imposti le 3 variabili a 255 e poi decrementi una ed incrementi una seconda!
L'istruzione analogWrite() si aspetta un valore compreso tra 0 e 255.
Se tu scrivi l'istruzione analogWrite(GREEN, 256); è come se stai scrivendo analogWrite(GREEN, 0); e continuando analogWrite(GREEN, 257); => analogWrite(GREEN, 1); etc etc
3 a 255 non dovrebbero dare esclusivamente il bianco?
3 a 0 il nero?
Verde e rosso a 255 blu a 0, esclusivamente il giallo?
Blu e rosso a 255 a 0 il verde, esclusivamente il rosa?
il problema è che non si spengono, come non si ottiene mai bianco continuo per ogni ciclo. Inoltre c'è una diffusione che tende verso mescolanze desiderate però non mi sbarazzo dei colori di base, blu, verde, e rosso.
Anche tutto a 256 non funziona, rimane sui 3 colori di partenza, come non accettasse il comando. aiutatemi, ho gran difficoltà. Non è che ho un qualche problema sulla centelina? Grazie anticipatamente.
... credo che non ti sia chiaro che la digitalWrite() VUOLE un valore compreso tra 0 e 255 (un solo byte), quindi, se tu vai oltre (e usi 16 bit) la parte alta viene troncata e 256 diventa ZERO !
Avevo creato un MyRgb che ho visto non funziona, andando sull'rgb, la scheda si spegne per ripartire però non accetta comunque modifiche, infatti ho portato tutti i settaggi del rosso a 0 ma il rosso compare sempre.
... continuo a chiedere ... per "centralina" che intendi? Un semplice Arduino UNO fatto dalla Elegoo? E perché diavolo chiami centralina una semplice scheda di sviluppo?
Tutto questo con collegamenti tra piedini led e resistenze allineati, con il piedino più corto esterno del led collegato col blu, il secondo col verde, il terzo al nero, il quarto al verde.
Va beh, praticamente hai un Arduino UNO collegato ad un LED RGB ... tutto qui.
Intanto considera che un LED RGB sono, in realtà, 3 LED distinti messi in un unico involucro plastico quindi ... scordati di vedere la "fusione" dei colori come un unico colore se, almeno, non interponi uno schermo diffusore ... il tuo occhio, savo casi particolari, riuscirà sempre, più o meno, specie da vicino, a vedere separati i tre LED.
Devi poi considerare che l'occhio umano:
è diversamente sensibile ad ogni colore, quindi, ad esempio un 128 sul verde verrà visto come molto più luminoso di un 128 sul rosso
NON è lineare quindi un aumento/diminuzione lineare, come fai tu, verrà vista come un rapido incremento e poi una lenta crescita
Detto questo, se il tutto è collegato correttamente:
è del tutto inutile fare le pinMode(), che servono solo se si usano le digitalWrite(); le analogWrite riprogrammano i pin come serve a loro.
inizia con tre belle analogWrite(pin, 255), una per ogni colore, ed accendi i al massimo i tre LED.
Io, ad esempio, proverei partendo invece con tre belle analogWrite(pin,0) così da averli tutti spenti, poi farei tre cicli di prova, prima sul rosso, poi sul verde e poi sul blu da 0 a 255 e viceversa ... dovresti vedere ogni singolo colore aumentare e spegnersi, così verifichi che il collegamento sia corretto e che i tre colori funzionino.
...
for (byte i = 0; i < 255; i++) {
analogWrite(colore, i);
delay(100);
}
for (byte i = 255; i > 0; i--) {
analogWrite(colore, i);
delay(100);
}
...