1

我相信英雄总线引脚是:

  • Pin3 - 通用输入输出接口 127
  • 引脚 4 - GPIO 2
  • 引脚 16 - GPIO 22
  • 引脚 17 - GPIO 19
  • 引脚 18 - GPIO 124
  • Pin19 - GPIO 129 (ID1)
  • Pin20 - GPIO 125 (ID2)
  • Pin22 - GPIO 136 (ID4)
  • Pin28 - GPIO 36
  • Pin29 - 通用输入输出接口 37

使用这些引脚,我想将 ID2 与 herobus 上的 pwr 引脚连接并使用脚本,拥有它

  1. 开始录音
  2. 坐在循环中检查 gpio125,然后在 125 变高时退出循环。
  3. 脚本停止录制,然后关闭 GoPro。

电源引脚位于高位,将 GoPro 拉低约 1 秒即可工作。然后将其与 gpio125 一起保持低电平,然后在释放按钮时,两者都变高触发它停止。

目前我在 GitHub 上有一个 KonradITs 代码的修改版本,如下所示:

sleep 5
/usr/local/gopro/bin/gpsend ca CM%00   #selects video mode
sleep 5
/usr/local/gopro/bin/gpsend bp SH%01   #starts recording
sleep x
/usr/local/gopro/bin/gpsend bp SH%00   #stops recording after x seconds
sleep 5
/usr/local/gopro/bin/gpsend bp PW%00   #turns off GoPro 

这显然受时间条件的限制,只要 pwr 引脚拉低就会触发。我需要在该sleep x区域周围进行修改,以允许sleep x根据电源按钮何时释放来执行命令。

我考虑过使用类似的东西:

echo 125 > /sys/class/gpio/export           # creates pin interface
echo in > /sys/class/gpio/gpio125/direction # sets it as output pin
echo 1 > /sys/class/gpio/gpio125/value      # sets value to 1

等来合并这个,但我不确定如何完成编写代码。我基本上希望它在循环中检查 gpio125,然后在读取 125 高时退出循环,然后执行停止记录并在之后关闭命令。

4

1 回答 1

0

您可以将所有硬件特定代码与此问题分开。看来您的基本问题是如何等待特定命令返回特定值,然后继续。

假设您使用gpio read 125检测引脚状态,并假设低状态返回“0”;利用:

# start recording
while [ "0" -eq "$(gpio read 125)" ]; do sleep 1; done
# stop recording

它将每秒轮询该引脚并在它不再低时继续。

于 2017-04-19T22:10:39.953 回答