Pages: [1]   Go Down
Author Topic: Steuerung brauche Hilfe!  (Read 342 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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] << smiley-cool | 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);
  
}
}


« Last Edit: December 28, 2012, 11:02:40 pm by Alex875 » Logged

Pages: [1]   Go Up
Jump to: