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

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

by hyun-am 2019. 10. 6.

1. 필요한 부품

 

LED 

BLUE - wpi : 29

RED - wpi : 28

GREEN - wpi : 27

 

BUZZER

wpi : 24

 

BUTTON

wpi : 25

 

GND, 5V

GND : 물리적 6번

5V : 물리적 2번

 

2. 원하는 프로그램 내용

 

버튼을 첫 번째로 누르면 파란색 LED가 켜졌다 꺼집니다. 두 번째로 누르면 빨간색이 켜진후 꺼집니다. 세 번째로 누르면 초록색 LED가 켜진후 꺼집니다.

 

무한반복 실행되며, ctrl + C 를 누르면 LED, 부져가 모두 꺼진 후 프로그램은 종료됩니다. 

 

3. 프로그램 코드

 

선언 부분 코드

 

const gpio = require('node-wiring-pi');
const BLUE = 29; 
const RED = 28;
const GREEN = 27;
const BUZZER = 24;
const BUTTON = 25;
let count = 0;

 

구현 부분 코드

 

const toggle = function(color){
    gpio.digitalWrite(color,1);
    gpio.digitalWrite(BUZZER,1);
    gpio.delay(1000);
    gpio.digitalWrite(color,0);
    gpio.digitalWrite(BUZZER,0);
}

const ButtonHandler = function(){
    switch(count){
        case 0:
            toggle(BLUE);
            count++;
            break;
        case 1:
            toggle(RED);
            count++;
            break;
        case 2:
            toggle(GREEN);
            count = 0;
            break;
    }
}

const CheckButton = function(){
    let data = gpio.digitalRead(BUTTON);
    if(!data) ButtonHandler();
    setTimeout(CheckButton,300);
}

 

후반부 종료 및 실행 코드

 

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

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

 

 

댓글