Go Down

Topic: Steuerung brauche Hilfe! (Read 397 times) previous topic - next topic

Alex875

Dec 28, 2012, 10:27 am Last Edit: Dec 29, 2012, 05:02 am by Alex875 Reason: 1
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.

Quote

#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);
 
}
}



Go Up