본문 바로가기
Coding/Raspberry pi - node.js

실습 - Button, Buzzer, LED를 이용한 프로그램 제작하기 - 2

by hyun-am 2019. 10. 7.

1. 필요한 부품

 

LED 

BLUE - wpi : 29

RED - wpi : 28

 

BUZZER

wpi : 24

 

BUTTON

wpi : 25

 

GND, 5V

GND : 물리적 6번

5V : 물리적 2번

 

 

2. 원하는 프로그램 내용

 

버튼을 3초 미만으로 계속 누르고 있으면, 파랑색 LED가 0.5초동안만 켜진후 꺼집니다.

 

버튼을 3초 이상 계속해서 누르고 있으면, Active 부져에서 300ms 동안 소리가 난 뒤에 빨간색 LED가 켜지도록 합니다.

 

 

3. 프로그램 코드

 

선언 부분 코드

 

const gpio = requre('node-wiring-pi');
const BLUE = 29;
const RED = 28;
const BUZZER = 24;
const BUTTON = 25;

let clock = null;
let started = false;

 

구현 부분 코드

 

const ControlBell = function(){
    let data = gpio.digitalRead(BUTTON);
    if(data){
        if(started === false){
            started = true;
            clock = setTimeout(handleButton,3000);
        }
    }
    else{
        gpio.digitalWrite(Blue,1);
        console.log("BLUE ON");
        gpio.delay(500);
        gpio.digitalWrite(Blue,0);
        console.log("BLUE OFF");
    }
    started = false;
    clearTimeout(clock);
}

const HandleButton = function(){
    let data = gpio.digitalRead(BUTTON);
    if(data){
        gpio.digitalWrite(BUZZER,1);
        console.log("BUZZER ON");
        gpio.delay(300);
        gpio.digitalWrite(BUZZER,0);
        gpio.digitalWrite(RED,1);
    }
}

        
    

 

후반부 종료 및 실행 코드

 

process.on('SIGINT', function(){
    console.log("exit");
    gpio.digitalWrite(BLUE,0);
    gpio.digitalWrite(RED,0);
    gpio.digitalWrite(BUZZER,0)
    process.exit();
}

gpio.setup('wpi');
gpio.pinMode(RED,gpio.OUTPUT);
gpio.pinMode(BLUE,gpio.OUTPUT);
gpio.pinMode(BUZZER,gpio.OUTPUT);
gpio.pinMode(BUTTON,gpio.INPUT);
setImmediate(ControlBell);

댓글