Hallo, ich bin absoluter Anfänger, habe aber voriges Jahr ein Arduino-Baukasten geschenkt bekommen. Nach ersten Versuchen bin ich nun hier. Mein Ziel ist es, die bisherige Steuerung eines Reifeschrankes durch einen Arduino mit Touch-TFT zu ersetzen. Ein paar Zeilen habe ich schon geschrieben, Temperatur und Feuchte kann ich messen. Nun würde ich gern die Sollwerte mit Buttons verändern wollen. Genau das aber, bekomme ich nicht hin. Habe mehrere Stunden gefummelt und probiert. Ich raffe es einfach nicht. Vielleicht kann mir hier jemand behilflich sein. Der TFT ist einer von LCDWIKI, scheinbar funktionieren auch nur diese Bibliotheken. Hier der Code.
#include <TouchScreen.h> //touch library
#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
#include <DHT.h>
LCDWIKI_KBV my_lcd(NV3029C, A3, A2, A1, A0, A4);
#define DHTPIN 10
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define BLACK 0x0000 /* 0, 0, 0 */
#define BLUE 0x001F /* 0, 0, 255 */
#define RED 0xF800 /* 255, 0, 0 */
#define GREEN 0x07E0 /* 0, 255, 0 */
#define CYAN 0x07FF /* 0, 255, 255 */
#define MAGENTA 0xF81F /* 255, 0, 255 */
#define YELLOW 0xFFE0 /* 255, 255, 0 */
#define WHITE 0xFFFF /* 255, 255, 255 */
#define NAVY 0x000F /* 0, 0, 128 */
#define DARKGREEN 0x03E0 /* 0, 128, 0 */
#define DARKCYAN 0x03EF /* 0, 128, 128 */
#define MAROON 0x7800 /* 128, 0, 0 */
#define PURPLE 0x780F /* 128, 0, 128 */
#define OLIVE 0x7BE0 /* 128, 128, 0 */
#define LIGHTGREY 0xC618 /* 192, 192, 192 */
#define DARKGREY 0x7BEF /* 128, 128, 128 */
#define ORANGE 0xFD20 /* 255, 165, 0 */
#define GREENYELLOW 0xAFE5 /* 173, 255, 47 */
#define PINK 0xF81F /* 255, 0, 255 */
#define YP A3 // must be an analog pin, use "An" notation!
#define XM A2 // must be an analog pin, use "An" notation!
#define YM 9 // can be a digital pin
#define XP 8 // can be a digital pin
//param calibration from kbv
//touch sensitivity for X
#define TS_MINX 908
#define TS_MAXX 120
//touch sensitivity for Y
#define TS_MINY 147
#define TS_MAXY 945
// We have a status line for like, is FONA working
#define STATUS_X 10
#define STATUS_Y 65
//touch sensitivity for press
#define MINPRESSURE 10
#define MAXPRESSURE 1000
#define RELAY_TEMPERATURE_PIN 11
#define RELAY_HUMIDITY_PIN 12
#define Temperature
#define Humidity
#define Heater
#define Fogger
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
void setup(void)
{
Serial.begin(9600);
dht.begin();
delay(2000);
my_lcd.Init_LCD();
Serial.println(my_lcd.Read_ID(), HEX);
//my_lcd.Set_Text_Back_colour(BLACK);
my_lcd.Set_Rotation(3);
my_lcd.Set_Text_Size(2);
my_lcd.Set_Text_colour(WHITE);
my_lcd.Fill_Screen(BLACK);
pinMode(RELAY_TEMPERATURE_PIN, OUTPUT);
pinMode(RELAY_HUMIDITY_PIN, OUTPUT);
}
void drawButtons()
{
my_lcd.Set_Text_colour(WHITE);
my_lcd.Fill_Rect(5, 160, 60, 40, YELLOW); // Plus-Temp Button
my_lcd.Fill_Rect(70, 160, 60, 40, YELLOW); // Minus-Temp Button
my_lcd.Fill_Rect(140, 160, 60, 40, YELLOW); // Plus-Humid Button
my_lcd.Fill_Rect(205, 160, 60, 40, YELLOW); // Minus-Humid Button
my_lcd.Set_Text_colour(BLACK);
my_lcd.Set_Text_Size(2);
my_lcd.Print_String("+", 30, 175); // Plus-Temp Text
my_lcd.Print_String("-", 95, 175); // Minus-Temp Text
my_lcd.Print_String("+", 165, 175); // Plus-Humid Text
my_lcd.Print_String("-", 230, 175); // Minus-Humid Text
}
float tempSetpoint = 16;
int humidSetpoint = 90;
void loop(void)
{
uint16_t i;
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
TSPoint touch = ts.getPoint();
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
{
//p.x = my_lcd.Get_Display_Width()-map(p.x, TS_MINX, TS_MAXX, my_lcd.Get_Display_Width(), 0);
//p.y = my_lcd.Get_Display_Height()-map(p.y, TS_MINY, TS_MAXY, my_lcd.Get_Display_Height(), 0);
p.x = map(p.x, TS_MINX, TS_MAXX, 0, my_lcd.Get_Display_Width());
p.y = map(p.y, TS_MINY, TS_MAXY, my_lcd.Get_Display_Height(),0);}
float h = dht.readHumidity();
float t = dht.readTemperature();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
my_lcd.Set_Text_colour(YELLOW);
my_lcd.Print_String("Kaese-Reifeschrank", 60, 5);
my_lcd.Set_Text_colour(WHITE);
my_lcd.Print_String(String(Temperature) + "Ist Temp", 10, 30);
my_lcd.Print_String(String(t, 1) + "0 C", 140, 30);
my_lcd.Print_String(String(Humidity) + "Ist RH", 10, 50);
my_lcd.Print_String(String(h, 1) + "0 %", 140, 50);
my_lcd.Print_String("Soll Temp ", 10, 70);
my_lcd.Print_String(String(tempSetpoint) + " C", 140, 70);
my_lcd.Print_String("Soll RH ", 10, 90);
my_lcd.Print_String(String(humidSetpoint) + ".00 %", 140, 90);
if (temperature < tempSetpoint)
{
my_lcd.Print_String(String (Heater) + "Heizung AN" ,10, 110);
digitalWrite(RELAY_TEMPERATURE_PIN, HIGH);
} else
{
my_lcd.Print_String(String (Heater) + "Heizung AUS" ,10, 110);
digitalWrite(RELAY_TEMPERATURE_PIN, LOW);
}
// Überprüfe die Luftfeuchtigkeitsschwelle
if (humidity < humidSetpoint) {
my_lcd.Print_String(String (Fogger) + "Dunst AN" ,10, 130);
digitalWrite(RELAY_HUMIDITY_PIN, HIGH);
} else {
my_lcd.Print_String(String (Fogger) + "Dunst AUS" ,10, 130);
digitalWrite(RELAY_HUMIDITY_PIN, LOW);
}
drawButtons();
}