Stephan90
15.12.2016, 01:32
Hallo,
Ich bin gerade dabei ein Programm zu erstellen bei dem eine Heizung je nach Temperatur ein bzw. ausgeschalten werden soll. Die soll Temperatur kann über Taster eingestellt werden.
Auf einem LCD Display wird die Soll und Ist Temperatur angezeigt . Das Programm funktionier soweit auch (Ausgänge per LED simuliert), allerdings habe ich das Problem das die Temperatur werte im Display leicht flackern (nur die Grad Angabe, der Text "Soll Temp:" und "Ist Temp" wird ohne Flackern angezeigt). Ich habe gelesen das man diese werte nur aktualisieren soll wenn sie sich auch ändern, daher kann das Flackern kommen. Ist das richtig? Wenn ja weis ich aber nicht so richtig wie ich das im Programm umsetzen soll.
Danke im voraus
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
float sensor = 0;
int celsius = 0;
int soll_temp = 30;
int einschalt_temp = 0;
int abschalt_temp = 0;
int taster_temp_hoch = 2;
int taster_temp_runter = 3;
int heizung = 4; //LED rot
int lueftung = 5; //LED grün
unsigned long previousMillis = 0;
unsigned long interval = 1000;
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1000;
void setup()
{
lcd.begin(16, 2);
pinMode(taster_temp_hoch, INPUT_PULLUP);
pinMode(taster_temp_runter, INPUT_PULLUP);
pinMode(heizung, OUTPUT);
pinMode(lueftung, OUTPUT);
}
void temp_einstellung()
{
if(digitalRead(taster_temp_hoch) == LOW)
{
if(millis()-previousMillis > interval)
{
previousMillis = millis();
soll_temp++;
}
}
if(digitalRead(taster_temp_runter) == LOW)
{
if(millis()-previousMillis > interval)
{
previousMillis = millis();
soll_temp--;
}
}
}
void temp_regelung()
{
if(celsius > abschalt_temp)
{
digitalWrite(heizung, LOW);
}
else if(celsius < soll_temp)
{
digitalWrite(heizung, HIGH);
}
}
void LCD_ausgabe()
{
lcd.setCursor(0, 0);
lcd.print("Soll Temp: C");
lcd.setCursor(11, 0);
lcd.print(soll_temp);
lcd.setCursor(0, 1);
lcd.print("Ist Temp: C");
lcd.setCursor(10, 1);
lcd.print(celsius);
}
void loop()
{
digitalWrite(lueftung, HIGH);
sensor = analogRead(0);
celsius = (580.0-sensor)/10;
abschalt_temp = soll_temp + 2;
temp_einstellung();
temp_regelung();
LCD_ausgabe();
}
Ich bin gerade dabei ein Programm zu erstellen bei dem eine Heizung je nach Temperatur ein bzw. ausgeschalten werden soll. Die soll Temperatur kann über Taster eingestellt werden.
Auf einem LCD Display wird die Soll und Ist Temperatur angezeigt . Das Programm funktionier soweit auch (Ausgänge per LED simuliert), allerdings habe ich das Problem das die Temperatur werte im Display leicht flackern (nur die Grad Angabe, der Text "Soll Temp:" und "Ist Temp" wird ohne Flackern angezeigt). Ich habe gelesen das man diese werte nur aktualisieren soll wenn sie sich auch ändern, daher kann das Flackern kommen. Ist das richtig? Wenn ja weis ich aber nicht so richtig wie ich das im Programm umsetzen soll.
Danke im voraus
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
float sensor = 0;
int celsius = 0;
int soll_temp = 30;
int einschalt_temp = 0;
int abschalt_temp = 0;
int taster_temp_hoch = 2;
int taster_temp_runter = 3;
int heizung = 4; //LED rot
int lueftung = 5; //LED grün
unsigned long previousMillis = 0;
unsigned long interval = 1000;
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1000;
void setup()
{
lcd.begin(16, 2);
pinMode(taster_temp_hoch, INPUT_PULLUP);
pinMode(taster_temp_runter, INPUT_PULLUP);
pinMode(heizung, OUTPUT);
pinMode(lueftung, OUTPUT);
}
void temp_einstellung()
{
if(digitalRead(taster_temp_hoch) == LOW)
{
if(millis()-previousMillis > interval)
{
previousMillis = millis();
soll_temp++;
}
}
if(digitalRead(taster_temp_runter) == LOW)
{
if(millis()-previousMillis > interval)
{
previousMillis = millis();
soll_temp--;
}
}
}
void temp_regelung()
{
if(celsius > abschalt_temp)
{
digitalWrite(heizung, LOW);
}
else if(celsius < soll_temp)
{
digitalWrite(heizung, HIGH);
}
}
void LCD_ausgabe()
{
lcd.setCursor(0, 0);
lcd.print("Soll Temp: C");
lcd.setCursor(11, 0);
lcd.print(soll_temp);
lcd.setCursor(0, 1);
lcd.print("Ist Temp: C");
lcd.setCursor(10, 1);
lcd.print(celsius);
}
void loop()
{
digitalWrite(lueftung, HIGH);
sensor = analogRead(0);
celsius = (580.0-sensor)/10;
abschalt_temp = soll_temp + 2;
temp_einstellung();
temp_regelung();
LCD_ausgabe();
}