Allora, ecco quello che ho scoperto:
#include "LiquidCrystal.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(analogRead(A0));
lcd.setCursor(8, 0);
lcd.print(analogRead(A2));
lcd.setCursor(0, 1);
lcd.print(analogRead(A1));
lcd.setCursor(8, 1);
lcd.print(analogRead(A3));
delay(500);
}
Con questo codice stampo sull'lcd quello che leggo dai pin analogici 0, 1, 2 e 3.
Quello che c'è collegato ai pin A0 e A1 lo lascio fisso, mentre faccio variare quello collegato ai pin A2 e A3:
- se alzo A3 cambia anche il valore di A0
- se alzo A2 cambia anche il valore di A1
Quando alzo A2 o A3 vedo correttamente i valori di A2 e A3 (almeno sembra che salgano correttamente), mentre gli altri valori si alzano di un po' ma non in modo stabile, rimangono sempre più alti del normale ma un po' salgono e un po' scendono.
Se invece faccio:
#include "LiquidCrystal.h"
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
}
void loop() {
lcd.clear();
lcd.setCursor(0, 0);
analogRead(A0);
lcd.print(analogRead(A0));
lcd.setCursor(8, 0);
lcd.print(analogRead(A2));
lcd.setCursor(0, 1);
analogRead(A1);
lcd.print(analogRead(A1));
lcd.setCursor(8, 1);
lcd.print(analogRead(A3));
delay(500);
}
funziona tutto correttamente.
Anche se non metto analogRead() a vuoto per i pin A2 e A3 funziona, forse perchè A0 e A1 rimangono sempre uguali?
Se invece degli analogRead() a vuoto metto un delay(10) i valori diventano instabili come all'inizio.
p.s. non ho collegato più nessun interruttore.
p.p.s.
leo72:
La prima volta che si usa l'ADC è bene fare una lettura a vuoto per calibrare il circuito S&H interno. Questo vale anche nel caso di ADC spento per motivi di sleep o altro.
Intendi una lettura a vuoto all'inizio di tutto e poi basta o ogni volta prima di leggere da un pin analogico?
Perchè se metto una lettura a vuoto in setup() non funziona l'lcd.
edit: forse non si era resettato bene l'lcd ho riprovato e funziona ma i valori sono instabili come all'inizio.