Problem mit dem Schreiben in ein Array in einer anderen Datei

Hallo zusammen,

ein blutiger Anfänger bin ich sicher nicht mehr, aber als wirklich erfahren würde ich mich auch nicht beschreiben. Das eine oder andere Projekt habe ich mit dem Arduino inzwischen umgesetzt. Allerdings passte der gesamte Code bisher immer problemlos übersichtlich in einen Sketch. Nun war es an der Zeit sich mal an etwas umfangreicheres zu wagen. Statt dem Nano soll jetzt ein ESP32 den Dienst verrichten (Das Teil soll auch mal ins Netzwerk eingebunden werden). Da bei diesem Projekt doch viele einzelne Dienst ausgeführt werden sollen, habe ich mich der Übersicht wegen entschieden den Code auf mehrere Dateien aufzuteilen. Und Schon gleich zu Beginn das erste Problem: Ich möchte ausgelesene Werte in einem Array zwischenspeichern, um sie dann an verschiedenen Programmpunkten zu nutzen. Innerhalb eines Sketchs habe ich das schon häufig umgesetzt. Dateiübergreifend schaffe ich das nicht fehlerfrei. Sicher ist die Lösung ganz banal, und ich Hoffe, dass mir hier jemand den Wink mit dem Zaunpfahl verpassen.

Alles, was für später vorbereitet ist, habe ich auskommentiert um hier unnötige Fehlermeldungen zu vermeiden.

Nun erstmal die Fehlermeldungen und dann der Code...


FQBN: esp32:esp32:nodemcu-32s
Verwende das Board 'nodemcu-32s' von der Plattform im Ordner: C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1
Verwendung des Kerns 'esp32' von Platform im Ordner: C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1

cmd /c if exist "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\partitions.csv" COPY /y "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\partitions.csv" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\partitions.csv"
cmd /c if not exist "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\partitions.csv" if exist "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s\\partitions.csv" COPY "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s\\partitions.csv" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\partitions.csv"
cmd /c if not exist "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\partitions.csv" COPY "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\tools\\partitions\\default.csv" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\partitions.csv"
cmd /c IF EXIST "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\bootloader.bin" ( COPY /y "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\bootloader.bin" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\AquaMaster.ino.bootloader.bin" ) ELSE ( IF EXIST "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s\\bootloader.bin" ( COPY "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s\\bootloader.bin" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\AquaMaster.ino.bootloader.bin" ) ELSE ( "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esptool_py\\4.9.dev3\\esptool.exe" --chip esp32 elf2image --flash_mode dio --flash_freq 80m --flash_size 4MB -o "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\AquaMaster.ino.bootloader.bin" "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32\\bin\\bootloader_dio_80m.elf" ) )
esptool.py v4.8.1
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
cmd /c if exist "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\build_opt.h" COPY /y "C:\\Users\\maikb\\Documents\\Arduino\\AquaMaster\\build_opt.h" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\build_opt.h"
cmd /c if not exist "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\build_opt.h" type nul > "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\build_opt.h"
cmd /c type nul > "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0/file_opts"
cmd /c COPY /y "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32\\sdkconfig" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\sdkconfig"
        1 Datei(en) kopiert.
Verwendete Bibliotheken erkennen ...
C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2405/bin/xtensa-esp32-elf-g++ -c @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="NODEMCU_32S" -DARDUINO_VARIANT="nodemcu-32s" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/defines -IC:\Users\maikb\Documents\Arduino\AquaMaster -iprefix C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/ @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/includes -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/dio_qspi/include -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32 -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\nodemcu-32s @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/file_opts C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0\sketch\AquaMaster.ino.cpp -o nul
Alternativen für Wire.h: [Wire@3.1.1]
ResolveLibrary(Wire.h)
  -> Kandidaten: [Wire@3.1.1]
C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2405/bin/xtensa-esp32-elf-g++ -c @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="NODEMCU_32S" -DARDUINO_VARIANT="nodemcu-32s" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/defines -IC:\Users\maikb\Documents\Arduino\AquaMaster -iprefix C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/ @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/includes -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/dio_qspi/include -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32 -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\nodemcu-32s -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/file_opts C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0\sketch\AquaMaster.ino.cpp -o nul
C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2405/bin/xtensa-esp32-elf-g++ -c @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="NODEMCU_32S" -DARDUINO_VARIANT="nodemcu-32s" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/defines -IC:\Users\maikb\Documents\Arduino\AquaMaster -iprefix C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/ @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/includes -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/dio_qspi/include -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32 -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\nodemcu-32s -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/file_opts C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0\sketch\clock.cpp -o nul
Alternativen für DS3231.h: [DS3231@1.1.2]
ResolveLibrary(DS3231.h)
  -> Kandidaten: [DS3231@1.1.2]
C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2405/bin/xtensa-esp32-elf-g++ -c @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="NODEMCU_32S" -DARDUINO_VARIANT="nodemcu-32s" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/defines -IC:\Users\maikb\Documents\Arduino\AquaMaster -iprefix C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/ @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/includes -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/dio_qspi/include -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32 -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\nodemcu-32s -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src -Ic:\Users\maikb\Documents\Arduino\libraries\DS3231 @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/file_opts C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0\sketch\clock.cpp -o nul
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src\Wire.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: c:\Users\maikb\Documents\Arduino\libraries\DS3231\DS3231.cpp
Funktionsprototypen werden generiert ...
C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2405/bin/xtensa-esp32-elf-g++ -c @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="NODEMCU_32S" -DARDUINO_VARIANT="nodemcu-32s" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/defines -IC:\Users\maikb\Documents\Arduino\AquaMaster -iprefix C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/include/ @C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/flags/includes -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.3-cfea4f7c-v1\esp32/dio_qspi/include -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32 -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\variants\nodemcu-32s -IC:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire\src -Ic:\Users\maikb\Documents\Arduino\libraries\DS3231 @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h @C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0/file_opts C:\Users\maikb\AppData\Local\arduino\sketches\777DFCE0F0F392BF40DDE883724BBCF0\sketch\AquaMaster.ino.cpp -o C:\Users\maikb\AppData\Local\Temp\4161211118\sketch_merged.cpp
C:\Users\maikb\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\maikb\AppData\Local\Temp\4161211118\sketch_merged.cpp
Sketch wird kompiliert ...
"C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-x32\\2405/bin/xtensa-esp32-elf-g++" -MMD -c "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/cpp_flags" -Wall -Wextra -Os -Werror=return-type -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"NODEMCU_32S\"" "-DARDUINO_VARIANT=\"nodemcu-32s\"" -DARDUINO_PARTITION_default "-DARDUINO_HOST_OS=\"windows\"" "-DARDUINO_FQBN=\"esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none\"" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/defines" "-IC:\\Users\\maikb\\Documents\\Arduino\\AquaMaster" -iprefix "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/include/" "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/includes" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/dio_qspi/include" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\cores\\esp32" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\libraries\\Wire\\src" "-Ic:\\Users\\maikb\\Documents\\Arduino\\libraries\\DS3231" "@C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h" "@C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0/file_opts" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\sketch\\AquaMaster.ino.cpp" -o "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\sketch\\AquaMaster.ino.cpp.o"
"C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-x32\\2405/bin/xtensa-esp32-elf-g++" -MMD -c "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/cpp_flags" -Wall -Wextra -Os -Werror=return-type -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_NODEMCU_32S -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"NODEMCU_32S\"" "-DARDUINO_VARIANT=\"nodemcu-32s\"" -DARDUINO_PARTITION_default "-DARDUINO_HOST_OS=\"windows\"" "-DARDUINO_FQBN=\"esp32:esp32:nodemcu-32s:UploadSpeed=115200,FlashFreq=80,DebugLevel=none,EraseFlash=none\"" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_USB_CDC_ON_BOOT=0 "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/defines" "-IC:\\Users\\maikb\\Documents\\Arduino\\AquaMaster" -iprefix "C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/include/" "@C:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/flags/includes" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.3-cfea4f7c-v1\\esp32/dio_qspi/include" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\cores\\esp32" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\variants\\nodemcu-32s" "-IC:\\Users\\maikb\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.1.1\\libraries\\Wire\\src" "-Ic:\\Users\\maikb\\Documents\\Arduino\\libraries\\DS3231" "@C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0/build_opt.h" "@C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0/file_opts" "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\sketch\\clock.cpp" -o "C:\\Users\\maikb\\AppData\\Local\\arduino\\sketches\\777DFCE0F0F392BF40DDE883724BBCF0\\sketch\\clock.cpp.o"
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp: In function 'void Uhrauslesen()':
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:34: error: array must be initialized with a brace-enclosed initializer
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |                       ~~~~~~~~~~~^~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:15:8: error: conflicting declaration 'int DATUMZEIT [1]'
   15 |    int DATUMZEIT[1] = Uhr.getMonth(Dummy);
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:16:8: error: conflicting declaration 'int DATUMZEIT [2]'
   16 |    int DATUMZEIT[2] = Uhr.getDate();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:17:8: error: conflicting declaration 'int DATUMZEIT [3]'
   17 |    int DATUMZEIT[3] = Uhr.getDoW();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:18:8: error: conflicting declaration 'int DATUMZEIT [4]'
   18 |    int DATUMZEIT[4] = Uhr.getHour(Dummy, Dummy);
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:19:8: error: conflicting declaration 'int DATUMZEIT [5]'
   19 |    int DATUMZEIT[5] = Uhr.getMinute();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:20:8: error: conflicting declaration 'int DATUMZEIT [6]'
   20 |    int DATUMZEIT[6] = Uhr.getSecond();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: note: previous declaration as 'int DATUMZEIT [0]'
   14 |    int DATUMZEIT[0] = Uhr.getYear();
      |        ^~~~~~~~~
C:\Users\maikb\Documents\Arduino\AquaMaster\clock.cpp:14:8: warning: unused variable 'DATUMZEIT' [-Wunused-variable]

Bibliothek Wire in Version 3.1.1 im Ordner: C:\Users\maikb\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\libraries\Wire  wird verwendet
Bibliothek DS3231 in Version 1.1.2 im Ordner: C:\Users\maikb\Documents\Arduino\libraries\DS3231  wird verwendet
exit status 1

Compilation error: array must be initialized with a brace-enclosed initializer

Aquamaster.ino

// Bibliotheken einfügen ...
#include "Wire.h"

// Innerhalb des Programms erstellte Headerdatein einfügen ...

#include "globals.h"
#include "clock.h"




void setup() {
  Serial.begin(SERIAL_SPEED);  //Serielle Schnittstelle mit der in den Globalen Variablen festgelgten Geschwinigkeit starten
  Wire.begin();                //I2C-Bus starten
}

void loop() {
Uhrauslesen();
}

Clock.cpp

//Bibliotheken einbinden
#include "DS3231.h"
#include <arduino.h>

//Dateien einbinden
#include "clock.h"
#include "globals.h"

DS3231 Uhr;     //Bezeichenet die Uhr innerhalb der Klasse DS3231
boolean Dummy;  //Ersetzt unbenötigte Werte der Bibliothek, wie z.B. das Jahrtausend und die 12h-Anzeige

//Funktion ohne Rückgabe, um die Uhrzeit in ein Array (DATUMZEIT) in globals.h zu schreiben
void Uhrauslesen() {
   int DATUMZEIT[0] = Uhr.getYear();
   int DATUMZEIT[1] = Uhr.getMonth(Dummy);
   int DATUMZEIT[2] = Uhr.getDate();
   int DATUMZEIT[3] = Uhr.getDoW();
   int DATUMZEIT[4] = Uhr.getHour(Dummy, Dummy);
   int DATUMZEIT[5] = Uhr.getMinute();
   int DATUMZEIT[6] = Uhr.getSecond();
}

Clock.h

#include "globals.h"

void Uhrauslesen();


globals.h

#pragma once
#include "clock.h"
// Makros für das Programm
#define Version 100
#define SERIAL_SPEED 9600

// Arrays für das weitere Programm:

//Uhr- und Timeroptionen
extern int DATUMZEIT[7];                                     //Array für Uhrzeit und Datum (YY, MM, DD, DoW, hh, mm, ss)
//extern int setDATUMZEIT[7];                                  //Array zum Stellen der Uhr und des Datums (YY, MM, DD, DoW, hh, mm, ss)
//extern int DAUERSA[3];                                       //Array für die Dauer des Sonnenaufgangs (hh, mm, ss)
//extern int setDAUERSA[3];                                    //Array zum Setzen der Dauer des Sonnenaufgangs (hh, mm, ss)
//extern int DAUERSU[3];                                       //Array für die Dauer des Sonnenuntergangs (hh, mm, ss)
//extern int setDAUERSU[3];                                    //Array zum Setzen der Dauer des Sonnenuntergangs (hh, mm, ss)
//extern int DisplayStatus[6];                                 //Array für den Dislaystatus und für Menustatus siehe folgende Tabelle:
                                                      //Stelle  Beschreibung         Details
                                                      /*0 = Dislaybeleuchtung   (0 = AUS; 1 = EIN)
                                                      1 = Grundbild           (0 = AUS; 1 = Seite 1; 2 = Seite 2; ...)
                                                      2 = Menu Hauptbaum      (0 = AUS; 1 = Seite 1; 2 = Seite 2; ...)
                                                      3 = Zwischenmeubaum     (0 = AUS; 1 = Seite 1; 2 = Seite 2; ...)
                                                      4 = Untermenubaum       (0 = AUS; 1 = Stelle 1; 2 = Stelle 2; ...)
                                                      5 = Eingabe             (0 = AUS; 2 = Abfrage; 3 = Eingabe; 4 = SPeichern)
                                                      */

// Arrays für die Beleuchtung
//int LichtStatus[4];                                   // Array für den aktuellen Lichtstatus:
                                                      /* Stelle Beschreibung        Details
                                                      0 = Zustand Licht       (0 = AUS; 1 = Sonnenaufg., 2 = Tageslicht,
                                                                               3 = Sonnenunterg., 4 = Nachtlicht, 5 = Test,
                                                                               5 = Service)
                                                      1 = Wetter              (0 = AUS, 1 = EIN)
                                                      2 = Wetterzustand       (0 - 10 = klar, 11 - 35 = heiter, 36 -50 = leicht bewölkt,
                                                                               51 - 75 = wolkig, 76 - 100 stark bewölkt)
                                                                               siehe flogender char
                                                      3 = Brightness          (gibt die aktuelle durchschnittliche Lichtstärkr an)
                                                      */
//char ZustandWetter[5][16] = { "klar", "heiter", "leicht bewölkt", "wolkig", "stark bewölkt" };

//long LichtWerte[12];                                  /*Array für Grenzwerte in der Beleuchtung siehe folgende Tabelle
                                                  /*  Stelle  Beschreibung      Details
                                                      0 = min Helligk. Tag    (Wert von 0-255)
                                                      1 = max Helligk. Tag    (Wert von 0-255)
                                                      2 = min Helligk. Nacht  (Wert von 0-255)
                                                      3 = max Helligk. Nacht  (Wert von 0-255)
                                                      4 = min Helligk. SA/SU  (Wert von 0-255)
                                                      5 = max Helligk. SA/SU  (Wert von 0-255)
                                                      6 = min Bewölkung       (Wert von 0-100)
                                                      7 = max Bewölkung       (Wert von 1-100)
                                                      8 = min Geschw. Wolken  (Wert von 0-100)
                                                      9 = max Geschw. Wolken  (Wert von 0-100)
                                                      10= min Anz. Werte für Mittelwert Geschw. Wolken (Wert non 0-255)
                                                      11= max Anz. Werte für Mittelwert Geschw. Wolken (Wert non 0-255)
*/

  //Variablen für den Timer
//long Wait(0);
//int timerHour(10);    //Stunde Timerstart
//int timerMinute(30);  //Minute Timerstart
//int timerTime(2);     //Timerdauer in Minuten
//int timerValue(0);    //Zustand Timer
//long WaitTimer(0);    //Referenz Timerdauer durch millis()

Da ich den Code noch nicht habe, mal ins Blaue:
Du brauchst Prototypen.

Wenn Du Funktionien in meherere Tabs auslagerst, lege im ersten Sketch Funktionprototypen an.
Beispiel:
Im TAB "fülleDateninArray" hast Du eine Funktion

void funktion()
{
value=MeinWert;
}

Dann lege im Haupttab eine zusätzliche Zeile ganz oben an:

void funktion();

Beachte das ;
Das ist nur dafür geadcht, dass der Kompiler weiss, dass da irgendwo so eine Funktion kommt - so eine Art Platzhalter...

Die (globalen) Variablen musst Du im Hauptsketch anlegen.

Nachfrage: Welche DS3231 lib benutzt Du?

ganz oberflächlich betrachtet, in globals.h includest du clock.h und in clock.h includest du globals.h. Das ist schon mal nicht so prickelnd. Hinzu kommt, dass dein globales array DATUMZEIT anscheinend nur als extern deklariert ist.

@ [my_xy_projekt]
Vorab schon vielen Dank für die schnellen Antworten.
Ich nutze die DS3231 von Andrew Wickert in der Vers. 1.1.2, mit der habe ich auch schon andere Projekte erstellt.

@anon98579084

das habe ich auf Grund diverser Tutorials, die ich mir hierzu schon zu Gemüte geführt habe, so geändert. Die Fehlermeldungen änderten sich mit :smile:
Wie sollte ich idealer Weise inkludieren, die glbals.h brauche ich in der clock.h ja definitiv.

LG Maik

Wenn du die Datei Clock.ino genannt hättest, würde die Arduino-IDE den Prototypen erstellen und du brauchst clock.h nicht.

Wofür du dieses Array brauchst, wenn du DS3231 Uhr; hast und z.B. statt DATUMZEIT[0] viel schöner Uhr.getYear() nehmen kannst, ist mir unverständlich. Was ist so toll an einem Array?
In Uhr ist so ein Array versteckt, damit du dich nicht damit rumquälen musst.

Im Laufe des Programms soll es noch reichlich Abfragen und Vergleiche geben, bei denen die Zeitvariablen eine Rolle spielen. Die meisten davon werden in noch zu erstellenden Dateien sein. Ich dachte mir, dass es hierfür sinnvoll sein könnte ein globales Array zu erstellen, auf das ich über al zugreifen kann.

LG Maik

Der Funktionsaufruf von Uhr.getYear();usw. kann an jeder Stelle des Codes erfolgen.
Nur wenn Du an mehreren Stellen ein und den selben Inhalt benutzen MUSST macht es Sinn dafür extra Variablen anzulegen.

Vielleicht solltest Du das Konzept noch einmal überdenken, ob Du wirklich mehrere Tabs brauchst oder ob Du einfach nur immer fertige Teile in einen TAB auslagerst.
Mache ich gerade hier - und einfach nur um das, was wir gerade bearbeiten, vom fertigen Rest zu trennen.

du hast doch "global" auch die Funktionen zur Verfügung. Warum willst du die nicht nutzen.
Wenn du schon eine Kopie der Daten anlegst, dann leg sie wenigstens in eine Struktur - nicht in ein Array.

Wenn du irgendwo in deinen Programm-Tabs bist und dich dann schnell fragen musst was eigentlich in int DATUMZEIT[4] für Wert genau steht, wirst du draufkommen, dass sprechende Variablen einfacher für die Programmwartung sind.

Danke, das werde ich.
Aber um mein Vorhaben zu erklären, muss ich wohl etwas weiter ausholen, es wird nämlich recht komplex und wenn ich den Programmierern bei uns in der Firma gelegentlich mal über die Schulter schauen darf und sehe welchen Aufwand die bei der Fehlersuche betreiben müssen, weil 25k Zeilen Code in einem Sketch verbaut sind, wollte ich das durch Selektion umgehen.
Das ganze hier soll eine Automation für mein Aquarium geben. Der ESP wird der Master, über den alle Soll- und Grenzwerte gesetzt werden, der alle Daten auswertet und koordiniert. Dazu wird es noch ein Display und einen Encoder zur Eingabe geben. Auch halte ich mir eine Spätere Einbindung ins Heimnetz offen. Per i2C Soll der ESP dann mit diversen AtMegas kommunizieren, einer zur Messwerterfassung (div. Temperaturen, Leitwert, pH-Wert, Co2...), einer für die Beleuchtung (Tages- und Nachtlichtsimulation, Wetter mit Bewölkung...) und einer für die sonstige Aktorik. Alles in allem doch ein herausforderndes und umfangreiches Projekt. Mein Gedanke dabei war halt, um so modularer ich das ganze von Anfang an angehe, um so leichter wird es später zusätzliche Funktionen einzubinden.

Wenn ich die Arrays in Klassen einbaue, und diese in den Bereich Public schreibe, wäre das sinnvoller?
Mein Gedanke mit dem TAB globals.h war alle Daten, die überall im Programm benötigt werden könnten zentral zu haben um später nicht suchen zu müssen.

LG Maik

Nochmal: Überlege Dein Konzept.
Alles was Du da gerade erklärst, macht der ESP ganz alleine und langweilt sich da noch.
Und auch das mit dem aufteilen in codeblöcke und Auslagerungsdateien ist überhaupt kein Problem.
Du schiesst mit Kanonen - und eigentlich brauchst Du nur ein Schippchen zum umgraben.
Wirklich.

Und als allererstes gilt: Eine gute Dokumentation, mindestens aber eine vernünftige und sinnvolle Kommentierung erspart den Klempner.

Sinnvoller wäre, wenn du statt Arrays lieber struct oder class nimmst.

DS3231 Uhr ist z.B. schon so eine class.

Wenn du eine eigene class brauchst, hast du die Wahl, ob deine class von DS3231 erbt (diese also erweitert) oder ob sie ein DS3231 als Element enthält. Kopien von Werten in anderen Elementen zu haben ist selten (jedenfalls nicht immer) sinnvoll.

Das ist eine lokale Variable die mit der Variable

Nicht übereinstimmt.

Informiere Dich über den Gültigkeitsbereich von globalen und lokalen Variablen.

Grüße Uwe

Genaugenommen sind das mehrere Arrays, die verschiedene Längen, aber den gleichen Namen haben (conflicting declaration) und auch falsch initialisiert werden.

1 Like

Vorerst mal herzlichsten Dank an alle.

Das Konzept habe ich jetzt etwas überarbeitet, wobei ich bei den verschiedenen Tabs bleibe (macht es für mich selbst übersichtlicher), nur die Arrays lasse ich sein.
Wenn der erste Teil dann läuft, lade ich das hier nochmal hoch, wenn nicht, muss ich Euch leider nochmal nerven :smile:
Jetzt habe ich erstmal einiges zu Coden...

LG Maik

Es macht Sinn nicht wild alles public zu machen. Wenn du zum Beispiel die Funktionen der Uhrzeit auslagerst, dann solltest du Zugriffsfunktion schreiben, die dann Informationen zurückgeben oder Eingaben annehmen. Beispiel getDatum() gibt das Datum zurück und setDatum() setzt das Datum. Dein Hauptprogramm sollte überhaupt nicht in die variablen eingreifen. Du machst dir das leben nur unnötig schwer.

Auch wenn es etwas mehr Arbeit und code ist, du kannst die einzelnen Bestandteile später in anderen Projekte schnell wieder verwenden. Im besten Fall dokumentierst du es noch sauber.

Davon abgesehen mache ich es so: Erst einmal experimentieren bis es funktioniert und dann bringe ich den funktionierenfen code in mein Projekt.

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