average 10 values to produce another digit
[Arduino] / Desk_LED_dimmer / Desk_LED_dimmer.ino
index ea3147f..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, hjkl - single step fade, L - LDR, P - PIR\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);
@@ -210,7 +215,7 @@ void loop() {
     ldr_count = 0;
     ldr_sum = 0;
 
-    if ( abs(ldr-last_ldr) > LDR_NOISE ) {  
+    if ( abs(ldr-last_ldr) > LDR_NOISE && LDR_CHANGE ) {  
       Serial.print("LDR = ");
       Serial.println(ldr);
       last_ldr = ( last_ldr + ldr ) / 2;
@@ -271,9 +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;
 
-      case 'L': Serial.println(ldr); 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);