Hallo zusammen ,
auf dem Gebiet von Arduino bin ich noch relativ neu.
In meinem neustem Projekt möchte ich eine Art Wetterstation mit einem TFT-Touch-Bildschirm von Elegoo und diversen Sensoren realisieren. Ich nutze für dieses Projekt einen Arduino Mega. Bis jetzt ist es mir schon gelungen das Datum, die Zeit, Temperatur und Feuchtigkeit auf dem Bildschirm ohne Flackern anzeigen zu lassen. Somit möchte ich nun noch eine Weckfunktion über einen Button auf dem Bildschirm implementieren, der mich zu einer neuen Seite bringen soll, auf der man den Alarm einstellen kann.
So weit so gut, wenn ich aber zum Test den unten stehenden Sketch hochlade, wird mir für etwa eine Sekunde auf dem Bildschirm das Interface mit Uhrzeit, Temperatur und so weiter angezeigt und der Bildschirm wird weiß, danach passiert nichts mehr. Ich habe schon gefühlt überall im Internet nach einer Problemlösung gesucht, bisher jedoch ohne Erfolg. Daher würde ich mich sehr über Eure spezifischen Beiträge zu meinem Problem freuen.
Danke im Voraus.
#include <dht.h>
//#include "DHT.h"
#include <DS3231.h>
//#include <Wire.h>
#include <Adafruit_TFTLCD.h>
//#include <Adafruit_GFX.h>
#include <TouchScreen.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define TS_MINX 122
#define TS_MINY 111
#define TS_MAXX 942
#define TS_MAXY 890
#define YP A3
#define XM A2
#define YM 9
#define XP 8
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 364);
boolean buttonEnabled = true;
//Uhrzeit
DS3231 clock;
RTCDateTime dt;
//Temperatur und Feuchtigkeit
int dht_apin = 23;
dht DHT;
int previousTemperature = 0;
int previousHumidity = 0;
char currentPage;
void setup() {
Serial.begin(9600);
//Uhrzeit
Serial.println("Initialisiere DS3231");;
clock.begin();
// clock.setDateTime(__DATE__, __TIME__);
tft.reset();
uint16_t identifier = tft.readID();
tft.begin(identifier);
tft.setRotation(0);
tft.fillScreen(BLACK);
tft.drawRect(0,0,240,320,BLUE);
pinMode(dht_apin, INPUT);
//Feuchtigkeit
tft.setCursor(10, 170);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.print("Feuchtigkeit:");
tft.setCursor(150, 200);
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.print("%");
//Temperatur
tft.setCursor(10, 100);
tft.setTextColor(WHITE);
tft.setTextSize(2);
tft.print("Temperatur:");
tft.setCursor(150, 130);
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.print("C");
//Alarm
tft.fillRect(10, 250, 100, 40, RED);
tft.drawRect(10, 250, 100, 40, WHITE);
tft.setCursor(15, 258);
tft.setTextColor(WHITE);
tft.setTextSize(3);
tft.print("Alarm");
}
void loop() {
clockAndDHT11();
touch();
}
void touch() {
//Touchscreen
TSPoint p = ts.getPoint();
if (p.z > ts.pressureThreshhold) {
p.x = map(p.x, TS_MAXX, TS_MINX, 0,480);
p.y = map(p.y, TS_MAXY, TS_MINY, 0, 320);
if(p.x>250&& p.x<290&& p.y>10 && p.y<110 && buttonEnabled){
buttonEnabled = false;
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
tft.fillScreen(RED); //Nur zum Test
}
}
}
void clockAndDHT11() {
currentPage = '1';
//TEMPERATUR UND FEUCHTIGKEIT
DHT.read11(dht_apin);
//Temperatur
int currentTemperature = DHT.temperature;
//Feuchtigkeit
int currentHumidity = DHT.humidity;
//UHRZEIT
dt = clock.getDateTime();
//ZEIT
long currentSeconds = clock.dateFormat("s", dt);
long currentMinutes = clock.dateFormat("i", dt);
long currentHours = clock.dateFormat("H", dt);
int previousSeconds = 0;
int previousMinutes = 0;
int previousHours = 0;
//DATUM
long currentDay = clock.dateFormat("d", dt);
long currentMonth = clock.dateFormat("m", dt);
long currentYear = clock.dateFormat("Y", dt);
int previousDay = 0;
int previousMonth = 0;
int previousYear = 0;
const long currentMillis = millis();
long previousMillis = 0;
//Sekunden
if(currentSeconds - previousSeconds != 0) {
tft.setCursor(180, 50);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("s",dt));
previousSeconds = currentSeconds;
}
//Minuten
if(currentMinutes - previousMinutes != 0) {
tft.setCursor(100, 50);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("i :",dt));
previousMinutes = currentMinutes;
}
//Stunden
if(currentHours - previousHours != 0) {
tft.setCursor(20, 50);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("H :",dt));
previousHours = currentHours;
}
//Tag
if(currentDay - previousDay != 0) {
tft.setCursor(3, 10);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("d -",dt));
previousDay = currentDay;
}
//Monat
if(currentMonth - previousMonth != 0) {
tft.setCursor(83, 10);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("m -",dt));
previousMonth = currentMonth;
}
//Jahr
if(currentYear - previousYear != 0) {
tft.setCursor(163, 10);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(clock.dateFormat("Y",dt));
previousYear = currentYear;
}
//Temperatur
if(currentTemperature - previousTemperature != 0) {
tft.setCursor(20, 130);
tft.setTextColor(WHITE,BLACK);
tft.setTextSize(3);
tft.print(DHT.temperature);
previousTemperature = currentTemperature;
}
//Feuchtigkeit
if(currentHumidity - previousHumidity != 0) {
tft.setCursor(20, 200);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(3);
tft.print(DHT.humidity);
previousHumidity = currentHumidity;
}
Serial.print("Long Number Format: ");
Serial.println(clock.dateFormat("H:i:s",dt));
Serial.println();
Serial.print("Temperatur: ");
Serial.println(DHT.temperature);
Serial.print("Feuchtigkeit: ");
Serial.println(DHT.humidity);
Serial.println();
}
TFT_LCD_Touchscreen.ino (6.15 KB)
DS3231.zip (25.2 KB)
Adafruit_TFTLCD.zip (16.4 KB)
TouchScreen.zip (4.57 KB)