Steuerung brauche Hilfe!

Hallo, mein Sketch ist vielleicht nicht so elegant und kurz wie bei einem Profi, aber das ist nicht mein Problem. Ich möchte das bei erreichen der Temperatur für Lüftung auf und Lüftung zu der jeweilige Pin für 3 bzw. 5 Sekunden taktet.
Für Tips von euerer Seite bedanke ich mich bereits im Voraus.
Es soll wenn CH3Pin High ist dies für 3 Sekunden sein, das gleiche bei CH4Pin, aber das Ganze soll mxaimal 3 mal wiederholt werden danach soll der Pin permanent auf High sein. Die Temperaturen werden richtig gemessen, alle Schaltfunktionen funktionieren soweit.

#include <OneWire.h>
#include <LiquidCrystal.h>
#define sollTemp potVal
#define LTEMP 23 //Temperatur für Lüftungs auf
#define zu 21 // Temperatur für Lüftung zu
#define Hysterese 2 // Hysterese Heizung
int CH1Pin = 10;//Mischer zu
int CH2Pin = 9;//Mischer auf
int CH3Pin = 8;//Lüftung auf
int CH4Pin = 7;//Lüftung zu
// OneWire DS18S20, DS18B20, DS1822 Temperature Sensoren

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire ds(6); // an pin 6

void setup(void) {
lcd.clear();
lcd.begin(16, 2);
pinMode(CH1Pin, OUTPUT);//Mischer zu
digitalWrite(CH1Pin, LOW);
pinMode(CH2Pin, OUTPUT);// Mischer auf
digitalWrite(CH2Pin, LOW);
pinMode(CH3Pin, OUTPUT);// Lüftung auf
digitalWrite(CH3Pin, LOW);
pinMode(CH4Pin, OUTPUT); // Lüftung zu
digitalWrite(CH4Pin, LOW);
}
int potPin = 0;
int potVal = 0;
void loop() {

byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float ist;
float ist1;
float SollTemp, IstTemp;

//IstTemp=GetMesswert();
//HeizungSchalten(sollTemp, potVal);

if ( !ds.search(addr)) {
ds.reset_search();
delay(250);
return;
}

float GetSollTemperatur();

int potVal = analogRead (0);{
potVal = sollTemp;
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Soll:");
lcd.print((potVal/10.0),2);
lcd.print((char(223)));
lcd.print("C");
delay(500);
}

float GetMesswert();

// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:

return;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.

present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++) { // we need 9 bytes
data = ds.read();

  • }*
  • // convert the data to actual temperature*
  • unsigned int raw = (data[1] << 8) | data[0];*
  • if (type_s) {*
  • raw = raw << 3; // 9 bit resolution default*
  • if (data[7] == 0x10) {*
  • // count remain gives full 12 bit resolution*
  • raw = (raw & 0xFFF0) + 12 - data[6];*
  • }*
  • } else {*
  • byte cfg = (data[4] & 0x60);*
  • if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms*
  • else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms*
  • else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms*
  • // default is 12 bit resolution, 750 ms conversion time*
  • }*
  • ist = (float)raw / 16.9;*
  • ist1 = (float)raw / 16.9;*
  • lcd.clear();*
  • //lcd.setCursor(0, 1);*
  • lcd.print("1:");*
  • lcd.print(ist);*
  • lcd.print((char(223)));*
  • lcd.print("C");*
  • //lcd.setCursor(0, 1);*
  • lcd.print("2:");*
  • lcd.print(ist1);*
  • lcd.print((char(223)));*
  • lcd.print("C");*
  • delay(2000);*
    //Mischer auf
    if (sollTemp/10 <=ist-Hysterese)
    {
  • digitalWrite (CH1Pin, HIGH);*
    delay(3000);
    //return;

}
else
{

  • digitalWrite (CH1Pin, LOW);*

  • //delay(3000);*

  • //return;*
    }
    //Mischer zu
    if (sollTemp/10 >=ist-Hysterese){

  • digitalWrite (CH2Pin, HIGH);*

  • delay(3000);*
    }
    else
    {

  • digitalWrite (CH2Pin, LOW);*

  • }*

  • //Lüftung zu*

  • if (ist <=zu)*

{

  • digitalWrite (CH4Pin, HIGH);*
  • delay(3000);*
    }
    else {
  • digitalWrite (CH4Pin, LOW);*
  • delay(2000);*
    }
    //Lüftung auf
    if (ist >=LTEMP)
    {
  • digitalWrite(CH3Pin, HIGH);*
  • delay(5000);*
    }
    else
    {
  • digitalWrite(CH3Pin, LOW);*

}
}
[/quote]