//Autore: Vincenzo Maida
//Data: 31/03/2015 - Torino (Italy)
//Termometro ambiente con LM35 basato su shield con display TIL311 (TIL311_SHIELD2 AVANZATA)
int pinLM35=A1; //pin sensore di temperatura LM35
double valoreSensore=0; //Valore letto dal sensore LM35
double tensione=0.0; //Valore di tensione corrispondente al valore letto dall'ADC
double temp=0; //Temperatura corrispondente al valore letto dall'LM35 (tensione)
//Display TIL311 (DP1 e DP2)
int BL1=5; //Input Blank (8) di DP1 Decine su uscita PWM di Arduino. 0=Acceso; 1=Spento (attivo basso)
int pin1[] = {1,0,3,6};//Pin TIL311 Decina (Display 1 a sinistra). Segmenti A (3), B(2), C(13), D(12) del TIL 311
int BL2=11; //Input Blank (8) di DP2 Unità su uscita PWM di Arduino. 0=Acceso; 1=Spento (attivo basso)
int pin2[] = {8,7,9,12};//Pin TIL311 Unità (Display 2 a destra). Segmenti A(3), B(2), C(13), D(12) del TIL 311
int TIL[][16]={
{0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1},
{0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1},
{0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1},
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}
};
//Variabili per gestione display
int d=0; //Contatore decine
int u=0; //Contatore unità
int i=0;
// the setup routine runs once when you press reset:

void setup() {
// initialize the digital pin as an output.
//Inizializza segmenti TIL311 di DP1 (Decine)
for(i=0;i<4;i++){
pinMode(pin1[i], OUTPUT);
} 
pinMode(BL1,OUTPUT);
digitalWrite(BL1,LOW); //Accende il display decine
//Inizializza segmenti TIL311 di DP2 (Unità)
for(i=0;i<4;i++){
pinMode(pin2[i], OUTPUT);
pinMode(BL2,OUTPUT);
digitalWrite(BL2,LOW); //Accende il display unità
} 

  // put your setup code here, to run once:

}

void loop() {
 //Legge sensore LM35
valoreSensore=analogRead(pinLM35);
tensione=valoreSensore*5/1023; //Valore della tensione letta in ingresso
temp=tensione*100;//Valore di tensione convertito in temperatura
d=temp/10;//Calcolo le decine
u=temp-(d*10);//Calcolo le unità
//Aggiorna cife display
//Display decine
for(i=0;i<4;i++){
digitalWrite(pin1[i],TIL[i][d]);
} 
//Display unità
for(i=0;i<4;i++){
digitalWrite(pin2[i],TIL[i][u]);
}
 delay(500);//Lettura ogni 500ms
}