我正在考虑使用带有覆盆子pi的硬币接收器。据我所知,硬币接收器为每个硬币发送一个具有指定值的字节。我现在的问题是:如何读取GPIO中的字节?
感谢您的帮助!
答案 0 :(得分:0)
我发现这可能会有所帮助sites.google.com/site/semilleroadt/raspberry-pi-tutorials/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
你还需要设定方向
配置引脚方向(输入/输出):
echo out > /sys/class/gpio/gpio11/direction
在教程11
中使用了但你的号码可能不同我仍然不明白GPIO是什么,但我相信你会把它放在芯片上的电线上。
以下是电路板GPIO的外观(供将来参考)
的图像
以下C代码
从应用程序管理GPIO
所有这些相同的操作都可以使用软件应用程序完成。 按照简短的C代码行显示如何重现相同的步骤 如上(请记住使用您要使用的GPIO号码更改XX)。
保留(导出)GPIO:
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);
设置刚刚创建的GPIO文件夹中的方向:
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);
如果out out设置了GPIO的值:
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);
如果在方向上获取GPIO的当前值:
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);
完成免费(取消导出)GPIO后:
fd = open("/sys/class/gpio/unexport", O_WRONLY);
sprintf(buf, "%d", gpio);
write(fd, buf, strlen(buf));
close(fd);
如果您打算设置或更多,请记住一个重要的注意事项 重要的是,在连续模式下通过这种方式获得GPIO的价值。 如果你打开"值"获取当前GPIO状态的文件(1或0) 记住,在第一次读取操作后,文件指针会 移动到文件中的下一个位置。由于这个界面是 要从cat命令读取,返回的字符串将被终止 换行符(\ n)。这意味着在第一个"有效"读 所有下一个读操作将始终返回最后一个字符 该文件,在这种情况下只有新行' \ n'。为了获得正确的 您只需设置文件的每个读取操作的状态值 使用该命令读取之前指针在文件的开头 下面:
lseek(fp, 0, SEEK_SET);
如果打开和关闭GPIO值文件,则不会出现此问题 每次你需要阅读,但你知道,连续阅读 引入短暂的延迟。由于这些短代码只是一个 例如,如果要在代码中使用它们,请记住添加控件 用于打开GPIO文件中的错误。