Ciao a tutti mi chiamo Silvio, e sono da poco entrato in questo mondo.
Lo sketch qui sotto è funzionante, ma è solo per 1 sensore, la temperatura quando supera un livello impostato si accende un LED e suona un buzzer,
quando la temperatura scende sotto lo stesso valore impostato il LED e il buzzer si spengono,
se LED e buzzer stanno funzionando con il tasto tacitazione si spengono,
LED e Buzzer si rimettono in funzione al prossimo superamento
il problema è che quando aggiungo un secondo sensore,
-con le dovute aggiunte e modifiche
le due temperature vengono lette dal LCD regolarmente
ma se supero la temperatura impostata del secondo sensore il led lampeggia, e di conseguenza alche il buzzer e la tacitazione non funzionano,
mentre se super solo il primo sensore funziona regolarmente.
penso che sia colpa dell'ultima parte dello sketch riportato qui sotto,
la parte:
if (temperatura < 23) {
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=0;
delay (1000);
che è riportata anche al secondo sensore.
come posso ovviare ciò?
spero si essermi spiegato bene,
grazie in anticipo
1 sensore solo e funziona correttamente :
//collegamenti,
//pin 13 led
//pin 6 buzzer
//pin 7 pulsante tacitazione
//A0 sensore
#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);
double MioSensore(int RawADC) {
long Resistenza;
double Temperatura;
Resistenza=((10240000/RawADC) - 10000);
Temperatura = log(Resistenza);
Temperatura = 1 / (0.001129148 + (0.000234125 * Temperatura) + (0.0000000876741 * Temperatura * Temperatura * Temperatura));
Temperatura = Temperatura - 273.15;
return Temperatura;
}
int tastoTaci=7;
int ledRosso=13;
int buzzer=6;
int CambiareLeCose=0;
void fammiVedere(int valore) {
lcd.print (int(valore));
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(tastoTaci, INPUT);
pinMode(ledRosso, OUTPUT);
}
#define termometro_1 0
int temperatura;
void loop() {
lcd.setCursor(0, 0);
temperatura=MioSensore(analogRead(termometro_1));
lcd.print("MOTORE ");
fammiVedere(temperatura);
lcd.print((char)223);
lcd.setCursor(0, 2);
lcd.print("il mio nome");
//xxxxxxxxxxxxxxxxxxxxxxxxx
tastoTaci=digitalRead(7);
if ((temperatura > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
CambiareLeCose=1;
delay (1000);
}
else if ((temperatura > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=1;
delay (1000);
}
if (temperatura < 23) {
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=0;
delay (1000);
}
}
2 sensori, funziona riguardo l'LCD
ma non funziona l'allarme e la tacitazione, cioe:
ho 2 sensori, 1 buzzer, 1 LED e 1 tasto tacitazione
il primo dei 2 sensori che supera la soglia di temperatura deve far suonare il buzzer, accendere il LED e col pulsante tacitazione fermare l'alarme,
se non fermo l'allarme col pulsante tacitazione.....quando la temperatura rientra sotto la soglia l'allarme si ferma da solo,
con 1 sensore funziona, con due sensori no
#include <LiquidCrystal.h>
#include <math.h>
LiquidCrystal lcd(12, 11, 2, 3, 4, 5);
double MioSensore(int RawADC) {
long Resistenza;
double Temperatura;
Resistenza=((10240000/RawADC) - 10000);
Temperatura = log(Resistenza);
Temperatura = 1 / (0.001129148 + (0.000234125 * Temperatura) + (0.0000000876741 * Temperatura * Temperatura * Temperatura));
Temperatura = Temperatura - 273.15;
return Temperatura;
}
int tastoTaci=7;
int ledRosso=13;
int buzzer=6;
int CambiareLeCose=0;
void fammiVedere(int valore) {
lcd.print (int(valore));
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(tastoTaci, INPUT);
pinMode(ledRosso, OUTPUT);
}
#define sensoreMotore 0
#define sensoreGas 1
int temperatura;
int temperatura1=temperatura;
void loop() {
lcd.setCursor(0, 0);
temperatura=MioSensore(analogRead(sensoreMotore));
lcd.print("MOTORE ");
fammiVedere(temperatura);
lcd.print((char)223);
lcd.setCursor(0, 2);
//lcd.print("il mio nome");
//xxxxxxxxxxxxxxxxxxxxxxxxx
tastoTaci=digitalRead(7);
if ((temperatura > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
CambiareLeCose=1;
delay (1000);
}
else if ((temperatura > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=1;
delay (1000);
}
if (temperatura < 23) {
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=0;
delay (1000);
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
temperatura1=MioSensore(analogRead(sensoreGas));
lcd.print("GAS ");
fammiVedere(temperatura1);
lcd.print((char)223);
lcd.setCursor(-4, 1);
tastoTaci=digitalRead(7);
if ((temperatura1 > 23) and (tastoTaci==LOW)and(CambiareLeCose==0)) {
digitalWrite(ledRosso,HIGH);
analogWrite(buzzer, 150);
CambiareLeCose=1;
delay (1000);
}
else if ((temperatura1 > 23) and (tastoTaci==HIGH) and (CambiareLeCose==1)){
digitalWrite(ledRosso,LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=1;
delay (1000);
}
if (temperatura1 < 23) {
digitalWrite(ledRosso, LOW);
analogWrite(buzzer,LOW);
CambiareLeCose=0;
delay (1000);
}
}