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

실습 - 터치센서, 광센서를 활용한 코드

by hyun-am 2019. 10. 7.

1. 필요한 부품

 

LED

 

BLUE - wpi : 29

GREEN - wpi : 28

RED - wpi : 27

 

BUZZER 

 

wpi : 25

 

LIGHT

 

wpi : 7

 

TOUCH 

 

wpi : 23

 

2. 원하는 프로그램 내용

 

터치센서를 첫 번째로 터치하면 부져소리를 0.05초 동안 발생시킨 후, 3색 LED의 청록색을 켠다.

 

터치센서를 두 번째로 터치하면 부져소리를 0.08초 동안 발생시킨 후, 3색 LED의 청록색을 끈다.

 

청녹색LED가 켜진상태에서만 조도센서가 빛을 측정한다.

 

밝다가 어두워지면 빨강색 LED를 켜고, 다시 밝아지면 빨강색 LED를 끈다.

 

터치센서를 세 번째로 터치하면 부져소리를 0.1초 동안 2번(삐,삐) 발생시킨후, 3색LED가 모두 꺼진다

 

무한반복 실행되며, Ctrl + c를 누르면 모든 LED, 부져가 꺼진후 프로그램이 종료된다.

 

3. 코드구현 

 

선언 부분 코드

 

const gpio = require('node-wiring-pi');
const BLUE = 29;
const GREEN = 28;
const RED = 27;
const BUZZER = 25;
const LIGHT = 7;
const TOUCH = 23;

var count = 0;
let clock = null;

 

구현 부분 코드

 

const CheckLight = function(){
    let data = gpio.digitalRead(LIGHT);
    if(!data){
        console.log("밝아짐");
        gpio.digitalWrite(GREEN,1);
        gpio.digitalWrite(BLUE,1);
        gpio.digitalWrite(RED,0);
    }
    else{
        console.log("어두워짐");
        gpio.digitalWrite(GREEN,0);
        gpio.digitalWRite(BLUE,0);
        gpio.digitalWrite(RED,1);
    }
    clock = setTimeout(checkLight,300);
}

const CheckTouch = function(){
    let data = gpio.digitalRead(TOUCH);
    setTimeout(CheckTouch,300);
    if(data){
        switch(count){
            case 0:
                gpio.digitalWrite(BUZZER,1);
                gpio.delay(50);
                gpio.digitalWrite(BUZZER,0);
                gpio.digitalWrite(GREEN,1);
                gpio.digitalWRite(BLUE,1);
                CheckLight();
                count++;
                break;
            case 1:
                gpio.digitalWrite(BUZZER,1);
                gpio.delay(80);
                gpio.digitalWrite(BUZZER,0);
                gpio.digitalWrite(GREEN,0);
                gpio.digitalWrite(BLUE,0);
                count++;
                break;
            case 2:
                gpio.digitalWrite(BUZZER,1);
                gpio.delay(50);
                gpio.digitalWrite(BUZZER,0);
                gpio.digitalWrite(BUZZER,1);
                gpio.delay(50);
                gpio.digitalWrite(BUZZER,0);
                gpio.digitalWrite(RED,0);
                gpio.digitalWrite(GREEN,0);
                gpio.digitalWrite(BLUE,0);
                count = 0;
                break;
        }
    }
}                 

 

종료 및 실행코드

 

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

gpio.setup('wpi');
gpio.pinMode(RED,gpio.OUTPUT);
gpio.pinMode(GREEN,gpio.OUTPUT);
gpio.pinMode(BLUE,gpio.OUTPUT);
gpio.pinMode(BUZZER,gpio.OUTPUT);
gpio.pinMode(LIGHT,gpio.INPUT);
gpio.pinMode(TOUCH,gpio.INPUT);
setTimeout(CheckTouch,10);

댓글