int sensorPin = A0; // Analogeingang für den Lichtsensor
int schaltuhr = 3; // Eingang von Schaltuhr
int NachtLed = 2; // leuchtet bei Nacht, Ausgang ist dann auf High
int outputPin1 = A4; //Bür0
int outputPin2 = A5; // Schlafz. li. Fe.+Tü.
int outputPin3 = 13; // Schlafz.Tü.re
int outputPin4 = 12; // Wohnzimmer kompl.
int outputPin5 = 11; // Küche
int outputPin6 = 10; // WC
int tagPin1 = 9; //Schlafz. li. Fe.+Tü.
int tagPin2 = 8; //Schlafz.re Tü.
int tagPin3 = 7; //Büro
int tagPin4 = 6; //Küche + WC
int tagPin5 = 5; //Wohnzimmer kompl.
int tagPin6 = 4; //Schlafz. Fe. re.
int schaltpin1 = A1; // Eingang Schalterstellung
int schaltpin2 = A2;
int schaltpin3 = A3;
const int myArray[] ={680,850,940};// hier wird die Dunkelphase bestimmt
int nachtschwelle = 850; //Umschaltung von Tag auf Nacht, //zur Sicherheit, wenn Schalter Unterbrechung durch einen Defekt hat
int sensorValue;
const unsigned long aktivierungsdauer = 2000; // Dauer der Aktivierung real in Millisekunden (1 Minute)
bool SeperateFenster = false; //Separates Fenster
int AktivSchaltuhr = 0;
bool dunkel = false; // Flag, um den Dunkelheitszustand zu verfolgen
bool hell = true; // am Tage
bool fenrech = false;
bool kontakt = false;
bool Tag = false;
bool Nacht = false;
bool verzNacht = true;
bool verzTag = true;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(outputPin1, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(outputPin2, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(outputPin3, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(outputPin4, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(outputPin5, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(outputPin6, OUTPUT); // Lege den Ausgang als Ausgang fest
pinMode(schaltpin1, INPUT_PULLUP); // Schalterstellung auf Low abfragen und LED weiß anschalten
pinMode(schaltpin2, INPUT_PULLUP); // Schalterstellung auf Low abfragen und LED gelb anschalten
pinMode(schaltpin3, INPUT_PULLUP); // Schalterstellung auf Low abfragen und LED grün anschalten
pinMode(NachtLed, OUTPUT);
pinMode(schaltuhr, INPUT_PULLUP);
pinMode(tagPin1, OUTPUT); //Schlafz. li. Fe.+Tü.
pinMode(tagPin2, OUTPUT); //Schlafz.re Tü.
pinMode(tagPin3, OUTPUT);
pinMode(tagPin4, OUTPUT);
pinMode(tagPin5, OUTPUT);
pinMode(tagPin6, OUTPUT);
}
void loop() //*********** Beginn der Hauptschleife ***************************!!!!!!!!!!!!!!!
{
sensorValue = analogRead(sensorPin); // Lese den Wert vom Lichtsensor
//************************************************ von hier bis
Schwellwertabfrage(); // Unterprogramm zur Abfrage Übergang Tag -> Nacht ****************************
// Überprüfe, ob es hell ist
if (sensorValue < nachtschwelle && verzTag == true)
{ // es ist noch tag
dunkel = false;
// verzTag = false;
}
//Schwellenschaltung von Nacht ---> Tag
if (dunkel == false && hell == false)
{
hell = true;
//Signalisiert Tag / Nacht -> Hier Tag = aus
digitalWrite(NachtLed, LOW); // weil wieder Tag
Tag = true; // es ist Tag
}
if (sensorValue > nachtschwelle && verzNacht == true) // es ist bereits nacht
{
verzNacht = false; // HIZUGEFÜGT !
dunkel = true; // die Variable hell wird noch nicht verändert, wird später auf false gesetzt
}
//Schwellenschaltung von Tag ---> Nacht
if (dunkel == true && hell == true)
{
//Signalisiert Tag / Nacht -> Hier Nacht = ein
digitalWrite(NachtLed, HIGH); // bei Nacht ist die rote LED an
nachtsteuerung(); //************************************************************************UP Nacht
hell = false; // erst jetzt ist es nicht mehr hell
verzTag == true;
Tag = true;
delay(30000);
SeperateFenster = false; // Steuerung seperates Fenster freigeben
}
if(digitalRead(schaltuhr) == LOW && Tag == true)
{
tagesansteuerung(); // UP zur Tagesansteuerung
Tag = false;
SeperateFenster = false;
}
if(digitalRead(schaltuhr) == HIGH)
{
if (SeperateFenster == false)
{
// Separate fenstersteuerung
fereschlaf();
//Fenstersteuerung sperren
SeperateFenster = true;
verzNacht = true; // HIZUGEFÜGT !
}
}
} //********************** Ende der Loop-Schleife !!!!!!!!!!!!!!!! ********************
// ************* Funktionen (Unterprogramme) *********************************************!!!!!!!!!!!!!
void Schwellwertabfrage(){ // Unterprogram Abfrage der Schalterstellung, der 3 Dunkelphasen
//Potistufe 1 -> Standard
if (digitalRead(A1) == LOW){
nachtschwelle = myArray[0];
}
//Potistufe 2 -> Heller
if (digitalRead(A2) == LOW){
nachtschwelle = myArray[1];
}
//Potistufe 3 -> Heller als 2
if (digitalRead(A3) == LOW){
nachtschwelle = myArray[2];
}
}
void nachtsteuerung()
{
digitalWrite(outputPin1, HIGH); // Büro
delay(aktivierungsdauer);
digitalWrite(outputPin1, LOW);
delay(500);
digitalWrite(outputPin2, HIGH); // Schlafz. li. Fe.+Tü.
delay(aktivierungsdauer);
digitalWrite(outputPin2, LOW);
delay(500);
digitalWrite(outputPin3, HIGH); // Schlafz.Tü.re
delay(aktivierungsdauer);
digitalWrite(outputPin3, LOW);
delay(500);
digitalWrite(outputPin4, HIGH); //Wohnzimmer kompl.
delay(aktivierungsdauer);
digitalWrite(outputPin4, LOW);
delay(500);
digitalWrite(outputPin5, HIGH); // Küche
delay(aktivierungsdauer);
digitalWrite(outputPin5, LOW); //
delay(500);
digitalWrite(outputPin6, HIGH); // WC
delay(aktivierungsdauer);
digitalWrite(outputPin6, LOW); //
delay(500);
}
void tagesansteuerung()
{
digitalWrite(tagPin1, HIGH); //Schlafz. li. Fe.+Tü.
delay(aktivierungsdauer);
digitalWrite(tagPin1, LOW);
delay(500);
digitalWrite(tagPin2, HIGH); //Schlafz.re Tü.
delay(aktivierungsdauer);
digitalWrite(tagPin2, LOW);
delay(500);
digitalWrite(tagPin3, HIGH); 7; //Büro
delay(aktivierungsdauer);
digitalWrite(tagPin3, LOW);
delay(500);
digitalWrite(tagPin4, HIGH); //Küche + WC
delay(aktivierungsdauer);
digitalWrite(tagPin4, LOW);
delay(500);
digitalWrite(tagPin5, HIGH); //Wohnzimmer
delay(aktivierungsdauer);
digitalWrite(tagPin5, LOW);
delay(500);
}
void fereschlaf()
{
if (digitalRead(NachtLed) == LOW && digitalRead(schaltuhr) == HIGH){
digitalWrite(tagPin6, HIGH); //Schlafz. Fe. re.
delay(aktivierungsdauer);
digitalWrite(tagPin6, LOW);
delay(500);
}
}