/********************************************************************************* * Copyright: (C) 2019 LingYun IoT System Studio * All rights reserved. * * Filename: infrared.c * Description: This file * * pi@raspberrypi:~ $ gpio readall #show BCM and wPi pinmap * * PIN #PIN BCM wPi * VCC(left) ---- 2 ---- 5v ---- 5v * I/O(indoor) ---- 16 ---- 23 ---- 4 * I/O(hallway) ---- 18 ---- 24 ---- 5 * GND(right) ---- 34 ---- 0v ---- 0v * * Version: 1.0.0(30/01/19) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "30/01/19 03:37:16" * ********************************************************************************/ #include #include #include #include #include //#define CONFIG_USE_WIRINGPI #ifdef CONFIG_USE_WIRINGPI #include int main (int argc, char **argv) { int wPiPin; if( argc != 2 ) { printf("%s [wPi PinNum]\n", argv[0]); printf("Exampe indoor : %s 4\n", argv[0]); printf("Exampe hallway: %s 5\n", argv[0]); return 0; } wPiPin = atoi(argv[1]); printf("Start infrared detect on wPi Pin[#%d]\n", wPiPin); wiringPiSetup(); pinMode(wPiPin, INPUT); while(1) { printf("Infrared monitor: %s\n", digitalRead(wPiPin)? "Someone is closing!":"No one nearby!"); sleep(1); } return 0; } #else #include int main (int argc, char **argv) { struct gpiod_chip* chip; struct gpiod_line* line; int rv = 0; struct gpiod_line_event event; int bcmPin; if( argc != 2 ) { printf("%s [BCM PinNum]\n", argv[0]); printf("Exampe indoor : %s 23\n", argv[0]); printf("Exampe hallway: %s 24\n", argv[0]); return 0; } bcmPin = atoi(argv[1]); printf("Start infrared detect on BCM Pin[#%d]\n", bcmPin); chip = gpiod_chip_open_by_name("gpiochip0"); if( !chip ) { printf("gpiod open chip failure, maybe you need running as root\n"); return 1; } line = gpiod_chip_get_line(chip, bcmPin); if( !line ) { printf("gpiod get line[%d] failure\n", bcmPin); rv = 2; goto cleanup; } if( gpiod_line_request_input(line, "infrared") < 0 ) { printf("gpiod request input [#%d] failure: %s\n", bcmPin, strerror(errno) ); rv = 3; goto cleanup; } while(1) { /* This function will block, must call it to setup */ printf("Infrared monitor: %s\n", gpiod_line_get_value(line) ? "Someone is closing!":"No one nearby!"); sleep(1); } cleanup: gpiod_chip_close(chip); return rv; } #endif