Raspberry pi Raspberry pi读取输入字节

Raspberry pi Raspberry pi读取输入字节,raspberry-pi,Raspberry Pi,我在考虑用一个硬币接收器和我的覆盆子圆周率。据我所知,硬币接受器为每枚硬币发送一个带有指定值的字节。我现在的问题是:如何读取通过GPIO输入的字节 谢谢你的帮助 我发现这可能会有帮助 差不多就是这条线 cat /sys/class/gpio/gpio11/value 我想应该看看你的硬币价值 假设您使用的是Linux操作系统 这就是将值1写入GPIO的方式 echo 1 > /sys/class/gpio/gpio11/value 该链接还提供了更好的C代码,因此您不必使用shell

我在考虑用一个硬币接收器和我的覆盆子圆周率。据我所知,硬币接受器为每枚硬币发送一个带有指定值的字节。我现在的问题是:如何读取通过GPIO输入的字节


谢谢你的帮助

我发现这可能会有帮助

差不多就是这条线

cat /sys/class/gpio/gpio11/value 
我想应该看看你的硬币价值

假设您使用的是Linux操作系统

这就是将值1写入GPIO的方式

echo 1 > /sys/class/gpio/gpio11/value
该链接还提供了更好的C代码,因此您不必使用shell命令

该路径中的
gpio11
基于

echo 11 > /sys/class/gpio/export
您还需要确定方向
配置引脚方向(输入/输出):

在教程中使用了
11
,但您的号码可能不同,我仍然不明白什么是GPIO,但我相信这就是您在芯片上插入电线的地方

这是一张板GPIO的外观图(供将来参考)

下面的C代码

从应用程序管理GPIO

所有这些相同的操作都可以使用软件应用程序进行。 按照C代码的短行显示如何复制相同的步骤 如上所述(记住用您想要使用的GPIO号更改XX)

保留(导出)GPIO:

在刚创建的GPIO文件夹中设置方向:

如果为输出方向,则设置GPIO的值:

如果方向为In,则获取GPIO的当前值:

一旦完成释放(未导出)GPIO:

如果你打算设置或设置更多,你必须记住一个重要的注意事项 重要的是,在连续模式下通过这种方式获得GPIO的值。 如果打开“值”文件以获取当前GPIO状态(1或0) 请记住,在第一次读取操作之后,文件指针将 移动到文件中的下一个位置。因为这个接口是 要从cat命令中读取,返回的字符串将以 新行字符(\n)。这意味着在第一次“有效”读取之后 所有下一次读取操作将始终返回中的最后一个字符 文件,在本例中仅为新行“\n”。为了获得正确的 每个读取操作的状态值只需设置文件即可 在使用命令读取之前,指向文件开头的指针 下:

如果打开并关闭GPIO值文件,则不会出现此问题 每次你都需要阅读,但正如你所知道的,为了持续阅读 引入一个短暂的延迟。因为这些短代码行只是一个 示例如果要在代码中使用它们,请记住添加控件 打开GPIO文件时出错


谢谢,但它看起来只有在有信号时才会输出,但不会显示字节?或者是我写的?我想它会等到设备输出一些东西,然后它会显示出来,是的,我想它会显示一个字符,但是如果你把它包装在一个C程序中,你可以得到一个字节。我也会在答案中加入C代码。最好的建议是尝试一下,我猜,看看它会输出什么。我没有树莓皮,只是在谷歌上搜索了你的信息。它似乎输出了一个类似于字符串格式的数字的值。
echo out > /sys/class/gpio/gpio11/direction
int fd;
char buf[MAX_BUF]; 
int gpio = XX;

fd = open("/sys/class/gpio/export", O_WRONLY);

sprintf(buf, "%d", gpio); 

write(fd, buf, strlen(buf));

close(fd);
sprintf(buf, "/sys/class/gpio/gpio%d/direction", gpio);

fd = open(buf, O_WRONLY);

// Set out direction
write(fd, "out", 3); 
// Set in direction
write(fd, "in", 2); 

close(fd);
sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio);

fd = open(buf, O_WRONLY);

// Set GPIO high status
write(fd, "1", 1); 
// Set GPIO low status 
write(fd, "0", 1); 

close(fd);
char value;

sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio);

fd = open(buf, O_RDONLY);

read(fd, &value, 1);

if(value == '0')
{ 
     // Current GPIO status low
}
else
{
     // Current GPIO status high
}

close(fd);
fd = open("/sys/class/gpio/unexport", O_WRONLY);

sprintf(buf, "%d", gpio);

write(fd, buf, strlen(buf));

close(fd);
lseek(fp, 0, SEEK_SET);