美文网首页
一个整数发出的SOS信号

一个整数发出的SOS信号

作者: DrS6 | 来源:发表于2016-07-01 18:26 被阅读89次

SOS来自于国际摩尔斯电码,它表示求救信号,摩尔斯电码为...---...。基本规则为三短三长三短,手电发射信号遵守这个规则即可,下面的时间间隔规则可以不用太在意。
最近研发的激光枪瞄手电需要新加一个求救信功能,so,简单研究了一下关于SOS,下面是我归纳的内容:
|-------------------分割线---------------------|
1:摩尔斯电码符号点和线,1个点持续的时间为一个单位时间,1个线持续的时间为点持续时长的三倍。
2:符号之间时间间隔一般为1个单位时间,例如点与点之间需要停顿1个单位时间。
3:字母之间时间间隔,S与O之间的时长一般为3个单位时长。
4:词和词之间的时间间隔,2个SOS信号之间的间隔时间一般为7个时间单位。
根据上述规则可以得到如下的一个序列:
10101+000+111011101110+000+10101+0000000
将这个序列存入一个64位整数就可以得到闪灯的规则,其中1亮灯,0灭灯,解析顺序从高位开始到低位结束。
到这里不知道各位看官,看懂没,没看懂的话,看下序列的解析:
10101 (点停顿点停顿点停顿)这一串表示 S
000 字母间隔
11101110111 三个1表示一个线0表示停顿 这一串表示O
000 字母间隔
10101 (点停顿点停顿点停顿)这一串表示 S
0000000 词间隔
序列总长度34(N),从高到低依次取出序列的第N位,每取出一位,操作Led管脚一次,计时,完成后取出N-1,如此往复,34次结束后就是一个SOS信号组合。
下面是简单的代码:
|--------------------------|
[code 语言C]
/#define SHIFT 34
int64_t SOS = 0x2A3BB8A80;//sos的亮灭序列
int perTime = 200;//单位时间
int shift_len = 34;
int timerCount = 0;//时间间隔计数

//function需要每1毫秒执行一次STM32f1单片机有系统函数SysTick_Handler(),这个函数是每1ms执行一次
void function()
{
if(timerCount == 0)
{
shift_len--;
//取位
uint8_t status = SOS >> shift_len;
status = status & 1;
//控制LED
if(status == 1)
{
//亮灯
Led_ON();
}
else
{
//关灯
Led_OFF();
}
}
if(timerCount++ > perTime)
{
timerCount = 0;
}
if(shift_len == 1)
{
shift_len = SHIFT;
timerCount = 0;
}
}
[code]
|--------------------------|
代码不重要,主要是使用一个整数来表示SOS灯光变化的序列这一思路很绝妙。
小伙伴们,如果是你,你怎么实现呢?欢迎评论,留言,指正。谢谢大家!

相关文章

  • 一个整数发出的SOS信号

    SOS来自于国际摩尔斯电码,它表示求救信号,摩尔斯电码为...---...。基本规则为三短三长三短,手电发射信号遵...

  • 阅读《天空小熊第一次探险》第1页-第6页

    妈妈问:你知道SOS是什么意思吗? 宝宝答:SOS是他们发出的求救信号,遇到了危险他们没办法自救,这样别人看到就会...

  • 身体发出的“SOS”!

    你了解自己吗?你知道自己身体的密码吗?今天我要告诉你,你身体为什么会有疲、酸、胀、痛等的感觉吗?它就像我们身体的密...

  • 滑魂

    SOS ! 有时候内心发出的求救信号有人听到吗? 不知道从什么时候开始,Boo每天醒来都觉得很压抑,睁开眼像是溺水...

  • 推荐一本书:

    SOS是一种国际莫尔斯电码求救信号。 SOS即为:滴滴滴(短音)——哒哒哒(长音)——滴滴滴(短音)。 人类在新石...

  • 美国人的故事:电报之父 - 山缪尔·莫尔斯(2)

    莫尔斯码中,最有名的是海上救援信号SOS(×××―――×××)。一九零五年四月一日,德国政府把SOS的莫尔斯码设为...

  • SOS: 笑笑的求救信号

    晚上睡的晚,他说:妈妈,我明天要七点起床。 于是今天7点,我用音乐声唤醒他。穿衣服洗漱很快完成,早餐简单吃完。但是...

  • python模块 signal 的使用(信号捕捉,gevent使

    在python程序中,通常拦截的信号有两种,一个是发出的kill信号,一个是发出的ctrl+c信号 设置信号拦截的...

  • 身体发出的信号

    由于胃的不舒服,恶心想吐,胃胀吃不下饭,情绪稍许低落,2021年8月底去罗湖人民医院做了胃镜,检测出是浅表性慢性胃...

  • 身体发出信号

    昨天早上五公里慢跑,上午没课就在家一小时瑜伽。爸筠筠送走之后开始收拾厨房。总之,一上午精力充沛地干了好多活!中午给...

网友评论

      本文标题:一个整数发出的SOS信号

      本文链接:https://www.haomeiwen.com/subject/pvzfjttx.html