| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2018 LingYun IoT System Studio |
| | | * Copyright: (C) 2021 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: led.c |
| | | * Description: This file is used to control RGB 3-colours LED |
| | | * Description: This file is used to control RGB 3-colors LED |
| | | * |
| | | * pi@raspberrypi:~ $ gpio readall show BCM and wPi pinmap |
| | | * pi@raspberrypi:~ $ gpio readall #show RPi pin map |
| | | * |
| | | * LED BCM wPi |
| | | * G ---- GPIO.13 ---- GPIO.23 |
| | | * R ---- GPIO.19 ---- GPIO.24 |
| | | * B ---- GPIO.26 ---- GPIO.25 |
| | | * I ---- GND ---- |
| | | * LED #PIN BCM |
| | | * I ---- 39 ---- GND |
| | | * G ---- 37 ---- 26 |
| | | * R ---- 35 ---- 19 |
| | | * B ---- 33 ---- 13 |
| | | * |
| | | * Version: 1.0.0(2018/10/14) |
| | | * Version: 1.0.0(2012/11/03) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" |
| | | * ChangeLog: 1, Release initial version on "2021/11/03 12:13:26" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | |
| | | #include <time.h> |
| | | #include <errno.h> |
| | | |
| | | #include "led.h" |
| | | #include <gpiod.h> |
| | | |
| | | #define msleep(x) usleep( 1000*(x) ) |
| | | #define DELAY 500 |
| | | |
| | | #define ON 1 |
| | | #define OFF 0 |
| | | |
| | | /* Three LEDs code */ |
| | | enum |
| | | { |
| | | LED_R = 0, |
| | | LED_G, |
| | | LED_B, |
| | | LED_MAX, |
| | | }; |
| | | |
| | | /* RGB 3-color LED BCM pin number */ |
| | | static int led_gpio[LED_MAX]= { 19, 26, 13 }; |
| | | |
| | | void init_led(void); |
| | | int turn_led(int which, int cmd); |
| | | |
| | | int main(int argc, char *argv[]) |
| | | { |
| | |
| | | while(1) |
| | | { |
| | | turn_led(LED_R, ON); |
| | | msleep(DELAY); |
| | | turn_led(LED_R, OFF); |
| | | msleep(DELAY); |
| | | |
| | | turn_led(LED_G, ON); |
| | | msleep(DELAY); |
| | | turn_led(LED_G, OFF); |
| | | msleep(DELAY); |
| | | |
| | | turn_led(LED_B, ON); |
| | | msleep(DELAY); |
| | | turn_led(LED_B, OFF); |
| | | msleep(DELAY); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | #ifdef CONFIG_USE_WIRINGPI |
| | | #include <wiringPi.h> |
| | | |
| | | void init_led(void) |
| | | { |
| | | int i; |
| | | |
| | | wiringPiSetup(); |
| | | |
| | | for(i=0; i<LED_MAX; i++) |
| | | { |
| | | pinMode( led_gpio[i], OUTPUT ); |
| | | } |
| | | } |
| | | |
| | | int turn_led(int which, int cmd) |
| | | { |
| | | if( which<0 || which>=LED_MAX ) |
| | | return -1; |
| | | |
| | | |
| | | if( OFF == cmd ) |
| | | digitalWrite (led_gpio[which], LOW); |
| | | else |
| | | digitalWrite (led_gpio[which], HIGH); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | #else /* use libgpiod library */ |
| | | |
| | | #include <gpiod.h> |
| | | |
| | | #if 0 /* Use libgpiod lowlevel API */ |
| | | #if 1 /* Use libgpiod lowlevel API */ |
| | | |
| | | struct gpiod_chip* chip; |
| | | |
| | |
| | | { |
| | | gpiod_line_set_value(line, 1); |
| | | } |
| | | |
| | | msleep(DELAY); |
| | | } |
| | | |
| | | |
| | | #else /* use libgpiod ctxless high level API */ |
| | | void init_led(void) |
| | | { |
| | | |
| | | } |
| | | |
| | | void gpiod_ctxless_cb(void *data) |
| | | static void gpiod_ctxless_cb(void *data) |
| | | { |
| | | sleep(1); |
| | | } |
| | |
| | | #endif |
| | | |
| | | |
| | | #endif |