Advertisement
Guest User

Untitled

a guest
Jul 11th, 2013
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.77 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. cape="BB-BONE-BACONE"
  4. clk=/sys/class/gpio/gpio2
  5. serial=/sys/class/gpio/gpio4
  6. latch=/sys/class/gpio/gpio5
  7. button=/sys/class/gpio/gpio22
  8. red=/sys/class/pwm/pwm0
  9. green=/sys/class/pwm/pwm1
  10. blue=/sys/class/pwm/pwm2
  11. pot=/sys/devices/ocp*/bacon_adc_helper*/AIN5
  12. pot_min=0
  13. pot_max=1800000
  14.  
  15. function setup {
  16.     local i
  17.  
  18.     # load cape if not loaded yet
  19.     grep 2>&1 >/dev/null "$cape" /sys/devices/bone_capemgr*/slots
  20.     if [ $? -ne 0 ] ; then
  21.         echo "$cape" >/sys/devices/bone_capemgr*/slots
  22.         sleep 5
  23.         # check if loaded
  24.         grep 2>&1 >/dev/null "$cape" /sys/devices/bone_capemgr*/slots
  25.         if [ $? -ne 0 ] ; then
  26.             echo "Failed to load $cape"
  27.             exit 5
  28.         fi
  29.     fi
  30.     # export the 3 pwms (it will fail if already exported but we don't care)
  31.     for i in `seq 0 2` ; do
  32.         echo $i 2>/dev/null >/sys/class/pwm/export
  33.     done
  34. }
  35.  
  36. function set_clk {
  37.     echo $1 > "$clk/value"
  38. }
  39.  
  40. function set_serial {
  41.     echo $1 > "$serial/value"
  42. }
  43.  
  44. function set_latch {
  45.     echo $1 > "$latch/value"
  46. }
  47.  
  48. function get_button {
  49.     local v
  50.  
  51.     v=`cat "$button/value"`
  52.     return $v
  53. }
  54.  
  55. function get_button_press {
  56.     # wait for down
  57.     while true ; do
  58.         get_button
  59.         if [ $? -eq 0 ] ; then
  60.             break
  61.         fi
  62.         sleep 0.2
  63.     done
  64.     # wait for up
  65.     while true ; do
  66.         get_button
  67.         if [ $? -eq 1 ] ; then
  68.             break
  69.         fi
  70.         sleep 0.2
  71.     done
  72. }
  73.  
  74. function get_pot {
  75.     local v
  76.  
  77.     # read twice
  78.     v=`cat $pot`
  79.     v=`cat $pot`
  80.     export POT_VALUE="$v"
  81.     return 0
  82. }
  83.  
  84. function set_pwm {
  85.  
  86.     local pwm
  87.     local prev
  88.  
  89.     pwm="$1"
  90.  
  91.     # stop pwm
  92.    
  93.     prev=`cat $pwm/run`
  94.     if [ x$prev == x1 ] ; then
  95.         echo 0 > "$pwm/run"
  96.     fi
  97.     if [ x$3 != "x" ] ; then
  98.         echo "$3" > "$pwm/duty_ns"
  99.     fi
  100.     if [ x$4 != "x" ] ; then
  101.         echo "$4" > "$pwm/period_ns"
  102.     fi
  103.     echo $2 > "$pwm/run"
  104. }
  105.  
  106. function set_8seg {
  107.     local t
  108.     local i
  109.     local v
  110.  
  111.     set_latch 0
  112.  
  113.     v=($*)
  114.     for i in `seq 0 7` ; do
  115.         # t = !v[7-i]
  116.         t=$((!${v[$((7 - $i))]}))
  117.         set_clk 0
  118.         set_serial $t
  119.         set_clk 1
  120.     done
  121.  
  122.     set_latch 1
  123. }
  124.  
  125. function set_digit {
  126.  
  127.     local dot
  128.     local d
  129.  
  130.     if [ x$1 == x ] ; then
  131.         echo "set_digit: missing arguments"
  132.         exit 5
  133.     fi
  134.  
  135.     dot=`echo $1 | sed 's/^[0-9]//'`
  136.     if [ x$dot == "x." ] ; then
  137.         d=1
  138.     else
  139.         d=0
  140.     fi
  141.  
  142.     case $1 in
  143.         0*)  set_8seg 1 1 1 1 1 1 0 $d ;;
  144.         1*)  set_8seg 0 1 1 0 0 0 0 $d ;;
  145.         2*)  set_8seg 1 1 0 1 1 0 1 $d ;;
  146.         3*)  set_8seg 1 1 1 1 0 0 1 $d ;;
  147.         4*)  set_8seg 0 1 1 0 0 1 1 $d ;;
  148.         5*)  set_8seg 1 0 1 1 0 1 1 $d ;;
  149.         6*)  set_8seg 1 0 1 1 1 1 1 $d ;;
  150.         7*)  set_8seg 1 1 1 0 0 0 0 $d ;;
  151.         8*)  set_8seg 1 1 1 1 1 1 1 $d ;;
  152.         9*)  set_8seg 1 1 1 1 0 1 1 $d ;;
  153.         off) set_8seg 0 0 0 0 0 0 0 0  ;;
  154.         on)  set_8seg 1 1 1 1 1 1 1 1  ;;
  155.     esac
  156. }
  157.  
  158. # setup everything
  159. setup
  160.  
  161. # 7 segment display test
  162.  
  163. set_pwm $red 0
  164. sleep 0.5
  165. set_pwm $green 0
  166. sleep 0.5
  167. set_pwm $blue 0
  168. sleep 0.5
  169.  
  170. echo "Red PWM"
  171. set_pwm $red 1 10000 20000
  172. sleep 1
  173. set_pwm $red 0
  174. sleep 1
  175.  
  176. echo "Green PWM"
  177. set_pwm $green 1 10000 20000
  178. sleep 1
  179. set_pwm $green 0
  180. sleep 1
  181.  
  182. echo "Blue PWM"
  183. set_pwm $blue 1 10000 20000
  184. sleep 1
  185. set_pwm $blue 0
  186. sleep 1
  187.  
  188. echo "7 segment display all off"
  189. set_digit off
  190. sleep 1
  191.  
  192. echo "7 segment display all on"
  193. set_digit on
  194. sleep 1
  195.  
  196. echo "7 segment display digit check"
  197. for i in `seq 0 9` ; do
  198.     set_digit $i
  199.     sleep 0.5
  200. done
  201.  
  202. echo "7 segment display digit check (with a dot)"
  203. for i in `seq 0 9` ; do
  204.     set_digit "$i."
  205.       sleep 0.5
  206. done
  207.  
  208. echo "Press button to continue"
  209. get_button_press
  210. echo "button pressed"
  211.  
  212. echo "Slider test (press button to exit)"
  213.  
  214. while true ; do
  215.     get_button
  216.     if [ $? -eq 0 ] ; then
  217.         break
  218.     fi
  219.     get_pot
  220.     v=$POT_VALUE
  221.     d=$(( ($v * 10) / $pot_max))
  222.     set_digit $d
  223.  
  224.     r=$(( ($v * 20000) / $pot_max))
  225.  
  226.     set_pwm $red 1 $r 20000
  227.     set_pwm $green 1 $r 20000
  228.     set_pwm $blue 1 $r 20000
  229. done
  230.  
  231. set_pwm $red 0
  232. set_pwm $green 0
  233. set_pwm $blue 0
  234.  
  235. set_digit off
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement