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

WiringPi GPIO API인 PWM이용하기

by hyun-am 2019. 10. 9.

PWM

 

PWM이랑 Pulse Width Modulation의 줄임말로 펄스폭변조 라는 뜻을 가지고 있습니다.

 

디지털 기기에서 아날로그 결과를 얻기 위한 기법으로(DC모터 속도제어, LED밝기제어에 활용되는 기술입니다.)

 

대표적인 함수는

 

int softPwmCreate(pin, initialValue, pwmRange);	// 정상 0 리턴

void softPwmWrite(pin, value);

 

initialValue - 한 주기(Frequency)를 세분화했을때 시작 값

 

pwmRange - 한 주기의 끝 값.

ex) softPwmCreate(REDLED_PIN, 1, 100);

 

value - Duty cycle 크기의 값. 단, 범위에 있어야 합니다.

ex) softPwmWrite(REDLED_PIN, 19); 1~100 중에서 19만큼의 밝기로 셋팅

 

주기

 

 

이런식으로 duty cycle은 이렇게 생겼으며 HIGH는 켜져있는 시간을 나타내며 LOW는 꺼져있는 시간을 나타냅니다.

 

코드 예제

 

버튼을 누를때 마다 빨간색 LED의 밝기가 1>25>50>75>100 으로 바뀌는 코드

 

 

const gpio = require('node-wiring-pi');
const RED = 23;
const BUTTON = 25;

let count = 0;

const DetectButton = function(){
    switch(count){
        case 0:
            gpio.softPwmWrite(RED,1);
            count++;
            break;
        case 1:
            gpio.softPwmWrite(RED,25);
            count++;
            break;
        case 2:
            gpio.softPwmWrite(RED,50);
            count++;
            break;
        case 3:
            gpio.softPwmWrite(RED,75);
            count++;
            break;
        case 4:
            gpio.softPwmWrite(RED,100);
            count = 0;
            break;
        default:
            break;
    }
}

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

gpio.wiringPiSetup();
gpio.pinMode(RED,gpio.OUTPUT);
gpio.pinMode(BUTTON,gpio.INPUT);

// 아래 두줄 코드는 맨 아래에 선언 합니다.
gpio.wiringPiISR(BUTTON,gpio.INT_EDGE_RISING,DetectButton);
gpio.softPwmCreate(RED,0,100);
        

 

댓글