beginning of desk LED strip dimmer
[Arduino] / Desk_LED_dimmer / Desk_LED_dimmer.ino
1 /*
2     Over complicated desk LED dimmer
3     2016-01-10 Dobrica Pavlinusic <dpavlin@rot13.org>
4 */
5
6 const int led_pin = 13;
7 const int buzzer_pin = 4;
8 const int mosfet_pins[] = { 9, 10, 6 };
9 int mosfet_pwm[] = { 0, 0, 0 };
10
11 void setup() {
12   Serial.begin(115200);
13
14   pinMode(led_pin, OUTPUT);
15   pinMode(buzzer_pin, OUTPUT);
16
17   for(int i=0; i<sizeof(mosfet_pins); i++) pinMode(mosfet_pins[i], OUTPUT);
18
19   Serial.println("Commands: b - beep, qwe/asd/zxc - MOSFETs");
20
21 }
22
23 void mosfet(int nr, int value) {
24   int pwm = mosfet_pwm[nr];
25   if ( pwm == value ) {
26     Serial.println("ignored");
27     return;
28   }
29   Serial.print("MOSFET ");
30   Serial.print(nr);
31   Serial.print(" = ");
32   Serial.println(value);
33   int sleep = 1000 / abs(pwm - value);
34   int step = pwm < value ? 1 : -1;
35   for(int i=pwm; i != value; i += step) {
36     analogWrite(mosfet_pins[nr], i);
37     Serial.println(i);
38     delay(sleep);
39   }
40   analogWrite(mosfet_pins[nr], value);
41   mosfet_pwm[nr] = value;
42 }
43
44 void loop() {
45   if (Serial.available()) {
46     digitalWrite(led_pin, HIGH);
47     int in = Serial.read();
48     switch (in) {
49       case 'b':
50         tone(buzzer_pin, 1800, 100);
51         delay(200);
52         tone(buzzer_pin, 2200, 100);
53         delay(500);
54         break;
55       case 'q': mosfet(0, 255); break;
56       case 'a': mosfet(0, 127); break;
57       case 'z': mosfet(0, 0); break;
58       case 'w': mosfet(1, 255); break;
59       case 's': mosfet(1, 127); break;
60       case 'x': mosfet(1, 0); break;
61       case 'e': mosfet(2, 255); break;
62       case 'd': mosfet(2, 127); break;
63       case 'c': mosfet(2, 0); break;
64
65       /*
66               m1 = (m1 + 10) % 255;
67               analogWrite(mosfet1_pin, m1);
68               Serial.print("MOSFET 1 = ");
69               Serial.println(m1);
70               break;
71             case 'a':
72               m1 = (m1 - 10) % 255;
73               analogWrite(mosfet1_pin, m1);
74               Serial.print("MOSFET 1 = ");
75               Serial.println(m1);
76               break;
77       */
78       default:
79         Serial.print("unknown command ");
80         Serial.println(in);
81     }
82     digitalWrite(led_pin, LOW);
83   }
84 }