document bcm pin for reset not wiringpi (sigh)
[Arduino] / Desk_LED_dimmer / Desk_LED_dimmer.ino
index fededda..4305019 100644 (file)
@@ -3,6 +3,8 @@
     2016-01-10 Dobrica Pavlinusic <dpavlin@rot13.org>
 */
 
+#include <EEPROM.h>
+
 const int led_pin = 13;
 const int buzzer_pin = 4;
 const int mosfet_pins[] = { 9, 10, 6 }; // PWM pins: 3,5,6,9,10,11
@@ -14,6 +16,7 @@ const int pir_pin = A2;
 
 int LDR_SIZE = 1;      // 1 number of LDR reading to average
 int LDR_NOISE = 6;     // 6 calibrate LDR noise level 
+int LDR_CHANGE = 1;    // do we report LDR changes?
 
 #define PIR_TIMEOUT 10 // s
 
@@ -88,7 +91,7 @@ void setup() {
 
 #endif
 
-  Serial.print("Commands: b - beep, qwe/asd/zxc - MOSFETs\nLDR = ");
+  Serial.print("Commands: b - beep, qwe/asd/zxc - MOSFETs, hjkl - single step fade, ui/op/[/] - LDR size-+/noise-+/read/changes, P - PIR\nLDR = ");
   int ldr = analogRead(ldr_pin);
   Serial.println(ldr);
 
@@ -102,7 +105,9 @@ void setup() {
 
   // recall startup values
   for(int i=0; i<=2; i++) {
-    analogWrite(mosfet_pins[i], mosfet_pwm[i]);
+    int pwm = EEPROM.read(i);
+    mosfet_pwm[i] = pwm;
+    analogWrite(mosfet_pins[i], pwm);
   }
 
   digitalWrite(led_pin, LOW);
@@ -202,6 +207,49 @@ void loop() {
 #endif
 
 
+  int ldr = analogRead(ldr_pin);
+  ldr_sum += ldr;
+  ldr_count++;
+  if ( ldr_count > LDR_SIZE ) {
+    ldr = ldr_sum / ldr_count;
+    ldr_count = 0;
+    ldr_sum = 0;
+
+    if ( abs(ldr-last_ldr) > LDR_NOISE && LDR_CHANGE ) {  
+      Serial.print("LDR = ");
+      Serial.println(ldr);
+      last_ldr = ( last_ldr + ldr ) / 2;
+    }
+  }
+
+
+  int pir = digitalRead(pir_pin);
+  if ( pir != last_pir) {
+    last_pir = pir;
+    Serial.print("PIR = ");
+    Serial.println(pir);
+  }
+
+  long int ms = millis();
+  if ( pir == 0 ) {
+    if (pir_millis > 0 && ms - pir_millis > PIR_TIMEOUT * 1000 ) {
+      Serial.println("PIR timeout, fade-out");
+      pir_millis = -1; // mark that we are in timeout
+      for(int i=0; i<=2; i++) {
+        MOSFET_PWM(i, 0);
+      }
+    }
+  } else {
+    if (pir_millis < 0) {
+      Serial.println("PIR fade-in after timeout");
+      for(int i=0; i<=2; i++) {
+        MOSFET_PWM(i, mosfet_pwm[i]);
+      }
+    }
+    pir_millis = ms;
+  }
+
+
   if (Serial.available()) {
     digitalWrite(led_pin, HIGH);
     int in = Serial.read();
@@ -228,6 +276,21 @@ void loop() {
       case 'k': mosfet(vi_nr, (mosfet_pwm[vi_nr]+1)%255 ); break;
       case 'l': vi_nr = ( vi_nr + 1 ) % 3; Serial.println(vi_nr); break;
 
+      // LDR
+      case 'u': LDR_SIZE -= 1; Serial.println(LDR_SIZE); break;
+      case 'i': LDR_SIZE += 1; Serial.println(LDR_SIZE); break;
+      case 'o': LDR_NOISE -= 1; Serial.println(LDR_NOISE); break;
+      case 'p': LDR_NOISE += 1; Serial.println(LDR_NOISE); break;
+      case '[': Serial.println(ldr); break;
+      case ']': LDR_CHANGE = ! LDR_CHANGE; break;
+
+      case 'P': Serial.println(pir); break;
+
+      case 'S':
+        for(int i=0; i<3; i++) EEPROM.write(i, mosfet_pwm[i]);
+        Serial.println("EEPROM store brightness");
+       break;
+
       /*
               m1 = (m1 + 10) % 255;
               analogWrite(mosfet1_pin, m1);
@@ -248,46 +311,4 @@ void loop() {
     digitalWrite(led_pin, LOW);
   }
 
-  int ldr = analogRead(ldr_pin);
-  ldr_sum += ldr;
-  ldr_count++;
-  if ( ldr_count > LDR_SIZE ) {
-    ldr = ldr_sum / ldr_count;
-    ldr_count = 0;
-    ldr_sum = 0;
-
-    if ( abs(ldr-last_ldr) > LDR_NOISE ) {  
-      Serial.print("LDR = ");
-      Serial.println(ldr);
-      last_ldr = ( last_ldr + ldr ) / 2;
-    }
-  }
-
-
-  int pir = digitalRead(pir_pin);
-  if ( pir != last_pir) {
-    last_pir = pir;
-    Serial.print("PIR = ");
-    Serial.println(pir);
-  }
-
-  long int ms = millis();
-  if ( pir == 0 ) {
-    if (pir_millis > 0 && ms - pir_millis > PIR_TIMEOUT * 1000 ) {
-      Serial.println("PIR timeout, fade-out");
-      pir_millis = -1; // mark that we are in timeout
-      for(int i=0; i<=2; i++) {
-        MOSFET_PWM(i, 0);
-      }
-    }
-  } else {
-    if (pir_millis < 0) {
-      Serial.println("PIR fade-in after timeout");
-      for(int i=0; i<=2; i++) {
-        MOSFET_PWM(i, mosfet_pwm[i]);
-      }
-    }
-    pir_millis = ms;
-  }
-
 }