Salve a tutti..ho una domanda da porvi.. ho collegato ad arduino uno un sensore di temperatura il quale viene letto da un display lcd 16x2. fino a qui tutto bene.
Ho voluto collegare due led, uno rosso e uno verde, ma ho sbagliato qualcosa nel codice perchè lampeggia solo il led rosso.
Al variare della temperatura, se scende sotto i 18° il led rosso si dovrebbe accendere; se sale sopra i 25 ° il led verde si dovrebbe accendere. Se il valore della temperatura rimane tra i 18° e i 25° i led non dovrebbero accendersi.
- led rosso acceso < 18° ;
- led verde acceso > 25°;
- led spenti >= 18 , <= 25
Di seguito ho inserito il codice:
// Vengono indicate le temperature per cui i LED si devono accendere
int temperaturaMassima = 25;
int temperaturaMinima = 18;
int t;
int i;
// Vegngono inizializzati i pin a cui sono connessi i LED
int led_red = 7;
int led_green = 6;
int ritardo = 1000;
const int NRLETTURE = 12; // numero letture
const int SensorPin = A0; //variabile lettura sensore
const int fisso = 1.8;
float valori[NRLETTURE]; //array con i valori
int T_campionamento = 80; // tempo campionamento
float sommaGradi; //variabile somma
float mediaGradi; //variabile media
float conversione1;
float conversione2;
#include <LiquidCrystal.h> // includo la libreria del display lcd
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //pin display LCD
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
Serial.begin(9600); //inizializzo la seriale
lcd.print("Creato da:");
lcd.setCursor(0,2);
lcd.print("Gianluca Gallo");
delay(3000);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
pinMode(led_red, OUTPUT);
pinMode(led_green, OUTPUT);
}
void loop()
{
for ( int i = 0; i<=NRLETTURE;i++)
{
int sensorVal = analogRead(SensorPin);
float voltage = (sensorVal /1024.0) * 5.0;
float temperature = ((voltage - 0.5) * 100);
// conversione1 = (temperature - 32);
// conversione2 = conversione1 / fisso;
valori[i] = temperature; //conversione2;
delay(T_campionamento);
}
sommaGradi = 0; // devi essere sicuro che il primo valore sia zero, altrimenti poi sballa tutto
for (int i=0; i<NRLETTURE; i++) //ciclo che somma i valori dell'array
{
sommaGradi = sommaGradi + valori[i];
}
mediaGradi = sommaGradi / NRLETTURE; //divido la somma dei valori per il loro numero (media)
lcd.clear(); //pulisco lo schermo
Serial.print ("Gradi: "); //scrivo sul display la parola "gradi"
Serial.println(valori[i]); //scrivo la temperatura sulla seriale
lcd.print("Temperatura:"); //scrivo sul display la parola "temperatura"
lcd.setCursor(0,2); //sposto il cursore sulla seconda linea
lcd.print(valori[i]); //scrivo la temperatura
lcd.print(" Gradi"); // scrivo sul display la parola "gradi"
if (valori[i] >temperaturaMassima)
{
digitalWrite(13,HIGH);
Serial.println("Temperatura raggiunta!!!!");
}
// I prossimi due IF fanno accedere i LED, a seconda della temperatura
if (t > temperaturaMassima)
{
digitalWrite(led_green, HIGH); // Viene accesso il LED verde
delay(ritardo);
digitalWrite(led_green, LOW); // Viene spento il LED verde
}
if (t < temperaturaMinima)
{
digitalWrite(led_red, HIGH); // Viene accesso il LED rosso
delay(ritardo);
digitalWrite(led_red, LOW); // Viene spento il LED rosso
}
{
digitalWrite(13,LOW);
}
delay(2000);
}