Ciao a tutti, ho un problema nella visualizzazione della temperatura
//Pin di collegamento del piedino Vout del sensore di temperatura
#define pin_temp A0
//Indica ogni quanti cicli di loop aggiornare il valore della temperatura
#define ritardo 67
//Indica se il display è ad anodo comune
#define anodo_com false
//Contatore per il numero di loop
int cont = 0;
//Pin display {a, b, c, d, e, f, g}
const int pin_display[7] = {2, 3, 4, 5, 6, 7, 8};
#define pin_decina 10 //Pin di abilitazione del display delle decine
#define pin_unita 11 //Pin di abilitazione del display delle unità
#define pin_decimi 9 //Pin di abilitazione del display dei decimi
#define num_cifre 3 //Numero di cifre da visualizzare (decine, unità, decimi)
//Pin di abilitazione dei display {decine, unità, decimi}
const int pin_display_en[num_cifre] = {pin_decina, pin_unita, pin_decimi};
//Costruzione dei numeri ({a, b, c, d, e, f, g} del display)
const boolean numeri[10][7] = {
{true, true, true, true, true, true, false}, //Numero 0
{false, true, true, false, false, false, false}, //Numero 1
{true, true, false, true, true, false, true}, //Numero 2
{true, true, true, true, false, false, true}, //Numero 3
{false, true, true, false, false, true, true}, //Numero 4
{true, false, true, true, false, true, true}, //Numero 5
{true, false, true, true, true, true, true}, //Numero 6
{true, true, true, false, false, true, false}, //Numero 7
{true, true, true, true, true, true, true}, //Numero 8
{true, true, true, true, false, true, true}, //Numero 9
};
//In questa variabile verrà memorizzata la temperatura prelevata dal sensore di temperatura
float temp;
//La tempertura prelevata verrà suddivisa in decine, unità e decimi.
int decine, unita, decimi;
void setup() {
//Imposto i pin come OUTPUT
for (int i = 2; i < 12; i++) {
pinMode(i, OUTPUT);
}
/*Imposto Vref dell'ADC a 1,1V
(per una maggiore precisione nel calcolo della temperatura)
-------------------------------
IMPORTANTE: Se utilizzi Arduino Mega sostituisci INTERNAL con INTERNAL1V1 */
analogReference(INTERNAL1V1);
}
void loop() {
/*Aggiorno il valore della temperatura ogni 1s.
Per ogni ciclo di loop sono previsti circa 15ms di ritardo (delay(5) * 3).
Considerando che ritardo = 67; ottengo 15 * 67 = 1005ms = circa 1s.*/
if (cont == ritardo) {
//Resetto il contatore
cont = 0;
//Calcolo della temperatura
//=====================================
temp = 0;
for (int i = 0; i < 5; i++) //Esegue l'istruzione successiva 5 volte
temp += (analogRead(pin_temp) / 9.31); //Calcola la temperatura e la somma alla variabile 'temp'
temp = temp / 5; //Calcola la media matematica dei valori di temperatura
//=====================================
//Calcolo le decine
decine = int(temp / 10);
//Calcolo le unità
unita = (int(temp) - (decine * 10));
//Calcolo la cifra decimale
decimi = int(temp * 10) - (unita * 10) - (decine * 100);
}
//Incremento il contatore
cont++;
VisualizzaNumero(decine, pin_decina);
delay(5);
VisualizzaNumero(unita, pin_unita);
delay(5);
VisualizzaNumero(decimi, pin_decimi);
delay(5);
}
/*Visualizza il numero passato come parametro (numero) nel display specificato (disp).
Per i valori di 'disp' ammessi, vedi: pin_display_en*/
void VisualizzaNumero(int numero, int disp) {
int i; //Contatore
//Abilito solo il display di mio interesse e disabilito gli altri
for (i = 0; i < num_cifre; i++) {
if (pin_display_en[i] == disp) {
/*Se il display è ad anodo comune devo mandare il livello logico alto per attivarlo.
Se è a catodo comune verrà mandato il livello logico basso per attivarlo.*/
digitalWrite(pin_display_en[i], anodo_com);
} else {
digitalWrite(pin_display_en[i], !anodo_com);
}
}
//Accendo o spengo i vari LED del display
for (i = 0; i < 7; i++) {
//Se il display è ad anodo comune, devo invertire tutti i valori della matrice 'numeri'
digitalWrite(pin_display[i], (anodo_com ^ numeri[numero][i]));
}
}
questo è il codice solo che non visulizzo correttamente la temperatura
questi sono i display http://www.farnell.com/datasheets/1864135.pdf
qualche tempo fa ero riuscito a visualizzare la temperatura, adesso invece non ne vuole sapere…
i display si accendono ma non leggo numeri… i collegamenti sono giusti