-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
75 lines (66 loc) · 1.86 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const ir = require('ir-receiver').connect(P0);
const light = require('led').connect(P1);
const lightSensor = require('light-sensor').connect(A0);
const servo = require('servo').connect(P8);
const bottomButton = 378124359;
const topButton = 378101919;
const modeButtonOff = 378126399;
const modeButtonOn = 378077439;
const stopButton = 378091719;
const maxBright = 5000;
const speedMaxCW = 544;
const speedMaxCCW = 2400;
const speedStop = (speedMaxCW + speedMaxCCW) / 2;
let currentCurtainState = 'top';
let isAutoMode = true;
const setServoValue = (value) => {
servo.write(value, 'us');
};
const servoStop = () => {
setTimeout(() => {
setServoValue(speedStop);
}, 14500);
};
ir.on('receive', (code, repeat) => {
if (code === modeButtonOn) {
light.turnOn();
isAutoMode = false;
} else if (code === modeButtonOff) {
light.turnOff();
isAutoMode = true;
}
if (!isAutoMode) {
if (repeat) {
return;
} else {
if (code === topButton) {
setServoValue(speedMaxCCW);
} else if (code === bottomButton) {
setServoValue(speedMaxCW);
} else if (code === stopButton) {
setServoValue(speedStop);
}
}
}
});
const handleLuxesCheck = (luxes) => {
if (isAutoMode) {
if (luxes > maxBright && currentCurtainState === 'bottom') {
return;
} else if (luxes > maxBright && currentCurtainState !== 'bottom') {
setServoValue(speedMaxCW);
servoStop();
currentCurtainState = 'bottom';
} else if (luxes < maxBright && currentCurtainState === 'top') {
return;
} else if (luxes < maxBright && currentCurtainState !== 'top') {
setServoValue(speedMaxCCW);
servoStop();
currentCurtainState = 'top';
}
}
};
setInterval(() => {
let luxes = lightSensor.read('lx').toFixed(0);
handleLuxesCheck(luxes);
}, 60000);