我想监视一个特定的 GPIO 引脚,该引脚连接了一个按钮,并且根据按下按钮的次数,它会打开一些 LED 灯,让它们闪烁或关闭它们。
#include <stdio.h>
#include <pigpio.h>
#include <stdlib.h>
#include <unistd.h>
#define LED_1 13
#define LED_2 19
#define BUTTON 25
#define ON 1
#define OFF 0
#define DELAY 1
void initalise_pins();
void clear_all();
void start_button();
void turn_on_lights();
void increment_state(int gpio, int level, uint32_t tick);
int current_state = 0; /*Don't have a better way of breaking out of loop during pulse so using global var*/
int main(){
if (gpioInitialise() < 0){
printf("Error initializing pigpio library, exiting");
}
else{
initalise_pins();
clear_all();
start_button();
}
}
int main(){
initalise_pins();
clear_all();
start_button();
}
void initalise_pins(){
gpioSetMode(LED_1, PI_OUTPUT); /*Set LED at pin 13 to output*/
gpioSetMode(LED_2, PI_OUTPUT); /*Set LED at pin 19 to output*/
gpioSetMode(BUTTON, PI_INPUT); /*Set Button at pin 25 to input*/
gpioSetPullUpDown(BUTTON, PI_PUD_DOWN); /*Set Button at pin 25 to pulldown*/
gpioSetAlertFunc(BUTTON, increment_state); /*Function to watch for GPIO state change*/
}
void clear_all(){
gpioWrite(LED_1, OFF); /*Resets LED_1 to off*/
gpioWrite(LED_2, OFF); /*Resets LED_2 to off*/
}
void turn_on_lights(){
gpioWrite(LED_1, ON);
gpioWrite(LED_2, ON);
}
void increment_state(int gpio, int level, uint32_t tick){
if (level == 1){
current_state += 1;
}
}
void start_button(){
for (;;){ /*Loop to keep reading button value*/
if (current_state == 0){ /*Current state off*/
continue;
}
else if (current_state == 1){ /*Current state on*/
turn_on_lights();
}
else if (current_state == 2){ /*Current state blinking*/
clear_all();
sleep(DELAY);
turn_on_lights();
sleep(DELAY);
}
else{ /*Reset state to off*/
clear_all();
current_state = 0;
}
sleep(0.1);
}
}
代码按预期工作,但是否有适当的方法来设置值current_state
而不是将其作为全局变量?此解决方案的主要问题是,当我将其编译为要在 Python 中使用的库时,此函数将中断。