我开发了一个代码,试图通过我的SAMA5D27嵌入式板上的用户按钮(PIN 29)来操纵红色led(PIN 10)。
这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include "/home/gaston/linux4sam/poky/build-microchip/tmp/sysroots-components/cortexa5hf-neon/mraa/usr/include/mraa.hpp"
#define red 10
#define USER 29
bool running = true;
bool led_state = false;
int last_touch;
void sig_handler(int signo)
{
if (signo == SIGINT)
running = false;
}
int main(int argc, char* argv[])
{
mraa::Result ret;
int touch;
mraa::Gpio* touch_gpio = new mraa::Gpio(USER);
if (touch_gpio == NULL){
return mraa::ERROR_UNSPECIFIED;
}
mraa::Gpio* led_gpio = new mraa::Gpio(red);
if (led_gpio == NULL){
return mraa::ERROR_UNSPECIFIED;
}
signal(SIGINT, sig_handler);
if ((ret = touch_gpio->dir(mraa::DIR_IN))!= mraa::SUCCESS){
return ret;
}
if ((ret = led_gpio->dir(mraa::DIR_OUT))!= mraa::SUCCESS){
return ret;
}
led_gpio->write(led_state);
while (running) {
touch = touch_gpio->read();
if (touch == 1 && last_touch == 0) {
led_state = !led_state;
ret = led_gpio->write(led_state);
usleep(100000);
}
last_touch = touch;
usleep(1);
}
delete led_gpio;
delete touch_gpio;
return ret;
}
编译后,我尝试执行代码,但它显示了以下消息:
在抛出'std :: invalid_argument'实例后调用terminate
what():指定了无效的GPIO引脚
中止
这是怎么回事,我该如何解决该问题?
答案 0 :(得分:-1)
此行可能存在问题:
mraa::Gpio* touch_gpio = new mraa::Gpio(USER);
您的Rasberry Pi的密码为29。检查Rasberry Pi版本的文档。不是引脚号,而是GPIO号。