0
Offline
Newbie
Karma: 0
Posts: 8
Arduino rocks
|
 |
« on: December 28, 2012, 04:27:01 am » |
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 Heizungint CH1Pin = 10; //Mischer zuint CH2Pin = 9; //Mischer aufint CH3Pin = 8; //Lüftung aufint CH4Pin = 7; //Lüftung zu// OneWire DS18S20, DS18B20, DS1822 Temperature SensorenLiquidCrystal lcd(12, 11, 5, 4, 3, 2); OneWire ds(6); // an pin 6void 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] << | 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); } }
|