Mehrere Aktoren gleichzeitig ansteuern (+PWM)

 /*Kompletter Sketch für den Betrieb der Super_Aero_WaterKultur --> Kurz SAW */
//Temp.-/Feuchtigkeitssensor
#include "DHT.h"                
//Libary LED´s
#include <Adafruit_NeoPixel.h>


#define DHTPIN 2                      // Hier die Pin Nummer eintragen wo der Sensor angeschlossen ist
#define DHTTYPE DHT22                // Hier wird definiert was für ein Sensor ausgelesen wird. In 

//Wohlfühl_PINs
#define     ventilator_PIN  11      // Ventilator PWM pin                  
#define     peltier_PIN     5     // Peltier    PWM pin                

//Fütterungs_PINs
#define NUMPIXELS 64            // Eine Matrix;LED Anzahl
#define PIN        6           // LED
#define PINs       9          // LED2 
#define PIN_pumpe  3x        //Wasserpumpe       


//Einstellungen der Bibliothek-> LED Anzahl, Spektrum und Datenrate
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixel(NUMPIXELS, PINs, NEO_GRB + NEO_KHZ800);
// Magenta-Farbe für Pflanzenbeleuchtung
uint32_t  magenta  =  pixels.Color(12, 0, 12);
uint32_t  magentas  =  pixel.Color(12, 0, 12); 

//Verzögerung und Intervalle
#define oh 500
unsigned long intervals[] = {576000,864000,72000}; //jede Periode in ms ([0]=ms Beleuchtungsrythmus(16h), [1]=ms Tagrythmus(24h), [2]=ms pumprythmus(2h)) 
static unsigned long last[] = {0,0};                  //für die Timerroutinen

//Sensorberechnung - Licht
int Sensordaten; 
int Sensordaten1;
int mittel = 0;                                     //Variable für Sensordaten/Mittelwert
/********************************( Temperaturprofile )********************************/                          
DHT dht(DHTPIN, DHTTYPE); 

void temp_regeln(){
  delay(2000);                     // Hier definieren wir die Verweilzeit die gewartet wird  
                                   // bis der Sensor wieder ausgelesen wird. Da der DHT11  
                                   // auch ca. 2 Sekunden hat um seine Werte zuaktualisieren
                                   // macht es keinen sinn ihn schneller auszulesen!
  Serial.println("temp_regeln:");                          
  float h = dht.readHumidity();    // Lesen der Luftfeuchtigkeit und speichern in die Variable h
  float t = dht.readTemperature(); // Lesen der Temperatur in °C und speichern in die Variable t
  
  if (isnan(h) || isnan(t)) {       
    Serial.println("Fehler beim auslesen des Sensors!");
    return;
  }

  // Nun senden wir die gemessenen Werte an den PC dise werden wir im Seriellem Monitor sehen
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(h);                  // Ausgeben der Luftfeuchtigkeit
  Serial.print("%\t");              // Tabulator
  Serial.print("Temperatur: ");
  Serial.print(t);                  // Ausgeben der Temperatur -- Genauigkeit erfolgt 0.1°C Schritte
  Serial.write("°");                // Schreiben des ° Zeichen
  Serial.println("C");

  delay(2000);
  //Belüftung anschalten
  if (t >= 23){
  Serial.println("Ventilator");
  analogWrite(ventilator_PIN, 250);
  delay(oh);
  }
  //Heizung anschalten
  else if (t <= 17) {
  Serial.println("Heizung");
  analogWrite(peltier_PIN, 200);
  delay(oh);
  }
  //In Ruhezustand schalten
  else
  {
  delay(oh);
  Serial.println("ruhe");
  analogWrite(peltier_PIN, 0);
  analogWrite(ventilator_PIN, 0);
  delay(oh);
  }
}
/********************************( Wasserzuschuss )********************************/

void waterflow()                         
{
//      LED als Signalgeber(pumpe nicht angeschlossen)
//      digitalWrite(led, HIGH);            
      
//      delay(1000);
      
//      digitalWrite(led,LOW);

        if ((peltier_PIN || ventilator_PIN) >= 200)
        {   
          analogWrite(ventilator_PIN, 0);
          analogWrite(ventilator_PIN, 0);
          delay(oh);
        }
        
        Serial.println("Wasserflow");
         delay(oh);
        //"Pumpkraft" (max.2^8-1)
        analogWrite(PIN_pumpe, 250);         
        //einschaltdauer=20sekunden
        delay(20000); 
        //Pumpe aus
        analogWrite(PIN_pumpe, 0);
        //Delay, da sonst Pumpe an bleibt
        delay(oh);
        last[1]=millis();                 
        //Beginn der neuen Zeit für die Pumpe
}
/****************************( Lichtprofile )***************************************/
  void tageslauf()
  {
  Serial.print("Tageslauf:");
  Serial.print("Fotosensor-A0 = ");                   //Sensordaten zur Justierung

  Serial.println(Sensordaten);

  Serial.print("Fotosensor-A1 = ");                   //Sensordaten zur Justierung

  Serial.println(Sensordaten1);
  
  Serial.print("Fotosensor-mittelwert = ");                   //Sensordaten zur Justierung

  Serial.println(mittel); 

   //Spannung von fotosensor an a0 auslesen und unter „Sensordaten“ speichern.
   Sensordaten = analogRead(A0);
  
   //Spannung von fotosensor an a1 auslesen und unter „Sensordaten1“ speichern.
   Sensordaten1 = analogRead(A1);
  
   //Mittelwert berechnen.. für Anweisungsauswahl mittel = 2^10= 1024 (max.)
   mittel = (Sensordaten1 + Sensordaten)/2;   
  
     if (mittel <= 200)
{
  pixels.clear();                           //Leds ausschalten
  pixel.clear();
  Serial.println("schwache Helligkeit");
  pixels.setBrightness(10);                //LED Helligkeit festlegen
  pixel.setBrightness(10);
  
  pixels.fill(magenta , 0, NUMPIXELS);    //farbe setzen alle pixel 
  pixel.fill(magentas, 0, NUMPIXELS);

  pixels.show();                           // update der Pixel(LEDs)
  pixel.show();
}
    else if (mittel >= 500)
{
  pixels.clear();                           //Leds ausschalten
  pixel.clear();
  Serial.println("maximum Helligkeit");
  pixels.setBrightness(250);               //LED Helligkeit festlegen (max =255)
  pixel.setBrightness(250);
  
  pixels.fill(magenta , 0, NUMPIXELS);    //Farbe setzen alle pixel  
  pixel.fill(magentas, 0, NUMPIXELS);
  
  pixels.show();                         // update der Pixel(LEDs)
  pixel.show();
}
   else
{
  pixels.clear();                         //Leds ausschalten
  pixel.clear();
  Serial.println("mittlere Helligkeit");
  pixels.setBrightness(100);              //LED Helligkeit festlegen
  pixels.setBrightness(100);
  
  pixels.fill(magenta , 0, NUMPIXELS);    //Farbe setzen alle pixel  
  pixel.fill(magentas, 0, NUMPIXELS);
  
  pixels.show();                          // update der Pixels (LEDs)
  pixel.show();
} 

}



void nachtlauf(){
  Serial.println("Good Night my little ♦");
  pixels.clear();
  pixel.clear();
//  pixels.setBrightness(0);
  pixels.show();
  pixel.show();
}


void futter_regeln()
{
  /* die Pflanzen erhalten eine 16h Wachphase, in denen die Beleuchtung aktiv ist und eine 8h Schlafphase, in denen sie keinerlei Licht zugeführt bekommen sollen.
     Währenddessen erhalten Sie in einem regelmäßigen Takt Ihre Nährstoffe durch die Pumpfunktion. Die Intensität der LEDs wird durch die Sensoren angepasst an 
     jeweilige Helligkeitsextremas angepasst - Sinn dabei ist eine Stromeinsparung */
   
while ( millis() - last[0] <= intervals[0]  )      
// 16h-routine(tag)
{
  if (millis() - last[1] >= intervals [2])          
// 2h pumproutine -> Wasser hat hier höhere Priorität, da kleinerer Zeitintervall 
{
waterflow();
break;
}
 else {
 tageslauf();                                      
//Aufruf subroutine - Tageslauf (messung der Helligkeit + Anpassung)
 delay(oh);
 break;
}//ende der 16h-While-Schleife
}

//8h-Routine(Nacht)
while (millis() - last[0] >= intervals[0])          
{                

//2h pumproutine
if (millis() - last[1] >= intervals [2])            
{
waterflow();
}
//Nachtphase
else { 
nachtlauf();
break;
}//ende der Nachtphase


}
}

void setup() 
{
  dht.begin();        //Initialisiere Temperatur und Feuchtigkeitssensor

  Serial.begin(9600); //zum watchen im Monitor
  
  pixels.begin(); // Initialisiere erste Matrix 
  pixel.begin();  // Initialisiere zweite Matrix
}

void loop() 
{

temp_regeln();
delay (oh);
futter_regeln();
delay (oh);
if ( millis() - last[0] >= intervals[1])
{
//tag erneuern
last[0] = millis();
                                
delay(oh);
}
}