Processor

【라즈베리파이】 wiringPi C 언어 : 충격 센서와 인터럽트

작성자 임베디드코리아 작성일26-02-17 18:14 조회123회 댓글0건
◆ 물체가 충돌로 인해 충격을 받았을때 충격 여부를 파악해주는 센서로
    순간적인 변화이므로 인터럽트를 이용하여 처리한다.

--->>>  예제 :  Shock_Sensor_interrupt.c      <<<-------------------------------------------------
#include<stdio.h>
#include<wiringPi.h>

#define LED 5            //BCM 기준 5
#define SHOCK_PIN 0  // 17번 핀

volatile int shock_onoff=0;

void shockDetected_Interrupt();    // 인터럽트 처리 함수

int main() {

    wiringPiSetupGpio();        // BCM  기준
   
    //초기 핀의 Input, Output을 설정
    pinMode(LED, OUTPUT);
    pinMode(SHOCK_PIN, INPUT);
    pullUpDnControl(SHOCK_PIN, PUD_UP); //내부 PULL-up저항 (쇼트방지)

    //스위치 인터럽트
    if(wiringPiISR(SHOCK_PIN, INT_EDGE_FALLING, &shockDetected_Interrupt) < 0)
        return 1;

    while(1) {
        if(shock_onoff == 1) {
            digitalWrite(LED,1);    //LED 점등
            delay(1000);      //time초 만큼 유지
            digitalWrite(LED,0);
            delay(1000);
        }
    }
}

void shockDetected_Interrupt()  {      // 인터럽트 처리 함수
    delay(100);    // 스위치 bouncing 제거 목적
    if(digitalRead(SHOCK_PIN)<1) {
        if(shock_onoff == 1) {
            printf("shock off\n");
            shock_onoff = 0;
        }
        else {
            printf("shock on\n");
            shock_onoff = 1;
        }
    }
}
---------------------------------------------------------------------------------------
$ gcc -o  Shock_Sensor_interrupt  Shock_Sensor_interrupt.c -lwiringPi
$ sudo ./Shock_Sensor_interrupt