Hallo Elias,
Grundsätzlich ist das, was Du vorhast, einfach realisierbar, es muß "nur" in Deinen Kopf ![]()
Zeitverzögerungen mittels delay blockieren alle anderen Aktivitäten, daher ist das "böse". Zeiten kannst Du besser mit millis erfassen. In den Beispielen der IDE findest Du blink_without_delay und im Forum die Nachtwächtererklärung. Das sollte Dir weiterhelfen ![]()
Wenn nicht ist auch die Verwendung einer Bibliothek möglich:
Programm mit MobaTools
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <MobaTools.h>
MoToTimebase temperaturIntervall; // Zeitinterval zum Auslesen der Temperatur
#define TFT_CS 15 // Hallowing display control pins: chip select
#define TFT_RST 4 // Display reset
#define TFT_DC 2 // Display data/command select
#define TFT_BACKLIGHT 0 // Display backlight pin
// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable.
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
const int oneWireBus = 22;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
const int waterlevelsensor = 13;
int waterlevel;
void setup() {
Serial.begin(9600);
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
tft.setRotation(1);
sensors.begin();
pinMode(waterlevelsensor, INPUT_PULLUP);
pinMode(TFT_BACKLIGHT, OUTPUT);
digitalWrite(TFT_BACKLIGHT, HIGH);
temperaturIntervall.setBasetime( 3000 ); // 3 s Tickerzeit
}
void loop() {
waterlevel = digitalRead(waterlevelsensor);
if (waterlevel == LOW) {
Serial.println("AN");
} else {
Serial.println("AUS");
}
if ( temperaturIntervall.tick() )
{
sensors.requestTemperatures();
//float temperature = sensors.getTempCByIndex(0);
float temperature = random(150, 300) / 10.0;
Serial.print(temperature);
Serial.println("C");
tft.setCursor(60, 2);
tft.setTextColor(ST7735_WHITE, ST7735_BLACK);
tft.setTextSize(2);
tft.print(temperature);
}
}