Ciao a tutti, sto realizzando una corona di LED dove vorrei poter scegliere quale parte della corona accendere tramite un semplice joystic (esempio: solo primo quadrante etc...). Inoltre vorrei controllare l'intensità della luce tramite potenziomentro.
Ora ho un problema, il valore della luminosità non mi cambia con continuità nel tempo. Cioè girando la manopola del potenziometro, l'intensità di luce non cambia con continuità ma solo in modo discreto.
Questo è parte dello script:
void loop() {
int ValPotenziometro= analogRead(Potenziometro);
int Luminosita=map(ValPotenziometro, 0, 1023, 0, 255);
ValoreX= analogRead(AsseX);
ValoreY= analogRead(AsseY);
ValoreBottone= digitalRead(Bottone);
if ((ValoreX==0 && ValoreBottone==1) && (ValoreY>=400 && ValoreY<=500))
{
analogWrite(Led1, Luminosita);
}
else if ( ValoreBottone==0)
{
analogWrite(Led1, LOW);
}
Buongiorno,
prina di tutto, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...
... poi, in conformità al suddetto 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).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
metti un delay (diciamo 100ms) nel loop(), e magari fai analogWrite solo quando leggi un valore differente (con una tolleranza diciamo di 10-15) altrimenti scrivi il valore PWM migliaia di volte al secondo e generi così tu un effetto strobo..
Una cosa del tipo:
int oldLuminosita = 0;
void loop() {
int ValPotenziometro= analogRead(Potenziometro);
int Luminosita=map(ValPotenziometro, 0, 1023, 0, 255);
ValoreX= analogRead(AsseX);
ValoreY= analogRead(AsseY);
ValoreBottone= digitalRead(Bottone);
if ((ValoreX==0 && ValoreBottone==1) && (ValoreY>=400 && ValoreY<=500))
{
if ( abs(Luminosita-oldLuminosita) > 10 ) {
analogWrite(Led1, Luminosita);
delay(100);
}
}
else if ( ValoreBottone==0)
{
analogWrite(Led1, LOW);
}