Hilfe bei Displayanzeige, bin Beginner

Mein Demo Projekt "Gewächshaussteuerung" habe ich in zwei Unterprojekte aufgeteilt:
A) DS18B20-Temperaturfühler
6 kapazitive Bodenfeuchtigkeitssensor-Hygrometer-Module V1.2
6 Relais für die Pumpen für die Bewässerung.
Das Programm soll morgens um 8 Uhr beginnen und abends um 19 Uhr enden.
Die Zeit wird mit einem DS3231 I2C bestimmt.
Wenn die Bodenfeuchte unter 30% liegt, werden die Pumpen für die Bewässerung eingeschaltet,
bis die Bodenfeuchte mindestens 80% beträgt.
Die Feuchtigkeitswerte werden auf einem TFT-Display angezeigt.
Das Board ist ein Arduino Mega.
Ich habe wenig Erfahrungen mit Arduino IO
B) Über eine Linearführung Trapezgewindestange T8 mm, angetrieben von einem NEMA 17
Stepper Motor bewegt ein "Mitläufer" (3D Druck) eine Stange, die eine Tür öffnet und schließt in
Abhängigkeit von Innen/ Außentemperatur und Uhrzeit. Vor Programmbegin wird einmalig die Uhr gestellt und die Nullposition an einem der beiden Endschalter ermittelt und gesetzt.

Mein Problem:
Ich hatte zuerst 2 Temperaturfühler im Projekt A wegen der Übersichtlichkeit verwendet. Klappte gut. Danach habe ich die Anzahl auf 4 erhöht, auch gut, setze ich aber den Block noch einmal am Ende an, dann kommt eine Fehlermeldung. Im SKETCH habe ich den letzten Block für die TFT Anzeige auskommentiert. Bestimmt findet ihr die (einfache?) Lösung? Ich habe die Klammern ergänzt, weggelassen, alles ohne Erfolg. Besser vielleicht noch, ich würde jeweils 2 Werte in 3 Zeilen darstellen können, müsste mir dann aber ein entsprechendes Display versorgen. Bitte um Hinweis.
SKETCH:

/*  DS18B20-Temperaturfühler ## Bodenfeuchtigkeitssensor-Hygrometer-Module V1.2
RealTimeClock DS3231 I2C # 1,8-Zoll-TFT-Farb-LCD-Display ST7735R
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>

#define ONE_WIRE_BUS 2
#define RELAY1 3
#define RELAY2 4
#define RELAY3 5
#define RELAY4 6
#define RELAY5 7
#define RELAY6 8
#define MOISTURE1 A0
#define MOISTURE2 A1
#define MOISTURE3 A2
#define MOISTURE4 A3
#define MOISTURE5 A4
#define MOISTURE6 A5

RTC_DS3231 rtc;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_ST7735 tft = Adafruit_ST7735(7, 6, 5);

void setup() {
  Serial.begin(9600);
  sensors.begin();
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  pinMode(RELAY5, OUTPUT);
  pinMode(RELAY6, OUTPUT);
  digitalWrite(RELAY1, HIGH);
  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
  digitalWrite(RELAY5, HIGH);
  digitalWrite(RELAY6, HIGH);
  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST7735_BLACK);
}

void loop() {
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  float tempF = sensors.getTempFByIndex(0);

  DateTime now = rtc.now();
  int hour = now.hour();
  int minute = now.minute();

  int moisture1 = analogRead(MOISTURE1);
  int moisture2 = analogRead(MOISTURE2);
  int moisture3 = analogRead(MOISTURE3);
  int moisture4 = analogRead(MOISTURE4);
  int moisture5 = analogRead(MOISTURE5);
  int moisture6 = analogRead(MOISTURE6);  
  
  if (hour >= 8 && hour <= 19) {
    if (moisture1 < 30) {
      digitalWrite(RELAY1, LOW);
    }
    if (moisture2 < 30) {
      digitalWrite(RELAY2, LOW);
    }
    if (moisture3 < 30) {
      digitalWrite(RELAY3, LOW);
    }
    if (moisture4 < 30) {
      digitalWrite(RELAY4, LOW);
    }
    if (moisture5 < 30) {
      digitalWrite(RELAY5, LOW);
    }
    if (moisture6 < 30) {
      digitalWrite(RELAY6, LOW);
    }

    if (moisture1 > 80) {
      digitalWrite(RELAY1, HIGH);
    }
    if (moisture2 > 80) {
      digitalWrite(RELAY2, HIGH);
    }
     if (moisture3 > 80) {
      digitalWrite(RELAY3, HIGH);
    }
    if (moisture4 > 80) {
      digitalWrite(RELAY4, HIGH);
    }
     if (moisture5 > 80) {
      digitalWrite(RELAY5, HIGH);
    }
    if (moisture6 > 80) {
      digitalWrite(RELAY6, HIGH);
    }
    tft.setCursor(0,0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Temp: ");
    tft.print(tempC);
    tft.print("C ");
    tft.print(tempF);
    tft.println("F");
    tft.print("Moisture1: ");
    tft.println(moisture1);
    tft.print("Moisture2: ");
    tft.println(moisture2);

    delay(1000 * 60 * 1); // 1 Minute warten
    tft.fillScreen(ST7735_BLACK); // clear the screen
  }

  tft.setCursor(0,0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Temp: ");
    tft.print(tempC);
    tft.print("C ");
    tft.print(tempF);
    tft.println("F");
    tft.print("Moisture3: ");
    tft.println(moisture3);
    tft.print("Moisture4: ");
    tft.println(moisture4);

    delay(1000 * 60 * 1); // 1 Minute warten
    tft.fillScreen(ST7735_BLACK); // clear the screen
  }
/*  Füge ich hier den fünften und schsten Part an, dann kommt Fehlermeldung error: 'tft' does not name a type sowie error: expected declaration before '}' token
  setze ich die Klammer } kommen weitere Meldungen, nehme ich die Klammer weg zum Testen, kommt auch ein ERROR.
  ^

  tft.setCursor(0,0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Temp: ");
    tft.print(tempC);
    tft.print("C ");
    tft.print(tempF);
    tft.println("F");
    tft.print("Moisture5: ");
    tft.println(moisture5);
    tft.print("Moisture6: ");
    tft.println(moisture6);

    delay(1000 * 60 * 1); // 1 Minute warten
    tft.fillScreen(ST7735_BLACK); // clear the screen
 }
  */

Dann schreib uns doch bitte auch die Fehlermeldung, die recht nützlich ist.
Aber so wie ich es sehe, ist das außerhalb der Loop und kann dann nicht funktionieren.

O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:137:2: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:138:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:139:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:140:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:141:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:142:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:143:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:144:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:145:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:146:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:147:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:148:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:150:10: error: expected constructor, destructor, or type conversion before '(' token
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:151:5: error: 'tft' does not name a type
O:\PROJEKT GEWÄCHSHAUS\A) BEWÄSSERUNG\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1\Zeitgesteuerte_Bewaesserun_mit_6_Sensoren_v.1.ino:152:3: error: expected declaration before '}' token

exit status 1

Compilation error: 'tft' does not name a type

Bis hierher hat es nach der Kopie des bis dahin letzten Blocks funktioniert. Die identische Kopie noch einmal drangesetzt erzeugt die gepostete Fehlermeldung.

/*  DS18B20-Temperaturfühler ## Bodenfeuchtigkeitssensor-Hygrometer-Module V1.2
RealTimeClock DS3231 I2C # 1,8-Zoll-TFT-Farb-LCD-Display ST7735R
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <RTClib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>

#define ONE_WIRE_BUS 2
#define RELAY1 3
#define RELAY2 4
#define RELAY3 5
#define RELAY4 6
#define RELAY5 7
#define RELAY6 8
#define MOISTURE1 A0
#define MOISTURE2 A1
#define MOISTURE3 A2
#define MOISTURE4 A3
#define MOISTURE5 A4
#define MOISTURE6 A5

RTC_DS3231 rtc;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_ST7735 tft = Adafruit_ST7735(7, 6, 5);

void setup() {
  Serial.begin(9600);
  sensors.begin();
  pinMode(RELAY1, OUTPUT);
  pinMode(RELAY2, OUTPUT);
  pinMode(RELAY3, OUTPUT);
  pinMode(RELAY4, OUTPUT);
  pinMode(RELAY5, OUTPUT);
  pinMode(RELAY6, OUTPUT);
  digitalWrite(RELAY1, HIGH);
  digitalWrite(RELAY2, HIGH);
  digitalWrite(RELAY3, HIGH);
  digitalWrite(RELAY4, HIGH);
  digitalWrite(RELAY5, HIGH);
  digitalWrite(RELAY6, HIGH);
  tft.initR(INITR_BLACKTAB);
  tft.fillScreen(ST7735_BLACK);
}

void loop() {
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  float tempF = sensors.getTempFByIndex(0);

  DateTime now = rtc.now();
  int hour = now.hour();
  int minute = now.minute();

  int moisture1 = analogRead(MOISTURE1);
  int moisture2 = analogRead(MOISTURE2);
  int moisture3 = analogRead(MOISTURE3);
  int moisture4 = analogRead(MOISTURE4);
  int moisture5 = analogRead(MOISTURE5);
  int moisture6 = analogRead(MOISTURE6);  
  
  if (hour >= 8 && hour <= 19) {
    if (moisture1 < 30) {
      digitalWrite(RELAY1, LOW);
    }
    if (moisture2 < 30) {
      digitalWrite(RELAY2, LOW);
    }
    if (moisture3 < 30) {
      digitalWrite(RELAY3, LOW);
    }
    if (moisture4 < 30) {
      digitalWrite(RELAY4, LOW);
    }
    if (moisture5 < 30) {
      digitalWrite(RELAY5, LOW);
    }
    if (moisture6 < 30) {
      digitalWrite(RELAY6, LOW);
    }

    if (moisture1 > 80) {
      digitalWrite(RELAY1, HIGH);
    }
    if (moisture2 > 80) {
      digitalWrite(RELAY2, HIGH);
    }
     if (moisture3 > 80) {
      digitalWrite(RELAY3, HIGH);
    }
    if (moisture4 > 80) {
      digitalWrite(RELAY4, HIGH);
    }
     if (moisture5 > 80) {
      digitalWrite(RELAY5, HIGH);
    }
    if (moisture6 > 80) {
      digitalWrite(RELAY6, HIGH);
    }
    tft.setCursor(0,0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Temp: ");
    tft.print(tempC);
    tft.print("C ");
    tft.print(tempF);
    tft.println("F");
    tft.print("Moisture1: ");
    tft.println(moisture1);
    tft.print("Moisture2: ");
    tft.println(moisture2);

    delay(1000 * 60 * 1); // 1 Minute warten
    tft.fillScreen(ST7735_BLACK); // clear the screen
  }

  tft.setCursor(0,0);
    tft.setTextColor(ST7735_WHITE);
    tft.setTextSize(2);
    tft.print("Temp: ");
    tft.print(tempC);
    tft.print("C ");
    tft.print(tempF);
    tft.println("F");
    tft.print("Moisture3: ");
    tft.println(moisture3);
    tft.print("Moisture4: ");
    tft.println(moisture4);

    delay(1000 * 60 * 1); // 1 Minute warten
    tft.fillScreen(ST7735_BLACK); // clear the screen
  }

Ich stimme dem Compiler zu!

Tipp:
Quellcode formatieren und Klammern zählen!

Ja ja.....
Da bist du nicht der/die/das Erste oder Letzte.

Danke!!! Habe gezählt, 16x }, 15x {
Geh auf die Suche. Grüße, Eibenger!

Strg+T in der IDE hilft Dir durch Einrücken bei der Suche.
Außerdem: Cursor auf eine Klammer zeigt das Gegenstück.

Gruß Tommy

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