armips 发表于 2011-10-20 17:10

原创shell脚本:莫尔斯码 叫~床!(叫我起床)

本帖最后由 armips 于 2011-10-21 08:05 编辑

用个小板上的蜂鸣器 工作日的早上 发送莫尔斯码 提醒起床:

用shell脚本发送字符串对应的莫尔斯码:

# cat morsegen.sh
#!/bin/sh

# created by xxx 2011-09-04

MORSE_TBL_FILE=$(dirname "$0")/MorseTbl.txt

DIT_HOLD=0.1   #100ms
DAH_HOLD=0.3   #300ms
INTER_KEY=0.1#100ms
INTER_CHAR=0.2 #200ms
INTER_IDLE=0.7 #700ms

beep_dida()
{
      if [[ $1 == "." ]]; then
                BEEP_HOLD=$DIT_HOLD
      else
                BEEP_HOLD=$DAH_HOLD
      fi
      echo 1 > /sys/class/leds/led3/brightness
      sleep $BEEP_HOLD
      echo 0 > /sys/class/leds/led3/brightness
}

morse_char()
{
      i=1
      len=`expr length $1`
      while [ $i -le $len ]
      do
                var=`echo "$1" | cut -c$i`
                beep_dida $var
                sleep $INTER_KEY
                let i=i+1
      done
}

if [ $# -ne 1 ]; then
      echo "Usage: $0 \"CQ CQ CQ DE XYZ K\""
      exit 1;
fi

if [ ! -f $MORSE_TBL_FILE ]; then
      echo "$MORSE_TBL_FILE not found!"
      exit 1
fi

for var in `echo -n "$1" | od -An -t dC`
do
      if [ $var -ge 48 -a $var -le 57 ]; then    # 0---9
                let line=$var-48+27
      elif [ $var -ge 65 -a $var -le 90 ]; then# A---Z
                let line=$var-65+1
      elif [ $var -ge 97 -a $var -le 122 ]; then # a---z
                let line=$var-97+1
      elif [ $var == 32 ]; then                  # space
                echo "space"
                sleep $INTER_CHAR
                continue
      else
                echo "Unkown char:$var"
                continue
      fi

      morse=`awk -F" " 'NR=='$line' {print $2}' $MORSE_TBL_FILE`
      echo "`awk -F\" \" 'NR=='$line' {print $1}' $MORSE_TBL_FILE`:$morse"
      morse_char $morse
      sleep $INTER_CHAR
done

exit 0
#

# cat MorseTbl.txt
A .-
B -...
C -.-.
D -..
E .
F ..-.
G --.
H ....
I ..
J .---
K -.-
L .-..
M --
N -.
O ---
P .--.
Q --.-
R .-.
S ...
T -
U ..-
V ...-
W .--
X -..-
Y -.--
Z --..
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.

? ..--..
/ --..-.
( -.--.-
) -.--.-
, .-.-.-

#定时的任务计划:# crontab -u root -l
# my alarm 7:25
25 07 * * 1-5 /usr/app/morsegen.sh "get up quickly" > /dev/null &
#手动敲命令试用:# ./morsegen.sh "get up quickly"
G:--.
E:.
T:-
space
U:..-
P:.--.
space
Q:--.-
U:..-
I:..
C:-.-.
K:-.-
L:.-..
Y:-.--
#还可实现整点报时等,闲着没事玩儿
欢迎大家批评指正。

armips 发表于 2011-10-20 17:14

经过以上的折腾,谍战片 滴滴滴答 答答滴滴 的电报声出现了,看你有没有报务员潜质 能不能听懂吧:emn10:

T-Bagwell 发表于 2011-10-20 18:19

可移植性不高呀

armips 发表于 2011-10-21 08:03

回复 3# T-Bagwell


    只要修改beep_dida()函数中以下两行使自己板子上的蜂鸣器或其它发生设备发声及停止发声即可:
      echo 1 > /sys/class/leds/led3/brightness

      echo 0 > /sys/class/leds/led3/brightness

bitmilong 发表于 2011-10-21 08:53

挺帅的,再搞个麦,把莫尔斯码识别出来通过音箱发出相应字母,就有没有报务员潜质 都听的懂了:em03::em03:

armips 发表于 2011-10-21 09:26

挺帅的,再搞个麦,把莫尔斯码识别出来通过音箱发出相应字母,就有没有报务员潜质 都听的懂了
bitmilong 发表于 2011-10-21 08:53 http://bbs.chinaunix.net/images/common/back.gif


    有道理,不过偶的小板子除了蜂鸣器没有任何发音设备了,所以出此下策,玩上一玩儿,顺便学习一下shell脚本

jchaodong 发表于 2011-10-21 13:48

挺有意思的,也在学习linux

佳音0104 发表于 2011-10-23 14:29

呵呵,看看

nxlinux 发表于 2011-10-24 16:01

莫斯密码?

lovetide 发表于 2011-10-25 12:55

http://bbs.chinaunix.net/uc_server/data/avatar/020/17/58/08_avatar_middle.jpg BOSS,有情报

http://bbs.chinaunix.net/uc_server/data/avatar/011/34/49/13_avatar_middle.jpg 什么消息

http://bbs.chinaunix.net/uc_server/data/avatar/024/79/09/61_avatar_middle.jpg 正在解码……

http://bbs.chinaunix.net/uc_server/data/avatar/026/35/93/77_avatar_middle.jpg 没解出来……

http://bbs.chinaunix.net/uc_server/data/avatar/020/85/27/65_avatar_middle.jpg 哈哈……

http://bbs.chinaunix.net/uc_server/images/noavatar_middle.gif …………
页: [1] 2
查看完整版本: 原创shell脚本:莫尔斯码 叫~床!(叫我起床)