Ciao a tutti, ho un problema che forse è banale.. Voglio utilizzare un display LCD generico per mostrare il livello di volume di una traccia audio, come spesso si vede nelle apparecchiature più datate dove una barra si annerisce da 0 al massimo ad indicare il livello di volume.
Il programma che avevo pensato di fare era questo:
int vol=A0;
void loop(){
int a=0, m=0, av;
av=analogRead(vol);
In questo modo legge il valore prelevato dall'ingresso analogico dove ho collegato un trimmer, e dopo averlo trasformato in un valore che va da 0 a 16 che sono il numero delle colonne dell'lcd, dovrebbe farmi il rettangolino nero in corrispondenza della colonna corrispondente al numero letto e in tutti quelli precedenti, poi quando il valore di "a" è minore del valore in cui era prima dovrebbe posizionarsi con il cursore sulla colonna precedente e cancellare il rettangolino nero.. (spero di essermi spiegato). Il problema è che quando il valore di "a" è in crescita funziona e restano neri anche i rettangolini precedenti perché non c'è nessun lcd.clear, ma non funziona al contrario e una volta raggiunto il massimo valore (16) mi trovo con tutta la riga nera e non si cancella più.
Uhm.. non funziona.. il display non scrive nulla.. se invece scrivo così
a=map(av, 0, 1023, 0, 16);
lcd.setCursor(0, 0);
lcd.print("volume");
lcd.setCursor(0, 1);
while(3){
if(b<=a){
for(b=0;b=15;b++){
lcd.setCursor(a, 1);
lcd.print((char)255);}}
else{
for(b=0;b=15;b++){
lcd.print(" ");}}
}
}
Mi scrive "volume" sulla prima riga e mi annerisce il rettangolo riferito alla posizione con cui si avvia, se sposto il trimmer e premo reset si accende il rettangolo riferito alla posizione, se sposto senza premere reset non cambia nulla..
Tutte le volte che il ciclo si ripete si azzera il valore di m (int m=0; lo hai messo in testa al ciclo loop).
Poi vedo inutile scrivere else if dato che se la prima if controlla che a sia maggiore o uguale ad m, è scontato che l'ultima possibilità sia proprio che a sia minore di m
Attento ad una cosa perché nel tuo primo codice, nel caso di repentini cambi di valore, ti rimangono dei quadratini pieni nella barra dell'equalizzatore. Questo secondo è già meglio.
Ahhh che stupido! Ho perso mezz'ora girando e rigirando le istruzioni senza accorgermi dei due "="!!
Meglio che mi riprenda a programmare prima che mi dimentichi del tutto
Grazie a tutti delle risposte!