const int ldr_pin = A3; // LDR +5 -- A3 -[10K]- GND
const int pir_pin = A2;
+
#define TOUCHPAD 1 // set this to 0 if debugging without touchpad
+
+int LDR_SIZE = 1; // 1 number of LDR reading to average
+int LDR_NOISE = 6; // 6 calibrate LDR noise level
+
#define PIR_TIMEOUT 10 // s
#if TOUCHPAD
#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
+
+void MOSFET_PWM(int i, int pwm) {
+ analogWrite(mosfet_pins[i], pwm);
+ Serial.print("MOSFET=");
+ Serial.print(i);
+ Serial.print(":");
+ Serial.println(pwm);
+}
-int mosfet_pwm[] = { 255, 255, 255 }; // initial and current state of mosfet pwm
void setup() {
Serial.begin(115200);
for(int i=0; i<=2; i++) {
pinMode(mosfet_pins[i], OUTPUT);
- analogWrite(mosfet_pins[i], mosfet_pwm[i]);
+ analogWrite(mosfet_pins[i], 0);
}
pinMode(ldr_pin, INPUT);
+
pinMode(pir_pin, INPUT);
#if TOUCHPAD
#endif
- Serial.println("Commands: b - beep, qwe/asd/zxc - MOSFETs");
+ Serial.print("Commands: b - beep, qwe/asd/zxc - MOSFETs\nLDR = ");
+ int ldr = analogRead(ldr_pin);
+ Serial.println(ldr);
+
+ for(int i=0; i<=2; i++) {
+ analogWrite(mosfet_pins[i], 16);
+ delay(100);
+ int ldr = analogRead(ldr_pin);
+ Serial.print(ldr);
+ analogWrite(mosfet_pins[i], 0);
+ }
digitalWrite(led_pin, LOW);
int sleep = 1000 / abs(pwm - value);
int step = pwm < value ? 1 : -1;
for(int i=pwm; i != value; i += step) {
- analogWrite(mosfet_pins[nr], i);
- Serial.println(i);
+ MOSFET_PWM(nr, i);
delay(sleep);
}
- analogWrite(mosfet_pins[nr], value);
+ MOSFET_PWM(nr, value);
mosfet_pwm[nr] = value;
}
unsigned int last_cy = 0;
int last_ldr = 0;
-// number of LDR reading to average
-#define LDR_SIZE 100
static int ldr_sum = 0;
static int ldr_count = 0;
int last_pir = 0;
long int pir_millis = millis();
+
void loop() {
#if TOUCHPAD
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);
Serial.print("\tpwm = ");
Serial.print(pwm);
if ( nr >= 0 && nr <= 2 && pwm >= 0 && pwm <= 255 ) {
- analogWrite(mosfet_pins[nr], pwm);
- Serial.print("\tOK");
+ Serial.println("\tOK");
+ MOSFET_PWM(nr, pwm);
+ mosfet_pwm[nr] = pwm;
} else {
- Serial.print("\tIGNORED");
+ Serial.println("\tIGNORED");
}
}
- Serial.println();
}
#endif
}
int ldr = analogRead(ldr_pin);
- ldr_sum += ldr >> 2;
+ 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) > 5 ) {
+ if ( abs(ldr-last_ldr) > LDR_NOISE ) {
Serial.print("LDR = ");
Serial.println(ldr);
+ last_ldr = ( last_ldr + ldr ) / 2;
}
- last_ldr = ldr;
}
Serial.println("PIR timeout, fade-out");
pir_millis = -1; // mark that we are in timeout
for(int i=0; i<=2; i++) {
- analogWrite(mosfet_pins[i], 0);
+ MOSFET_PWM(i, 0);
}
}
} else {
if (pir_millis < 0) {
Serial.println("PIR fade-in after timeout");
for(int i=0; i<=2; i++) {
- analogWrite(mosfet_pins[i], mosfet_pwm[i]);
+ MOSFET_PWM(i, mosfet_pwm[i]);
}
}
pir_millis = ms;