2017-04-19 33 views
1

使用按鈕按下相信英雄總線引腳是:停止的GoPro經由herobus

  • 引腳3 - GPIO 127
  • 引腳4 - GPIO 2
  • 的引腳16 - GPIO 22
  • Pin17 - GPIO 19
  • ·Pin18 - GPIO 124
  • 19腳 - GPIO 129(ID1)
  • ·Pin20 - GPIO 125(ID2)
  • Pin22 - GPIO 136(ID4)
  • Pin28 - GPIO 36
  • Pin29 - GPIO 37

使用這些引腳欲ID2與在herobus PWR引腳連接並使用腳本,有它

  1. 開始在一個循環檢查gpio125記錄
  2. 坐下,然後退出循環時,125變高。
  3. 腳本停止錄製,然後關閉GoPro。

電源引腳位置高,並將GoPro拉低約1秒。然後它會是一個保持低點的情況,以及gpio125,然後釋放按鈕,兩者都會變高,從而觸發它停止。

目前我有KonradITs代碼的修改版本關閉的GitHub如下:

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高電平時退出循環,然後執行停止記錄並關閉命令。

回答

0

你可以從這個問題中分離出所有硬件特定的代碼。看來你的基本問題是如何等待一個特定的命令返回一個特定的值,然後繼續。假設您使用gpio read 125來檢測引腳狀態,並且假設'0'返回到低電平狀態;使用:

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

這將每秒輪詢該引腳,並在不再低時繼續。

+0

我試過了,它似乎跳過停止視頻並立即關閉。 GoPro可能無法識別這些命令。 – Weasel