Also das Relais (optoelektr.) geht bei jedem Durchlauf an. Vermutlich weil es am LCD-Shield angeschlossen ist.
Schema des LCD-Shields: http://sainsmart.com/zen/documents/20-011-901/schematic.pdf
In dem Beispiel Sketch der Firma steht : LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
Damit wird vermutlich dann auch das Relais geschaltet, wenn etwas auf das LCD geschickt wird.
Aber was kann ich machen, ich hab auf dem Shield nur PIN 4,5,6,7 ???
Der Code lautet:
#include <dht.h>
#include <LiquidCrystal.h>
#include <DFR_Key.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
dht DHT;
DFR_Key keypad;
#define dhtA 5
#define dhtI 6
#define relais 7
int localKey = 0; //Tastenerkennung
String keyString = ""; //??
double dewPointFast(double celsius, double humidity) //Taupunkt berechnung
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a - temp);
return Td;
}
float dewI = 0; //Taupunkt Innen
float dewA = 0; //Taupunkt Aussen
float tempI = 0;//Temperatur Innen
float tempA = 0;//Temperatur Aussen
float humI = 0; //Luftfeuchtigkeit Innen
float humA = 0; //Luftfeuchtigkeit Aussen
int count = 0; //Counter fuer die Eingabe
int statL = 1; //Status der Luefter
int menueH = 0; //Durchs Hauptmenue gehen
int statS = 0; //brauche ich das??
void setup()
{
Serial.begin(115200); //Verbindung Computer
digitalWrite(relais, HIGH);
pinMode(relais, OUTPUT);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("0.01 by Jules");
delay(2500);
}
void loop()
{
if(statL == 1) //notwendig um Relais zu schalten!!
{
digitalWrite(relais, LOW);
}
else
{
digitalWrite(relais, HIGH);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Messung laeuft");
DHT.read22(dhtI); //Sensor Innen auslesen
delay(500);
DHT.read22(dhtI);
float humI = DHT.humidity;
float tempI = DHT.temperature;
float dewI = (dewPointFast(DHT.temperature, DHT.humidity));
DHT.read22(dhtA); //Sensor Aussen auslesen
delay(500);
DHT.read22(dhtA);
float humA = DHT.humidity;
float tempA = DHT.temperature;
float dewA = (dewPointFast(DHT.temperature, DHT.humidity));
dewA = dewA + 5; //Test!!!!!!!!!!!!!!!!!!!
if (dewA > dewI) //Ueberprueft die Luftfeuchtigkeit schaltet die Luefter und speichert den Status in statL
{
digitalWrite(relais, HIGH); //Luefter ausschalten
statL = 0;
}
else
{
digitalWrite(relais, LOW); //Lufter einschalten
statL = 1;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Erwarte Befehle");
count = 0; //integer, wenn zu hoch Speicherüberlauf!!!
while(count < 30000) //Menuefunktion
{
keypad.getKey();
menueH = keypad.getKey();
if(statL == 1) //notwendig um Relais zu schalten!!
{
digitalWrite(relais, LOW);
}
else
{
digitalWrite(relais, HIGH);
}
switch (menueH) //Einzelne Menuepunkte
{
case 1:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Taste1");
delay(2000);
lcd.clear();
break;
case 2:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Taste2");
delay(2000);
lcd.clear();
break;
case 3:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Taste3");
delay(2000);
lcd.clear();
break;
case 4:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Taste4");
delay(2000);
lcd.clear();
break;
case 5:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Taste5");
delay(2000);
lcd.clear();
break;
}
if(menueH != SAMPLE_WAIT) //Setzt den Counter auf Null wenn Eingabe erfolgt ist.
{
count = 0;
}
else
{
count++; //Ohne Einmgabe laueft der Counter
}
//Serial.println(count);
}
// Serial.println ("Innensensor:");
// Serial.print ("humI: ");
// Serial.println (humI);
// Serial.print ("tempI: ");
// Serial.println (tempI);
// Serial.print ("dewI: ");
// Serial.println (dewI);
// Serial.println ("");
//
//
// Serial.println ("Aussensensor:");
// Serial.print ("humA: ");
// Serial.println (humA);
// Serial.print ("tempA: ");
// Serial.println (tempA);
// Serial.print ("dewA: ");
// Serial.println (dewA);
// Serial.println ("____________________");
}