Hallo zusammen,
ich finde keine Lösung für folgendes Problem:
bei Uhrzeit1 soll die Pumpe 1 nur ein mal ein- und ausgeschaltet werden
bei Uhrzeit2 soll die Pumpe 2 nur ein mal ein- und ausgeschaltet werden
bei Uhrzeit3 soll die Pumpe 3 nur ein mal ein- und ausgeschaltet werden
außerdem soll die aktuelle Uhrzeit, sowie die Uhrzeit der nächste Messung am Display angezeigt werden.
Das funktioniert bestens, allerdings die ganze Minute lang, d.h.: die Pumpe geht die ganze Minute an und aus.
Es sollte allerdings, beim erreichen der Uhrzeit, die jeweilige Pumpe nur ein Mal ein- und ausgeschaltet werden.
Da den Rest des Sketches von einige Sekunden bis über mehreren Minuten laufen kann, kann ich die Uhrzeit nicht auf die Sekunde einschränken.
In Wirklichkeit hätten die Zeitspannen zwischen den Uhrzeiten mehreren Stunden.
Ich wusste nicht wo ich ein Merker setzen könnte, oder wo ich es wieder wegnehmen sollte, damit die anderen Uhrzeiten auch ein Mal laufen....
Hat jemand eine Ahnung wie ich es zum laufen bringen soll?
hier mein Sketch: (ich weiß... der ist nicht sparsam programmiert....
#include <SPI.h>
#include <Wire.h>
#include <DS3231.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);
DS3231 rtc(SDA, SCL);
int Pumpe[3] = {3,5,7};
int ZAELER = 0;
int NM=0;
//char Bescheid=("mach");
int Flag=1;
int i=0;
//++++++++++++++++++++++++++++++
char* UhrzeitStart[]={"21:45", "21:46", "21:47"}; // Die Uhrzeiten wo die Pumpen starten sollen
#define NUMSTRINGS (sizeof(UhrzeitStart)/sizeof(UhrzeitStart[0]))
//++++++++++++++++++++++++++++++
void setup() {
// put your setup code here, to run once:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
rtc.begin();
display.clearDisplay();
//Setze Pins outputs
for (int i = 0; i < 3; i++)
{
pinMode (Pumpe[i], OUTPUT);
digitalWrite (Pumpe[i], LOW);
}
NaechsteMessung(NM);
}
void NaechsteMessung(int NM){
display.fillRect(50,19,30,8, BLACK); // Füllen Rechteck X,Y,Breite,Hohe,Farbe zum Löschen
display.display();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(50,19);
display.println(UhrzeitStart[NM]); // Schreibe Uhrzeit der Nächste Messung
display.display();
}
void Duhrzeit(){
display.fillRect(1,0,30,8, BLACK); // Füllen Rechteck X,Y,Breite,Hohe,Farbe zum Löschen
display.display();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(1,0);
display.println(rtc.getTimeStr(FORMAT_SHORT));// Uhrzeit schreiben
display.display();
}
void pumpen(int i,int NM){
digitalWrite(Pumpe[i], HIGH); // Spannung an Pumpe X
delay(1000); // warte eine Sekunde
digitalWrite(Pumpe[i], LOW); // Pumpe X ausschalten
}
//void vergleichen(int Flagge){
void vergleichen(){
for (int i=0;i<NUMSTRINGS;i++)
if (strcmp(UhrzeitStart[i], rtc.getTimeStr(FORMAT_SHORT))==0)
{
pumpen(i,NM);
int NM=i+1;
NaechsteMessung(NM);
if (NM==(NUMSTRINGS)) { // Anzahl de verschiedene Start-Uhrzeiten
int NM=0;
NaechsteMessung(NM); //Wenn 3. Uhrzeit vorbei ist, dann wieder von vorne
}
}
}
void loop() {
Duhrzeit();
delay(1000);
vergleichen();
}