Doppio LOOP
salve. ho creato un termostato con arudino per la mia caldaia. mi piace come sistema domani gli prendo una mille fori e lo faccio standalone in scatola.
unica pecca volevo fagli fare la lettura della temperatura in tempi piu ritardati tipo 10-20 secondi... pero qui ce il problmema..c'è il set-up della temperatura che funziona con 2 tasti...up--down.. e quando premo il valore impostato mi viene visualizzato dopo 20 secondi... visto che ho messo il delay prima della lettura della temperatura.. come potrei separare tale funzione con tempi diversi? la lettura che me la faccia dai 10 secondi in su.... il resto refresh display e altro 1-2 secondi
per rendervi l'idea ecco lo skech:
unica pecca volevo fagli fare la lettura della temperatura in tempi piu ritardati tipo 10-20 secondi... pero qui ce il problmema..c'è il set-up della temperatura che funziona con 2 tasti...up--down.. e quando premo il valore impostato mi viene visualizzato dopo 20 secondi... visto che ho messo il delay prima della lettura della temperatura.. come potrei separare tale funzione con tempi diversi? la lettura che me la faccia dai 10 secondi in su.... il resto refresh display e altro 1-2 secondi
per rendervi l'idea ecco lo skech:
code: [select]
#include <liquidcrystal.h>
//lcd setup
#define rs 12
#define en 11
#define d7 5
#define d6 4
#define d5 3
#define d4 2
#define off 7
#define on 6
#define tempp 9
#define tempm 8
#define lm35_pin 2
float vref = 1.1;
float tempc;
int tempsoglia = 20;
int reading;
liquidcrystal lcd( rs, en, d7, d6, d5, d4 );
void setup()
{
lcd.begin( 4, 20 );
lcd.setcursor( 0, 0 );
pinmode(13, output);
analogreference( internal );
analogread( lm35_pin );
pinmode(off, output);
pinmode(on, output);
pinmode(tempp, input);
pinmode(tempm, input);
pinmode(13, output);
delay(200);
//test
lcd.setcursor( 0, 0 );
lcd.print( "......:welcome:.....");
lcd.setcursor( 0, 1 );
lcd.print( "........:test:......");
lcd.setcursor( 0, 2 );
lcd.print( "........:test:......");
delay(1000);
digitalwrite(on, high);
digitalwrite(off, low);
digitalwrite(13, high);
lcd.setcursor( 0, 3 );
lcd.print( "....run......run....");
delay(1500);
digitalwrite(off, high);
digitalwrite(on, low);
digitalwrite(13, low);
lcd.setcursor( 0, 3 );
lcd.print( "....off......off....");
delay(2000);
lcd.clear();
digitalwrite(off, low);
digitalwrite(on, low);
digitalwrite(13, low);
delay(1000);
}
void loop()
{
float temp = readtemp();
sendtemptolcd( temp );
if(digitalread(tempm) == high){ tempsoglia--; }
if(digitalread(tempp) == high){ tempsoglia++; }
}
float readtemp()
{
tempc = analogread(lm35_pin);
tempc = (5.0 * tempc * 100)/1024.0;
reading = analogread(lm35_pin);
tempc = reading / 10.0;
}
void sendtemptolcd( float temp )
{
lcd.clear();
lcd.setcursor( 0, 0 );
lcd.print( "......:welcome:.....");
lcd.setcursor( 0, 1 );
lcd.print( "temp read:");
lcd.setcursor( 11, 1 );
lcd.print( temp );
lcd.print( ' ' );
lcd.print( (char) 223 );
lcd.print( 'c' );
lcd.setcursor( 0, 2 );
lcd.print( "temp set: ");
lcd.print( ' ' );
lcd.print(tempsoglia);
lcd.print( ".00 " );
lcd.print( (char) 223 );
lcd.print( 'c' );
if(temp <= tempsoglia){
digitalwrite(on, high);
digitalwrite(off, low);
delay(500);
lcd.setcursor( 0, 3 );
lcd.print( "....run......run....");
digitalwrite(13, high);
}else{
digitalwrite(off, high);
digitalwrite(on, low);
delay(500);
digitalwrite(13, low);
lcd.setcursor( 0, 3 );
lcd.print( "....off......off....");
}
delay(500);
}
impara ad eliminare la delay() (... che è una istruzione "bloccante") ed al suo posto introduci l'utilizzo della millis() (... che ti permette di mettere in piedi una logica non bloccante).
studiati come fare qui, poi qui ed infine un esempio qui.
inizia con qualche cosa di semplice, per capire bene come fare e poi, appresa bene la tecnica, applica il tutto al tuo programma
guglielmo
studiati come fare qui, poi qui ed infine un esempio qui.
inizia con qualche cosa di semplice, per capire bene come fare e poi, appresa bene la tecnica, applica il tutto al tuo programma
guglielmo
Arduino Forum > International > Italiano > Software (Moderator: leo72) > Doppio LOOP
arduino
Comments
Post a Comment