average 10 values to produce another digit
[Arduino] / Desk_LED_dimmer / Desk_LED_dimmer.ino
index b7a5f88..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
 
@@ -24,7 +27,7 @@ PS2 mouse(8, 7); // PS2 synaptics clock, data
 #define TP_LANDSCAPE 0
 
 
-int mosfet_pwm[] = { 64, 64, 64 }; // initial and current state of mosfet pwm
+int mosfet_pwm[] = { 1, 1, 1 }; // initial and current state of mosfet pwm
 
 void MOSFET_PWM(int i, int pwm) {
         analogWrite(mosfet_pins[i], pwm);
@@ -88,18 +91,25 @@ 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);
 
   for(int i=0; i<=2; i++) {
-    analogWrite(mosfet_pins[i], 16);
+    analogWrite(mosfet_pins[i], 1);
     delay(100);
     int ldr = analogRead(ldr_pin);
-    Serial.print(ldr);
+    Serial.println(ldr);
     analogWrite(mosfet_pins[i], 0);
   }
 
+  // recall startup values
+  for(int i=0; i<=2; i++) {
+    int pwm = EEPROM.read(i);
+    mosfet_pwm[i] = pwm;
+    analogWrite(mosfet_pins[i], pwm);
+  }
+
   digitalWrite(led_pin, LOW);
 
 }
@@ -110,14 +120,11 @@ void mosfet(int nr, int value) {
     Serial.println("ignored");
     return;
   }
-  Serial.print("MOSFET ");
-  Serial.print(nr);
-  Serial.print(" = ");
-  Serial.println(value);
-  int sleep = 1000 / abs(pwm - value);
+  int sleep = 200 / abs(pwm - value); // changes bigger than 200 (on/off) will be instant
   int step = pwm < value ? 1 : -1;
-  for(int i=pwm; i != value; i += step) {
-    MOSFET_PWM(nr, i);
+  for(int i=pwm + step; i != value; i += step) {
+    //MOSFET_PWM(nr, i);
+    analogWrite(mosfet_pins[nr], i);
     delay(sleep);
   }
   MOSFET_PWM(nr, value);
@@ -135,6 +142,8 @@ static int ldr_count = 0;
 int last_pir = 0;
 long int pir_millis = millis();
 
+int vi_nr = 0; // mosfet to fade with vi binadings
+
 
 void loop() {
 
@@ -198,46 +207,6 @@ void loop() {
 #endif
 
 
-  if (Serial.available()) {
-    digitalWrite(led_pin, HIGH);
-    int in = Serial.read();
-    switch (in) {
-      case 'b':
-        tone(buzzer_pin, 1800, 100);
-        delay(200);
-        tone(buzzer_pin, 2200, 100);
-        delay(500);
-        break;
-      case 'q': mosfet(0, 255); break;
-      case 'a': mosfet(0, 127); break;
-      case 'z': mosfet(0, 0); break;
-      case 'w': mosfet(1, 255); break;
-      case 's': mosfet(1, 127); break;
-      case 'x': mosfet(1, 0); break;
-      case 'e': mosfet(2, 255); break;
-      case 'd': mosfet(2, 127); break;
-      case 'c': mosfet(2, 0); break;
-
-      /*
-              m1 = (m1 + 10) % 255;
-              analogWrite(mosfet1_pin, m1);
-              Serial.print("MOSFET 1 = ");
-              Serial.println(m1);
-              break;
-            case 'a':
-              m1 = (m1 - 10) % 255;
-              analogWrite(mosfet1_pin, m1);
-              Serial.print("MOSFET 1 = ");
-              Serial.println(m1);
-              break;
-      */
-      default:
-        Serial.print("unknown command ");
-        Serial.println(in);
-    }
-    digitalWrite(led_pin, LOW);
-  }
-
   int ldr = analogRead(ldr_pin);
   ldr_sum += ldr;
   ldr_count++;
@@ -246,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;
@@ -280,4 +249,66 @@ void loop() {
     pir_millis = ms;
   }
 
+
+  if (Serial.available()) {
+    digitalWrite(led_pin, HIGH);
+    int in = Serial.read();
+    switch (in) {
+      case 'b':
+        tone(buzzer_pin, 1800, 100);
+        delay(200);
+        tone(buzzer_pin, 2200, 100);
+        delay(500);
+        break;
+      case 'q': mosfet(0, 255); break;
+      case 'a': mosfet(0, 127); break;
+      case 'z': mosfet(0, 0); break;
+      case 'w': mosfet(1, 255); break;
+      case 's': mosfet(1, 127); break;
+      case 'x': mosfet(1, 0); break;
+      case 'e': mosfet(2, 255); break;
+      case 'd': mosfet(2, 127); break;
+      case 'c': mosfet(2, 0); break;
+
+      // vi mappings
+      case 'h': vi_nr = ( vi_nr - 1 + 3 ) % 3; Serial.println(vi_nr); break;
+      case 'j': mosfet(vi_nr, (mosfet_pwm[vi_nr]-1+255)%255 ); break;
+      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);
+              Serial.print("MOSFET 1 = ");
+              Serial.println(m1);
+              break;
+            case 'a':
+              m1 = (m1 - 10) % 255;
+              analogWrite(mosfet1_pin, m1);
+              Serial.print("MOSFET 1 = ");
+              Serial.println(m1);
+              break;
+      */
+      default:
+        Serial.print("unknown command ");
+        Serial.println(in);
+    }
+    digitalWrite(led_pin, LOW);
+  }
+
 }