免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9436 | 回复: 13

[应用] 原创shell脚本:莫尔斯码 叫~床!(叫我起床) [复制链接]

论坛徽章:
0
发表于 2011-10-20 17:10 |显示全部楼层
本帖最后由 armips 于 2011-10-21 08:05 编辑

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

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


  1. [root@localhost /usr/app]# cat morsegen.sh
  2. #!/bin/sh

  3. # created by xxx 2011-09-04

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

  5. DIT_HOLD=0.1   #100ms
  6. DAH_HOLD=0.3   #300ms
  7. INTER_KEY=0.1  #100ms
  8. INTER_CHAR=0.2 #200ms
  9. INTER_IDLE=0.7 #700ms

  10. beep_dida()
  11. {
  12.         if [[ $1 == "." ]]; then
  13.                 BEEP_HOLD=$DIT_HOLD
  14.         else
  15.                 BEEP_HOLD=$DAH_HOLD
  16.         fi
  17.         echo 1 > /sys/class/leds/led3/brightness
  18.         sleep $BEEP_HOLD
  19.         echo 0 > /sys/class/leds/led3/brightness
  20. }

  21. morse_char()
  22. {
  23.         i=1
  24.         len=`expr length $1`
  25.         while [ $i -le $len ]
  26.         do
  27.                 var=`echo "$1" | cut -c$i`
  28.                 beep_dida $var
  29.                 sleep $INTER_KEY
  30.                 let i=i+1
  31.         done
  32. }

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

  37. if [ ! -f $MORSE_TBL_FILE ]; then
  38.         echo "$MORSE_TBL_FILE not found!"
  39.         exit 1
  40. fi

  41. for var in `echo -n "$1" | od -An -t dC`
  42. do
  43.         if [ $var -ge 48 -a $var -le 57 ]; then    # 0---9
  44.                 let line=$var-48+27
  45.         elif [ $var -ge 65 -a $var -le 90 ]; then  # A---Z
  46.                 let line=$var-65+1
  47.         elif [ $var -ge 97 -a $var -le 122 ]; then # a---z
  48.                 let line=$var-97+1
  49.         elif [ $var == 32 ]; then                  # space
  50.                 echo "space"
  51.                 sleep $INTER_CHAR
  52.                 continue
  53.         else
  54.                 echo "Unkown char:$var"
  55.                 continue
  56.         fi

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

  62. exit 0
  63. [root@localhost /usr/app]#

  64. [root@localhost /usr/app]# cat MorseTbl.txt
  65. A .-
  66. B -...
  67. C -.-.
  68. D -..
  69. E .
  70. F ..-.
  71. G --.
  72. H ....
  73. I ..
  74. J .---
  75. K -.-
  76. L .-..
  77. M --
  78. N -.
  79. O ---
  80. P .--.
  81. Q --.-
  82. R .-.
  83. S ...
  84. T -
  85. U ..-
  86. V ...-
  87. W .--
  88. X -..-
  89. Y -.--
  90. Z --..
  91. 0 -----
  92. 1 .----
  93. 2 ..---
  94. 3 ...--
  95. 4 ....-
  96. 5 .....
  97. 6 -....
  98. 7 --...
  99. 8 ---..
  100. 9 ----.

  101. ? ..--..
  102. / --..-.
  103. ( -.--.-
  104. ) -.--.-
  105. , .-.-.-

  106. [root@localhost /usr/app]#
复制代码
定时的任务计划:
  1. [root@localhost /usr/app]# crontab -u root -l
  2. # my alarm 7:25
  3. 25 07 * * 1-5 /usr/app/morsegen.sh "get up quickly" > /dev/null &
  4. [root@localhost /usr/app]#
复制代码
手动敲命令试用:
  1. [root@localhost /usr/app]# ./morsegen.sh "get up quickly"
  2. G:--.
  3. E:.
  4. T:-
  5. space
  6. U:..-
  7. P:.--.
  8. space
  9. Q:--.-
  10. U:..-
  11. I:..
  12. C:-.-.
  13. K:-.-
  14. L:.-..
  15. Y:-.--
  16. [root@localhost /usr/app]#
复制代码
还可实现整点报时等,闲着没事玩儿
欢迎大家批评指正。

评分

参与人数 1可用积分 +10 收起 理由
bitmilong + 10 原创内容

查看全部评分

论坛徽章:
0
发表于 2011-10-20 17:14 |显示全部楼层
经过以上的折腾,谍战片 滴滴滴答 答答滴滴 的电报声出现了,看你有没有报务员潜质 能不能听懂吧

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
发表于 2011-10-20 18:19 |显示全部楼层
可移植性不高呀

论坛徽章:
0
发表于 2011-10-21 08:03 |显示全部楼层
回复 3# T-Bagwell


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

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

论坛徽章:
0
发表于 2011-10-21 08:53 |显示全部楼层
挺帅的,再搞个麦,把莫尔斯码识别出来通过音箱发出相应字母,就有没有报务员潜质 都听的懂了

论坛徽章:
0
发表于 2011-10-21 09:26 |显示全部楼层
挺帅的,再搞个麦,把莫尔斯码识别出来通过音箱发出相应字母,就有没有报务员潜质 都听的懂了
bitmilong 发表于 2011-10-21 08:53



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

论坛徽章:
0
发表于 2011-10-21 13:48 |显示全部楼层
挺有意思的,也在学习linux

论坛徽章:
0
发表于 2011-10-23 14:29 |显示全部楼层
呵呵,看看

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
发表于 2011-10-24 16:01 |显示全部楼层
莫斯密码?

论坛徽章:
0
发表于 2011-10-25 12:55 |显示全部楼层
BOSS,有情报

什么消息

正在解码……

没解出来……

哈哈……

…………
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP