/*********************************************************************************
|
* 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 <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "30/01/19 03:37:16"
|
*
|
********************************************************************************/
|
|
#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>
|
|
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 <gpiod.h>
|
|
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
|