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
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
#include <ps2.h>
PS2 mouse(8, 7); // PS2 synaptics clock, data
#endif
+#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);
#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);
}
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);
int last_pir = 0;
long int pir_millis = millis();
+int vi_nr = 0; // mosfet to fade with vi binadings
+
void loop() {
Serial.print("\tZ=");
Serial.print(mz, DEC);
if ( cx > 1100 && cy > 800 ) {
+#if TP_LANDSCAPE
int nr = ( cx - 1100 ) / (( 5800 - 1100 ) / 3);
int pwm = ( cy - 800 ) / (( 5000 - 800 ) / 255);
+#else
+ int pwm = ( cx - 1100 ) / (( 5800 - 1100 ) / 255);
+ int nr = ( cy - 800 ) / (( 5000 - 800 ) / 4);
+ if ( nr > 2 ) nr -= 1; // 0 [ 1 2 ] 3 -> 0 1 2
+#endif
pwm -= 1; // allow off
Serial.print("\tmosfet = ");
Serial.print(nr);
#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++;
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;
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);
+ }
+
}