Hallo Community,
ich bin an folgendem Projekt:
Ein Display soll mir verschiedene Bilder anzeigen:
Start & Bodenfeuchte.
Ist eine gewisse Feuchtigkeit unterschritten, soll ein Ausgang (z.B. eine Pumpe, simuliert durch eine LED) Bildunabhängig geschalten werden.
Da ich den Sensor nur in dem Bild für den Bodensensor abgerufen habe, wurde dieser auch nur in diesem Bild ausgelesen. Nach ein wenig Recherche wurde ich auf globale Variablen aufmerksam.
Sprich: Sensor abfrage in ein extra Void gepackt, Die Variable ausserhalb allen Voids deklariert, fertig.
Leider hat das nur in der Theorie funktioniert, denn sobald ich das so handhabe, wird der Wert innerhalb des BodenfeuchteBilds nichtmerhr aktualisiert, bzw gibt keinen Wert mehr heraus.
Packe ich alles in ein Void funktioniert es allerdings.
Danke für eure Ratschläge.
#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Waveshare4InchTftShield.h>
#include <Fonts/FreeSans18pt7b.h>
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Waveshare4InchTftShield Waveshield;
boolean startbild = true;
boolean bfbild = false;
boolean sensor =true;
const int soilMoistPin = A0;
const int soilMoistLevelLow = 826; //Dieser Wert soll von euch entsprechend angepasst werden
const int soilMoistLevelHigh = 406; //Dieser Wert soll von euch entsprechend angepasst werden
int soilMoist;
int percentSoilMoist;
int PUMPE;
void setup()
{
SPI.begin();
Waveshield.begin();
Waveshield.setRotation(1);
Waveshield.setTextSize(3);
Serial.begin(115200);
pinMode(PUMPE, OUTPUT);
pinMode(soilMoistPin, INPUT);
int soilMoistPin = analogRead(soilMoistPin);
Waveshield.fillScreen(WHITE);
Waveshield.fillRect(5, 70, 470, 60, WHITE);
Waveshield.drawRect(5, 70, 470, 60,BLACK);
Waveshield.fillRect(5, 5, 470, 60, RED);
Waveshield.drawRect(5, 5, 470, 60,BLACK);
sensorschleife();
start();
}
void sensorschleife()
{
soilMoist = analogRead(soilMoistPin);
Serial.print("Analog Value: ");
Serial.print(soilMoist);
// Auswertung der Bodenfeuchtigkeit in Prozent
Serial.print("\t");
Serial.print(percentSoilMoist);
Serial.println(" %");
delay(1000);
}
void start()
{
bfbild = false;
Waveshield.fillRect(5, 255, 200, 60,WHITE);
Waveshield.setCursor(35,25);
Waveshield.setTextColor(WHITE, RED);
Waveshield.print("Start-Fenster");
Waveshield.setCursor(35,90);
Waveshield.setTextColor(BLACK, WHITE);
Waveshield.print("Bodenfeuchte anzeigen ");
}
void bodenfeuchte()
{
startbild = false;
Waveshield.setCursor(35,25); // setCursor = Text-Ausrichtung
Waveshield.setTextColor(WHITE, RED); // setTextColor = Text-Farbe
Waveshield.print("Bodenfeuchte "); // print = Text
Waveshield.drawRect(5, 255, 200, 60,BLACK); // drawRect = Rechteck-Kontur
Waveshield.setCursor(35,270); // setCursor = Text-Ausrichtung
Waveshield.setTextColor(BLACK, WHITE); // setTextColor = Text-Farbe
Waveshield.print("Zurueck"); // print = Text
Waveshield.setCursor(35,90); // setCursor = Text-Ausrichtung
Waveshield.setTextColor(BLACK, WHITE); // setTextColor = Text-Farbe
if (percentSoilMoist > 60)
{Waveshield.setTextColor(BLACK, WHITE);}
if(percentSoilMoist < 60)
{Waveshield.setTextColor(RED, WHITE);}
Waveshield.print("BodenFeuchte "); // print = Text
Waveshield.print(percentSoilMoist);
Waveshield.print(" % ");
delay (percentSoilMoist);
}
void loop() {
TSPoint p = Waveshield.getPoint(); //Ganzen Touchscreen verwenden
Waveshield.normalizeTsPoint(p); // Automatische Rotation
//Sensor dauerhaft abfragen
if(sensor){sensorschleife();}
if(p.x>5 && p.x<475 && p.y>70 && p.y<130 && startbild )
{bfbild = true;}
if(bfbild){bodenfeuchte();}
//Start aufrufen
if (p.x>5 && p.x<475 && p.y>255 && p.y<315 && bfbild)
{startbild = true;}
if (startbild){start();}
if (percentSoilMoist < 60)
{digitalWrite(PUMPE, HIGH);}
if(percentSoilMoist > 60)
{digitalWrite(PUMPE, LOW);}
}