correct pinout for protoboard
[Arduino] / light_sockets / light_sockets.ino
index 9d49fc9..541591f 100644 (file)
 #define TX_PIN 7
 #define LED_PIN 13
 
-char *code = "1000100110110000000000010";
-//char *code = "1011001001011111000000010";
+/*
+codes for my light sockets:
+
+1000100110110000000000010
+1011001001011111000000010
+
+sniffed with rtl-sdr
+*/
+
+int int_0 = 300; // ms
+int int_1 = 900; // ms
+int wait  = 2000; // ms
+int repeat = 5; // times
+
+char code[27]; // 26 bits + null
+
+
+void help(void) {
+   Serial.println("1 or 2 to turn light sockets");
+   Serial.println("q/a - 0 inteval +/- 100 ms");
+   Serial.println("w/s - 1 inteval +/- 100 ms");
+   Serial.println("e/d - wait      +/- 100 ms");
+   Serial.println("r/f - repeat    +/- 1");
+   Serial.println("U1000100110110000000000010 - send 26 bit user code");
+}
+
 
 void setup() {
    pinMode(LED_PIN, OUTPUT);
    pinMode(TX_PIN, OUTPUT);
+   
+   Serial.begin(9600);
+   help();
+}
+
+
+void send(char *code) {
+  Serial.print("send ");
+  Serial.println(code);
+  
+  // we have to send same signal at least two times
+  for(int r = 0; r < repeat; r++ ) {
+    
+    digitalWrite(LED_PIN, HIGH);
+
+    for(int i = 0; i < strlen(code); i++) {
+      int i1 = int_0;
+      int i2 = int_1;
+      if (code[i] == '1' ) {
+        i1 = int_1;
+        i2 = int_0;
+      }
+      digitalWrite(TX_PIN, HIGH);
+      delayMicroseconds(i1);
+      digitalWrite(TX_PIN, LOW);
+      delayMicroseconds(i2);
+    }
+
+    delayMicroseconds(wait); // guess
+  }
+
+  digitalWrite(LED_PIN, LOW);
 }
 
 void loop() {
-  digitalWrite(LED_PIN, HIGH);
-
-  for(int i = 0; i < strlen(code); i++) {
-    int i1 = 300;
-    int i2 = 900;
-    if (code[i] == '1' ) {
-      i1 = 900;
-      i2 = 300;
+  if(Serial.available()) {
+    int in = Serial.read();
+    if (in == '1') {
+      send("1000100110110000000000010");
+    } else if (in == '2') {
+      send("1011001001011111000000010");
+
+    } else if (in == 'q') {
+      int_0 += 100;
+      Serial.print("inteval 0 = ");
+      Serial.println(int_0);
+    } else if (in == 'a') {
+      int_0 -= 100;
+      Serial.print("inteval 0 = ");
+      Serial.println(int_0);
+
+    } else if (in == 'w') {
+      int_1 += 100;
+      Serial.print("inteval 1 = ");
+      Serial.println(int_1);
+    } else if (in == 's') {
+      int_1 -= 100;
+      Serial.print("inteval 1 = ");
+      Serial.println(int_1);
+
+    } else if (in == 'e') {
+      wait += 100;
+      Serial.print("wait = ");
+      Serial.println(wait);
+    } else if (in == 'd') {
+      wait -= 100;
+      Serial.print("wait = ");
+      Serial.println(wait);
+
+    } else if (in == 'r') {
+      repeat += 1;
+      Serial.print("repeat = ");
+      Serial.println(repeat);
+    } else if (in == 'f') {
+      repeat -= 1;
+      Serial.print("repeat = ");
+      Serial.println(repeat);
+
+    } else if (in == 'U') {
+      Serial.readBytesUntil('\n', code, sizeof(code));
+      Serial.print('U');
+      Serial.println( code );
+      send( code );
+      
+    } else if (in == '?') {
+      help();
+
+    } else {
+      Serial.print("ignored ");
+      Serial.println(in);
     }
-    digitalWrite(TX_PIN, HIGH);
-    delayMicroseconds(i1);
-    digitalWrite(TX_PIN, LOW);
-    delayMicroseconds(i2);
   }
-  
-  digitalWrite(LED_PIN, LOW);  
-  delay(3000);
 }