사용한 부품
BUTTON
wpi : 29
LED
BLUE - wpi : 23
RED - wpi : 24
GREEN - wpi : 25
BUZZER
wpi - 22
실습 내용
버튼처리는 반드시 인터럽트방식을 이용하는데, 눌렀다가 떼는 순간에 처리한다.
3색 LED처리는 반드시 PWM방식을 사용합니다
버튼을 클릭할때마다 LED가 점점 밝아진다. 단, PWM은 1~100중에서 밝아지는 단계를 5개 단계로 구분합니다.(즉, 25씩으로 증가합니다. 예, 값이 1->25->50->75->100)
버튼을 클릭할때마다 켜지는 LED의 색상은 각 단계별로 초록->청색->빨간->흰색 순이며, 그 이후에는 다시 처음으로 되돌아 갑니다.
생상이 바뀌는 시점에 부져스피커가 0.05초간 짧게 울립니다.
프로그램은 무한 실행되며, ctrl + c 가 눌러지면 부져, LED 모두 끄고 종료됩니다.
코드 구현
선언 코드 구현
const gpio = require('node-wiring-pi');
const BUTTON = 29;
const BLUE = 23;
const RED = 24;
const GREEN = 25;
const BUZZER = 22;
let btn_count = 0;
let led_count = 0;
const NextColor = function(){
gpio.digitalWrite(BUZZER,1);
gpio.delay(50);
gpio.digitalWrite(BUZZER,0);
btn_count++;
led_count = 0;
}
구현 부분 코드
const DetectButton = function(){
switch(btn_count){
case 0:
if(led_count === 0) gpio.softPwmWrite(GREEN,1);
else if(led_count === 1) gpio.softPwmWrite(GREEN,25);
else if(led_count === 2) gpio.softPwmWrite(GREEN,50);
else if(led_count === 3) gpio.softPwmWrite(GREEN,75);
else if(led_count === 4) gpio.softPwmWrite(GREEN,100);
else {
NextColor();
}
led_count++;
break;
case 1:
gpio.softPwmWrite(GREEN,0);
if(led_count === 0) gpio.softPwmWrite(BLUE,1);
else if(led_count === 1) gpio.softPwmWrite(BLUE,25);
else if(led_count === 2) gpio.softPwmWrite(BLUE,50);
else if(led_count === 3) gpio.softPwmWrite(BLUE,75);
else if(led_count === 4) gpio.softPwmWrite(BLUE,100);
else {
NextColor();
}
led_count++;
break;
case 2:
gpio.softPwmWrite(BLUE,0);
if(led_count === 0) gpio.softPwmWrite(RED,1);
else if(led_count === 1) gpio.softPwmWrite(RED,25);
else if(led_count === 2) gpio.softPwmWrite(RED,50);
else if(led_count === 3) gpio.softPwmWrite(RED,75);
else if(led_count === 4) gpio.softPwmWrite(RED,100);
else {
NextColor();
}
led_count++;
break;
case 3:
gpio.softPwmWrite(RED,0);
if(led_count === 0){
gpio.softPwmWrite(RED,1);
gpio.softPwmWrite(GREEN,1);
gpio.softPwmWrite(BLUE,1);
}
else if(led_count === 1){
gpio.softPwmWrite(RED,25);
gpio.softPwmWrite(GREEN,25);
gpio.softPwmWrite(BLUE,25);
}
else if(led_count === 2){
gpio.softPwmWrite(RED,50);
gpio.softPwmWrite(GREEN,50);
gpio.softPwmWrite(BLUE,50);
}
else if(led_count === 3){
gpio.softPwmWrite(RED,75);
gpio.softPwmWrite(GREEN,75);
gpio.softPwmWrite(BLUE,75);
}
else if(led_count === 4){
gpio.softPwmWrite(RED,100);
gpio.softPwmWrite(GREEN,100);
gpio.softPwmWrite(BLUE,100);
}
else {
NextColor();
}
led_count++;
break;
case 4:
gpio.softPwmWrite(GREEN,0);
gpio.softPwmWrite(BLUE,0);
gpio.softPwmWrite(RED,0);
btn_count = 0;
break;
default:
break;
}
}
종료 및 실행 부분 코드
process.on('SIGINT',function(){
gpio.softPwmWrite(RED,0);
gpio.softPwmWrite(GREEN,0);
gpio.softPwmWrite(BLUE,0);
gpio.digitalWrite(BUZZER,0);
console.log("프로그램을 종료합니다.");
process.exit();
});
gpio.wiringPiSetup();
gpio.pinMode(BLUE,gpio.OUTPUT);
gpio.pinMode(RED,gpio.OUTPUT);
gpio.pinMode(GREEN,gpio.OUTPUT);
gpio.pinMode(BUZZER,gpio.OUTPUT);
gpio.pinMode(BUTTON,gpio.INPUT)
console.log("이벤트 방식 : 버튼을 누르면 LED가 켜집니다...");
gpio.wiringPiISR(BUTTON,gpio.INT_EDGE_RISING,DetectButton);
gpio.softPwmCreate(BLUE, 0,100);
gpio.softPwmCreate(RED, 0,100);
gpio.softPwmCreate(GREEN, 0,100);
'Coding > Raspberry pi - node.js' 카테고리의 다른 글
SPI 방식과 ADC 칩 (0) | 2019.11.16 |
---|---|
초음파 센서 제어와 웹 연동 (0) | 2019.11.15 |
WiringPi GPIO API인 PWM이용하기 (0) | 2019.10.09 |
인터럽트 방식으로 버튼 제어하기 (0) | 2019.10.09 |
실습 - 버튼, 광센서, 터치센서, Relay를 이용한 프로그램 (0) | 2019.10.07 |
댓글