1. 필요한 부품
BUTTON
wpi : 29
LIGHT
wpi : 28
TOUCH
wpi : 21
BUZZER
wpi : 26
LED
RED - wpi : 23
GREEN - wpi : 24
BLUE - wpi : 27
RELAY
wpi : 25
2. 구현 내용
Touch센서에 터치할때마다, 1색 LED가 0.2초동안 켜졌다 꺼진다.
버튼을 첫 번째 누르면 부져소리가 0.1초동안 나면서 3색 LED가 모두 켜진다.
3색 LED가 모두 켜져있을때만 광센서가 빛을 센싱을 할 수 있다.
광센서에서 변화(밝음 → 어두움)가 측정되면 Relay를 제어하여 전류를 흐르게한다.
광센서에서 변화(어두움 → 밝음)가 측정되면 Relay를 제어하여 전류를 차단시킨다.
버튼을 두 번째 누르면 부져소리가 0.1초 동안 나면서 3색 LED가 모두 꺼진다.
무한 반복 실행되며, ctrl + c를 누르면 모든 LED, 부져, 릴레이가 모두 꺼진 후 프로그램이 종료된다.
3. 코드구현
선언 부분 구현
const gpio = require('node-wiring-pi');
const BUTTON = 29;
const LIGHT = 28;
const TOUCH = 21;
const BUZZER = 26;
const RED = 23;
const GREEN = 24;
const BLUE = 27;
const RELAY = 25;
var btncount = 0;
let clock = null;
구현 부분 구현
const CheckTouch = function(){
let data = gpio.digitalRead(TOUCH);
if(data){
gpio.digitalWrite(RED,1);
gpio.delay(100);
gpio.digitalWrite(RED,0);
}
setTimeout(CheckTouch,3000);
}
const CheckLight = function(){
let data = gpio.digitalRead(LIGHT);
if(!data){
gpio.digitalWrite(RELAY,gpio.HIGH);
console.log("RELAY ON");
}
else{
gpio.digitalWrite(RELAY,gpio.LOW);
console.log("RELAY OFF");
}
clock = setTimeout(CheckLight,300);
}
const CheckButton = function(){
let data = gpio.digitalRead(BUTTON);
if(!data){
switch(btnCount){
case 0:
btnCount++;
gpio.digitalWrite(BUZZER,1);
gpio.delay(100);
gpio.digitalWRite(BUZZER,0);
gpio.digitalWrite(RED,1);
gpio.digitalWrite(BLUE,1);
gpio.digitalWrite(GREEN,1);
CheckLight();
break;
case 1:
clearTimeout(clock);
gpio.digitalWrite(BUZZER,1);
gpio.delay(100);
gpio.digitalWrite(BUZZER,0);
gpio.digitalWrite(RED,0);
gpio.digitalWrite(BLUE,0);
gpio.digitalWrite(GREEN,0);
btnCount = 0;
break;
default:
console.log(btnCount);
console.log("pressed");
}
}
setTimeout(CheckButton,300);
}
종료 및 실행부분 구현
process.on('SIGINT',function(){
gpio.digitalWrite(BUZZER,0);
gpio.digitalWrite(RED,0);
gpio.digitalWrite(BLUE,0);
gpio.digitalWrite(GREEN,0);
console.log("exit");
process.exit();
});
gpio.setup('wpi');
gpio.pinMode(BUTTON, gpio.INPUT);
gpio.pinMode(LIGHT,gpio.INPUT);
gpio.pinMode(TOUCH,gpio.INPUT);
gpio.pinMode(RELAY,gpio.OUTPUT);
gpio.pinMode(BLUE,gpio.OUTPUT);
gpio.pinMode(RED,gpio.OUTPUT);
gpio.pinMode(GREEN,gpio.OUTPUT);
setTimeout(CheckTouch,100);
setImmediate(CheckButton);
'Coding > Raspberry pi - node.js' 카테고리의 다른 글
WiringPi GPIO API인 PWM이용하기 (0) | 2019.10.09 |
---|---|
인터럽트 방식으로 버튼 제어하기 (0) | 2019.10.09 |
실습 - 터치센서, 광센서를 활용한 코드 (0) | 2019.10.07 |
Relay 스위치와 소리센서 제어하기 (0) | 2019.10.07 |
조도센서, 터치센서 다루기 (0) | 2019.10.07 |
댓글