int start = 20; // Ab hier beginnen die Digitalen Ausgänge
int stufen = 16; // Anzahl der Stufen und somit der benutzten Ausgänge
bool stufenStatus; // Check ob die Stufen An sind oder Aus sind
int zeit_1; // Zeit zwischen den einzelnen Stufen
int zeit_2; // Zeit zwischen dem Ein- und Ausschalten
int poti_1 = 4;
int poti_2 = 5;
int helligkeit = 0; // Helligkeitssensor (Analog 0 / 1023)
int helligkeitStatus;
int potiHell = 1; // Poti zum einstellen der Helligkeitsgrenze (Analog 0 / 1023)
int potiHellStatus;
int melderUnten = 52; // Bewegungsmelder unten (Digital on / off)
int melderUntenStatus;
int melderOben = 53; // Bewegungsmelder unten (Digital on / off)
int melderObenStatus;
void setup() {
Serial.begin(9600);
delay(20);
Serial.println(F("Serielle verbindung hergestellt"));
for (int i = start; i <= (start + stufen); i ++) // Ausgang 10 bis 10 * Stufen anzahl
{
pinMode(i, OUTPUT);
Serial.print(F("Pin "));
Serial.print(i);
Serial.println(F(" als OUTPUT gesetzt"));
delay(20);
}
Serial.println(F("Alle ausgänge gesetzt"));
pinMode(poti_1, INPUT);
pinMode(poti_2, INPUT);
pinMode(helligkeit, INPUT);
pinMode(potiHell, INPUT);
pinMode(melderUnten, INPUT);
pinMode(melderOben, INPUT);
Serial.println(F("Poti_1, Poti_2, Helligkeit, PotiHell, Melder unten, Melder oben als INPUT gesetzt"));
}
void loop() {
// Serialausgabe
Serial.print(F("\tHelligkeitssensor = "));
helligkeitStatus = analogRead(helligkeit);
Serial.print(helligkeitStatus);
Serial.print(F("\tPotentiometer (Helligkeit) = "));
potiHellStatus = analogRead(potiHell);
Serial.print(potiHellStatus);
Serial.print(F("\tBewegungsmelder Unten = "));
melderUntenStatus = digitalRead(melderUnten);
Serial.print(melderUntenStatus);
Serial.print(F("\tBewegungsmelder Oben = "));
melderObenStatus = digitalRead(melderOben);
Serial.print(melderObenStatus);
Serial.print(F("\n"));
zeit_1 = 250; //* (analogRead(poti_1)/1023);
zeit_2 = 1000; //* (analogRead(poti_2)/1023);
// Logic steuerung
// Melder unten (Bewegungsmelder unten schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == HIGH && melderObenStatus == LOW)
{
fadeInUnten();
}
if(stufenStatus == true && melderObenStatus == HIGH && melderUntenStatus == LOW)
{
delay(zeit_2);
fadeOutUnten();
}
// Melder oben (Bewegungsmelder oben schaltet ein oben ist aus und der Helligkeitssensort gibt grünes Licht)
if(stufenStatus == false && helligkeitStatus <= potiHellStatus && melderUntenStatus == LOW && melderObenStatus == HIGH)
{
fadeInOben();
}
if(stufenStatus == true && melderObenStatus == LOW && melderUntenStatus == HIGH)
{
delay(zeit_2);
fadeOutOben();
}
}
void fadeInUnten()
{
for (int i=start; i<= start+stufen; i ++)
{
digitalWrite(i, HIGH); // Stufe einschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = true;
}
void fadeOutUnten()
{
for (int i=start; i<= start+stufen; i ++)
{
digitalWrite(i, LOW); // Stufe ausschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = false;
}
void fadeInOben()
{
for (int i=start+stufen; i>= start; i --)
{
digitalWrite(i, HIGH); // Stufe einschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = true;
}
void fadeOutOben()
{
for (int i=start+stufen; i>= start; i --)
{
digitalWrite(i, LOW); // Stufe ausschalten
delay(zeit_1); // 0,5 Sec. warten bis die nächste Stufe angeht
}
stufenStatus = false;
}
