Globale Variablen aus Void heraus ändern & abrufen

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);}
  
   
}

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

Void heißt "unbestimmt" oder hier "nicht vorhanden".
Du meist vermutlich "Funktion"

Ich rate dir zu einem guten C++ Buch.

Dieses tut sicherlich nicht das, was du möchtest:
int soilMoistPin = analogRead(soilMoistPin);
Denn: warning: 'soilMoistPin' is used uninitialized [-Wuninitialized]

Sag mal, warum machst Du das neu auf - und wieder wird der Thread durch die Mods verschoben.

Mach doch einfach da weiter, wo Du Dein erstes Problem laufen hast.

Dachte damit gestaltet sich die Suche für künftige Leute mit dem selben Problem einfacher, habe nähmlich in der Suche und google nichts brauchbares gefunden.

Mein Fehler, wird in der Zukunft anders gehandhabt.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.