通过herobus按钮停止GoPro

时间:2017-04-19 08:57:12

标签: bash shell scripting gopro

我相信Hero总线引脚是:

  • Pin3 - GPIO 127
  • Pin4 - GPIO 2
  • Pin16 - GPIO 22
  • Pin17 - GPIO 19
  • Pin18 - GPIO 124
  • Pin19 - GPIO 129(ID1)
  • Pin20 - GPIO 125(ID2)
  • Pin22 - GPIO 136(ID4)
  • Pin28 - GPIO 36
  • Pin29 - GPIO 37

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

  1. 开始录制
  2. 坐在循环中检查gpio125然后在125变高时退出循环。
  3. 脚本停止录制,然后关闭GoPro。
  4. 电源引脚位于高电平并将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高时退出循环然后执行停止记录并在之后关闭命令。

1 个答案:

答案 0 :(得分:0)

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

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

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

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