Ma a te chi lo dice che io non abbia modificato i parametri secondo come mi ha suggerito qsecofr!!!
Non mi arrabbio per queste sciocchezze e figurati se me la prendo!!!
Del resto qsecofr mi ha fatto capire dove sbagliavo indicandomi esattamente gli errori!!!
Non penso che ogni volta che modifico qualcosa come mi viene suggerito devo riscrivere il programma in forum!!!
Ho capito l'errore, tanto è vero che il secondo lcd.clear() l'avevo già cancellato, poi mi ha suggerito di cancellare il delay(), ma facendolo mi creava questo nuovo problema e l'ho scritto!!!
#include <Servo.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
float tempC;
int sensore = A1;
int val = 0;
int vecchio_val = 0;
int stato = 0;
int valore;
int angolo = 0;
Servo mioservo;
const byte tempOttima = 0;
const byte tempOttimaMax = 20;
const byte tempCritica = 25;
const byte ledgreen = 10;
const byte ledyellow = 9;
const byte ledred = 8;
bool green=false;
bool yellow=false;
bool red=false;
bool buzzer=false;
bool servo=false;
void setup() {
lcd.begin(16, 2);
pinMode(13, INPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
mioservo.attach(6);
pinMode(7, OUTPUT);
}
void loop() {
lcdlm35();
if ((tempC >= tempOttima) && (tempC <= tempOttimaMax))
{
green = true;
}
else {
green = false;
};
if ((tempC >tempOttimaMax) && (tempC <= tempCritica))
{
yellow = true;
}
else {
yellow = false;
};
if (tempC > tempCritica)
{
red = true;
}
else {
red = false;
}
aggiornacolori();
}
void lcdlm35() {
lcd.clear();
lcd.print( "Temperatura...");
tempC = analogRead(sensore);
tempC = (5.0 * tempC * 100.0)/1024.0;
lcd.setCursor(0, 1);
lcd.print(tempC);
lcd.print( (char) 223);
lcd.print(" Celsius ");
delay(750);-------------------->se cancello questo non si legge più il display, nel senso che come fosse aggiornato in continuazione!!!
}
void aggiornacolori() {
if (green == true) {
digitalWrite(ledgreen, HIGH);
}
else {
digitalWrite(ledgreen, LOW);
};
if (yellow == true) {
if(( millis() % 1000) > 500)
{
digitalWrite(ledyellow, HIGH);
}
else {
digitalWrite(ledyellow, LOW);
}
}
else {
digitalWrite(ledyellow, LOW);
}
if (red == true) {
mioservo.write(90);
if(( millis() % 1000) > 500) {
tone(7, 1000);
digitalWrite(ledred, HIGH);
}
else {
tone(7, 2000);
digitalWrite(ledred, LOW);
}
}
else {
noTone(7);
digitalWrite(ledred, LOW);
mioservo.write(0);
}
}
Ho risolto il problema dell'alimentazione, solo che ancora ogni tanto ho un salto di temperatura!!!
Come posso sostituire quel delay???
ps
Il fatto che la mia logica non funzionava l'avevo capito dall'altro ieri, tanto è vero che mi sono scusato con qsecofr perchè il programma non funzionava per un mio errore di distrazione e per il frainteso che si era creato!!!
Come puoi notare, come avevi suggerito tu, ho usato la funzione tone, solo che io avevo capito male dove scriverla e qsecofr mi ha fatto vedere il modo corretto di usarla!!!