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

램프형 LED와 3색 LED 모듈을 제어하는 코드

by hyun-am 2019. 10. 6.

GPIO Pin

 

먼저 모듈을 제어하는 코드를 소개하기전에 GPIO Pin 구성을 보겠습니다

 

터미널로 들어가 $gpio readall 명령어를 실행시키면 아래와 같은 GPIO Pin 구성이 나옵니다.

 

여기서 Physical번호는 하드웨어 핀번호 순서를 나타낸 것이며 wpi번호는 프로그램에서 사용하는 번호를 나타낸 것입니다.

 

램프형 LED 모듈 제어

 

먼저 램프형 LED 모듈은 다음과 같은 구조를 가지고 있습니다.

 

이 중에서 저희는 GND이것을 0V인 6번핀에 꽂고 D0을 프로그램에서 wpi번호가 29인 40번핀에 꽂겠습니다.

 

const gpio = require('node-wiring-pi');
const LEDPIN = 29;
var flag = 0;

const TimeOutHandler = function(){
	if(flag>0){
    	gpio.digitalWrite(LEDPIN,1);
        console.log("LED 켜짐");
        flag = 0;
	}
    else{
    	gpio.digitalWrite(LEDPIN,0);
        console.log("LED 꺼짐");
        flag = 1;
    }
    setTimeout(TimeOutHandler,1000);
}
gpio.setip('wpi');
gpio.pinMode(LEDPIN,gpio.OUTPUT);
setTimeout(TimeOutHandler,1000);

 

const gpio = require('node-wiring-pi');
const LEDPIN = 29;
var flag = 0;

const LedController = function(){
	gpio.digitalWrite(LEDPIN,1);
    	gpio.delay(1000);
    	gpio.digitalWrite(LEDPIN,0);
    	setTimeout(LedController,1000);
}
gpio.setip('wpi');
gpio.pinMode(LEDPIN,gpio.OUTPUT);
setImmediate(LedController);

 

3색형 LED 제어 

 

3색 LED의 구조는 아래와 같습니다.

 

3색 LED를 1초 간격으로 빨간색>초록색>파랑색>모두 꺼짐을 구현하려고 합니다.

 

이때 빨간색-물리40(wpi29), 초록색-물리38(wpi28), 파란색-물리36(wpi27), 0v-물리6번 으로 하겠습니다.

 

코드는 아래와 같습니다.

const gpio = require('node-wiring-pi');
const BLUE = 29;
const RED = 28;
const GREEN = 27;
var count = 0;

const TimeOutHandler = function(){
	switch(count % 4){
    	case 0:
            gpio.digitalWrite(RED,1);
            console.log("RED ON");
            break;
        case 1:
            gpio.digitalWrite(RED,0);
            gpio.digitalWrite(GREEN,1);
            console.log("GREEN ON");
            break;
        case 2:
            gpio.digitalWrite(GREEN,0);
            gpio.digitalWrite(BLEU,1);
            console.log("BLUE ON");
            break;
        case 3:
            gpio.digitalWrite(RED,0);
            gpio.digitalWrite(GREEN,0);
            gpio.digitalWrite(BLUE,0);
            console.log("ALL OFF");
            break;
        default:
        	break;
        }
        count++;
        setTimeOut(TimeOutHandler,1000);
 }
 
 gpio.setup('wpi');
 gpio.pinMode(RED,gpio.OUTPUT);
 gpio.pinMode(GREEN,gpio.OUTPUT);
 gpio.pinMode(BLUE,gpio.OUTPUT);
 setImmediate(TimeOutHandler);
    

 

 

댓글