From c13c9806f957ebc675462737f4b328d3ab89e028 Mon Sep 17 00:00:00 2001 From: guowenxue <guowenxue@gmail.com> Date: Mon, 10 Jul 2023 17:29:22 +0800 Subject: [PATCH] update gpsd.c --- modules/c/infrared.c | 81 +++++++++++++++++++++++----------------- 1 files changed, 46 insertions(+), 35 deletions(-) diff --git a/modules/c/infrared.c b/modules/c/infrared.c index 25cd18a..c6f13fe 100644 --- a/modules/c/infrared.c +++ b/modules/c/infrared.c @@ -9,7 +9,8 @@ * * PIN #PIN BCM wPi * VCC(left) ---- 2 ---- 5v ---- 5v - * I/O(mid) ---- 32 ---- 12 ---- 26 + * I/O(indoor) ---- 16 ---- 23 ---- 4 + * I/O(hallway) ---- 18 ---- 24 ---- 5 * GND(right) ---- 34 ---- 0v ---- 0v * * Version: 1.0.0(30/01/19) @@ -20,25 +21,39 @@ #include <stdio.h> #include <unistd.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> +//#define CONFIG_USE_WIRINGPI #ifdef CONFIG_USE_WIRINGPI #include <wiringPi.h> -#define INFRARED_PIN 26 - 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(INFRARED_PIN, INPUT); + pinMode(wPiPin, INPUT); while(1) { - printf("Infrared monitor: %s\n", digitalRead(INFRARED_PIN)? "Someone is closing!":"No one nearby!"); + printf("Infrared monitor: %s\n", digitalRead(wPiPin)? "Someone is closing!":"No one nearby!"); sleep(1); } - return 0; } @@ -47,56 +62,52 @@ #include <gpiod.h> -#define INFRARED_PIN 12 - 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; + printf("gpiod open chip failure, maybe you need running as root\n"); + return 1; } - line = gpiod_chip_get_line(chip, INFRARED_PIN); + line = gpiod_chip_get_line(chip, bcmPin); if( !line ) { - printf("gpiod get line[%d] failure\n", INFRARED_PIN); - rv = 2; - goto cleanup; + printf("gpiod get line[%d] failure\n", bcmPin); + rv = 2; + goto cleanup; } - - if( gpiod_line_request_rising_edge_events(line, "infrared") < 0 ) + if( gpiod_line_request_input(line, "infrared") < 0 ) { - printf("gpiod request rising edge event failure\n"); - rv = 3; - goto cleanup; + 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 */ - if( gpiod_line_event_wait(line, NULL) < 0 ) - { - printf("gpiod line wait event failure!\n"); - } - - /* This function will block, must read to clear the event */ - if (gpiod_line_event_read(line, &event) < 0) - { - printf("gpiod line wait event failure!\n"); - } - - if (event.event_type == GPIOD_LINE_EVENT_RISING_EDGE) - { - printf("Infrared monitor: Someone is closing!\n"); - } + /* 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: -- Gitblit v1.9.1