// Funksteckdose Brennenstuhl RCS 1000N // mit einem Arduino Uno und einem 433 MHZ Modul // schalten. // // Original Ideen und Sketche: // CC-BY-NC Dominik Krupke // http://creativecommons.org/licenses/by-nc-sa/3.0/deed.de // http://www.dserv01.de/howtos/funksteckdose-fernsteuern-mit-arduino/ // // Modifiziert, verschandelt und angepasst: // Frank Schiebel 06/2016 // // Der Pin auf dem der Datenpin des 433MHz // Senders angeschlossen ist. short rc_pin=7; void setup() { // Datenpin fungiert als Ausgabepin pinMode(rc_pin, OUTPUT); } void loop() { sendCode("100011000001"); //sende den Beispiel Code[Aus] delay(2000); sendCode("100011000010"); //sende den Beispiel Code[An] delay(2000); } // ----------------- // Eigene Funktionen // ----------------- // // Sendet einen Steckdosencode // Eingabe: 12-stelliger Code, 10 Stellen Steckdose, zwei Stellen an/aus // Rueckgabe: true/false // boolean sendCode(const char code[]) { // Der Code wird 7 mal gesendet for(short z = 0; z<7; z++) { // Jeder Code besteht aus den übergebenen 12 Bit, die // einzeln gesendet werden. for(short i = 0; i<12; i++) { // Jedes Bit wird von der Funktion sendByte einzeln // über den 433 MHz Sender gesendet sendByte(code[i]); } // Jeder Code schließt mit x/sync ab. // Immer anhaengen! sendByte('x'); } return true; } // Diese Funktion soll 0,1 oder x senden koennen. // Die gewuenschte Ausgabe wird als Argument an die // Funktion uebergeben: // // sendByte(0); // sendet 0 // sendByte(1); // sendet 1 // sendByte(x); // sendet x als "Trennsignal" // // Die Funktion hat einen leeren (void) Rueckgabewert // In der Funktion wird die "Unterfunktion" wait // aufgerufen, die jeweils die uebergebene Anzahl // an 350 Mikrosekunden Intervallen wartet. void sendByte(char i) { switch(i){ // Wenn i=0 ist, wird der Code fuer '0' gesendet case '0':{ digitalWrite(rc_pin,HIGH); wait(1); //da die Pausen x*350us lang sind, machen wir daraus eine Funktion digitalWrite(rc_pin,LOW); wait(3); digitalWrite(rc_pin,HIGH); wait(3); digitalWrite(rc_pin,LOW); wait(1); return; } // Wenn i=1 ist, wird der Code fuer '1' gesendet case '1':{ //Der Code fuer '1' digitalWrite(rc_pin,HIGH); wait(1); digitalWrite(rc_pin,LOW); wait(3); digitalWrite(rc_pin,HIGH); wait(1); digitalWrite(rc_pin,LOW); wait(3); return; } // Wenn i=x ist, wird der Code fuer '1' gesendet case 'x':{ //Der Code fuer x(sync) digitalWrite(rc_pin,HIGH); wait(1); digitalWrite(rc_pin,LOW); wait(31); } } } // Wartet fuer x 350Mikrosekunden-Intervalle void wait(int x) { //warte x*350 Mikrosekunden delayMicroseconds(x*350); }