Raspberry pi读取输入字节

时间:2014-05-14 09:08:17

标签: raspberry-pi

我正在考虑使用带有覆盆子pi的硬币接收器。据我所知,硬币接收器为每个硬币发送一个具有指定值的字节。我现在的问题是:如何读取GPIO中的字节?

感谢您的帮助!

1 个答案:

答案 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的外观(供将来参考)

的图像

image

以下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文件中的错误。