/*
  Example for outlets which are configured with a 10 pole DIP switch.
  
  https://github.com/sui77/rc-switch/
*/

#include <RCSwitch.h>


RCSwitch mySwitch = RCSwitch();

//mySwitch.setProtocol(1);

int SwissphonePin = 2;             // Definiert Eingang Swissphone
int ledrot = 6;                 // Definiert Rote LED
int ledgruen = 5;               // Definiert Grne LED
int onboardled = 13;            // Definiert die Onboard LED


int a = 100;                       // legt a  fest
int b = 500;                       // legt b  fest
int c = 3000;                      // legt c  fest
int d = 250;

void setup() {

 
mySwitch.enableTransmit(9);                                        // Transmitter is connected to Arduino Pin #12

pinMode(SwissphonePin, INPUT_PULLUP);                               // Definiert Swissphone als Eingang
pinMode(5,OUTPUT);
pinMode(6,OUTPUT); 
MeldungOFF(2); 
}

void dimROT(int dimr)                                                //defieniert Dimm Funktr fr Rot
  {
    analogWrite(ledrot, dimr);
  }

void dimGRUEN(int dimg)                                               //fefiniert Dim Funktion fr Grn
  {
    analogWrite(ledgruen, dimg);
  }


void MeldungON(int cycles)                                          //Definiert Meldung fr Einschalten
{
  for ( int z = 0 ; z < cycles ; z++)
  {
    digitalWrite (ledrot, HIGH);
    mySwitch.switchOn("11111", "100001"); //Schaltet Steckdose 1 
    digitalWrite (ledrot, LOW);
    delay(a);
    digitalWrite (ledrot, HIGH);
    mySwitch.switchOn("11111", "010001"); //Schaltet Steckdose 2
    digitalWrite (ledrot, LOW);
    delay(a);
    digitalWrite (ledrot, HIGH);
    mySwitch.switchOn("11111", "001001"); //Schaltet Steckdose 3
    digitalWrite (ledrot, LOW);
    delay(a);
    digitalWrite (ledrot, HIGH);
    mySwitch.switchOn("11111", "000101"); //Schaltet Steckdose 4
    digitalWrite (ledrot, LOW);
    delay(c);
  }
}

void MeldungOFF(int cycles)                                         //Definiert Meldung Ausschalten
{
  for ( int z = 0 ; z < cycles ; z++)
  {
  digitalWrite (ledgruen, HIGH);  
  mySwitch.switchOff("11111", "100000"); //Schaltet Steckdose 1 
  digitalWrite (ledgruen, LOW);
  delay(a);
  digitalWrite (ledgruen, HIGH);
  mySwitch.switchOff("11111", "010000"); //Schaltet Steckdose 2
  digitalWrite (ledgruen, LOW);
  delay(a);
  digitalWrite (ledgruen, HIGH);
  mySwitch.switchOff("11111", "001000"); //Schaltet Steckdose 3
  digitalWrite (ledgruen, LOW);
  delay(a);
  digitalWrite (ledgruen, HIGH);
  mySwitch.switchOff("11111", "000100"); //Schaltet Steckdose 4
  digitalWrite (ledgruen, LOW);
  delay(c);
  }
}

void BlinkenMELDUNG(int cycles)
{
  for ( int z = 0 ; z < cycles ; z++)
  {
   digitalWrite (ledrot, HIGH),
   delay(b),
   digitalWrite (ledrot, LOW),
   delay(b);
   digitalWrite (ledrot, HIGH),
   delay(b),
   digitalWrite (ledrot, LOW),
   delay(b),
   digitalWrite (ledgruen, HIGH),
   delay(b),
   digitalWrite (ledgruen, LOW),
   delay(b);
  }
}

void BlinkenROT(int d, int e)
{
 digitalWrite (ledrot, HIGH),
 delay(d),
 digitalWrite (ledrot, LOW),
 delay(d);
 digitalWrite (ledrot, HIGH),
 delay(e),
 digitalWrite (ledrot, LOW),
 delay(d);
 }
; 


void loop(){                                                        

if (digitalRead(SwissphonePin) == HIGH)
{
for (int durchlauf=1; durchlauf<6; durchlauf = durchlauf+1){    //Start Loop Funktion
digitalWrite (ledrot, HIGH);
digitalWrite (ledgruen, LOW);
digitalWrite (onboardled, HIGH);
delay(b);
digitalWrite (ledrot, LOW);
digitalWrite (ledgruen, HIGH);
digitalWrite (onboardled, LOW);
delay(b);
}
;


do{                                                         //Grne LED solange kein Signal vom Melder, Do While
 dimGRUEN(10);
}while(digitalRead(SwissphonePin) == HIGH);
 
if (digitalRead(SwissphonePin) == LOW)                      // Wenn Signal am Eingang dann...
{

mySwitch.send(13729560, 24);                                 // Funkklingel

delay(250);

digitalWrite (ledgruen, LOW);

delay(750);

MeldungON(3);                                               //loop Funktion Meldung EIN 3x

delay(a);

mySwitch.send(13729560, 24);                                // Funkklingel nochmal

delay(1000);

mySwitch.send(13729560, 24);                                // Funkklingel nochmal

BlinkenMELDUNG(10);                                             // 30 Sek Pause bis Ausschalten
mySwitch.switchOff("11111", "010000");                          //Schaltet Steckdose 2
BlinkenMELDUNG(90);                                             // 4:30 Min Pause bis Ausschalten


MeldungOFF(3);                                                //loop Funktion Meldung AUS 3x
  

do{                                                           //LED Blicken bis Melder Quitiert
BlinkenROT(500, 100);
}while(digitalRead(SwissphonePin) == LOW);

}
}else {;}
}


