文档章节

 newbit的发报机程序

shaoziyang
 shaoziyang
发布于 2017/09/14 01:49
字数 387
阅读 32
收藏 0

 newbit的发报机程序,需要两个newbit

from microbit import *
import radio
import music

radio.on()
radio.reset()

#Customise these settings for tx, pwr, channel and speed.
radio.config(power=7)
radio.config(channel=98)
WPM = 15
txenabled = True #in case you want to practice without sending
sidetone = 550

dotlength = int( 60000 / ( WPM * 50 ) )
dashlength = dotlength * 3
interelement = dotlength
interletter = dotlength * 2
interword = dotlength * 7
DOT_THRESHOLD = dotlength * 2
DASH_THRESHOLD = dotlength * 5
WORD_THRESHOLD = dotlength * 7

DOT = Image("00000:00000:00900:00000:00000")
DASH = Image("00000:00000:09990:00000:00000")             
ANT = Image("90909:09990:00900:00900:00900")        

morse = {
    "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":"----.",
    ".":".-.-.",
    ",":"--..--",
    "/":"-..-.",
    "?":"..--.."
    }
# reverse dict.
decodemorse = {v: k for k, v in morse.items()}

# convert string to cw
def EncodeMorse(message):
    m = message.upper()
    enc = ""
    for c in m:
        enc = enc + morse.get(c," ")
        if morse.get(c," ") != " ":
            enc = enc + " "
    return enc
    
# function to flash and play cw
def FlashMorse(pattern):
   for c in pattern:
       if c == ".":
           display.show(DOT)
           pin12.write_digital(1)
           music.pitch(sidetone, dotlength)
           display.clear()
           pin12.write_digital(0)
           sleep(interelement)
       elif c == "-":
           display.show(DASH)
           pin12.write_digital(1)
           music.pitch(sidetone, dashlength)
           display.clear()
           pin12.write_digital(0)
           sleep(interelement)
       elif c == " ":
           sleep(interletter)
   return


def ReceiveCW():     
    display.show(ANT)
    message = ''
    started = running_time()
    while True:
        waiting = running_time() - started
        received = radio.receive()
        if received:
            FlashMorse(EncodeMorse(received))
            message += received
        if button_b.is_pressed():
            return # breakin to immediate keying
        #if pin2.is_touched():
        #    return # breakin to immediate keying
        if button_a.was_pressed():
            display.scroll(message) # nb blocks receive while showing...
            message = ''
        if waiting > WORD_THRESHOLD * 2:
            display.show(ANT)
        if len(message) > 15: #keep message buffer short...
            message = message[1:16]
        if accelerometer.was_gesture("shake"):
            display.scroll("CW TRX by M0RVJ")
            
def Keyer():
    buffer = ''
    message = ''
    started = running_time()
    while True:        
            waited = running_time() - started
            key_down_time = None
            while button_b.is_pressed(): ## button B keying
                if not key_down_time:
                    key_down_time = running_time()
                music.pitch(sidetone, -1, pin0, False)
                pin12.write_digital(1)
                while True:
                    if not button_b.is_pressed():
                        music.stop()
                        pin12.write_digital(0)
                        break

            key_up_time = running_time()
            if key_down_time:
                duration = key_up_time - key_down_time
                if duration < DOT_THRESHOLD:
                    buffer += '.'
                    display.show(DOT)
                elif duration:
                    buffer += '-'
                    display.show(DASH)
                started = running_time()
            elif len(buffer) > 0 and waited > DASH_THRESHOLD:
                display.clear()
                character = decodemorse.get(buffer, '?')
                buffer = ''
                display.show(character)
                if txenabled:
                    radio.send(character)
                message += character
            if waited > WORD_THRESHOLD * 2:
                return
                
while True:
    Keyer()
    ReceiveCW()
    

 

© 著作权归作者所有

共有 人打赏支持
shaoziyang
粉丝 13
博文 76
码字总数 25946
作品 0
武汉
程序员
私信 提问
Ruby 和 Python 分析器是如何工作的?

原文出处:Julia Evans 译文出处:开源中国 你好! 我作为一名编写Ruby profiler的先驱,我想对现有的Ruby和Python profiler如何工作进行一次调查。 这也有助于回答很多人的问题:“你怎么写...

Julia Evans
2017/12/24
0
0
Orchard Core一分钟搭建ASP.NET Core CMS

Orchard Core 是Orchard CMS的ASP.NET Core版本。Orchard Core是全新一代的ASP.NET Core CMS。 官方文档介绍:src="http://orchardcore.readthedocs.io/en/latest/">http://orchardcore.rea......

CSharpKit
2017/12/21
0
0
为什么面向对象编程是有用的?(以一个角色扮演游戏为例)

本文由伯乐在线 -Janzou 翻译,艾凌风 校稿。未经许可,禁止转载! 英文出处:inventwithpython。欢迎加入翻译组。 本文面向的是那些刚刚接触编程,可能已经听说过”面向对象编程”,”OOP”...

伯乐在线
2014/12/31
0
0
Python中异步协程的使用方法介绍

1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞。比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后...

崔庆才
2018/07/06
0
0
每天一个 Linux 命令(58): telnet 命令

原文出处:peida telnet命令通常用来远程登录。telnet程序是基于TELNET协议的远程登录客户端程序。Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户...

peida
2017/02/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
30分钟前
2
0
如何嵌入 HTML 到 iPython notebook的输出

如何嵌入 HTML 到 iPython notebook的输出 iPython notebook中可以嵌入 HTML,也适用于JupyterHub和JupyterLab环境。不仅可以显示常用的HTML标签文本,甚至可以嵌入脚本交互操作和Frame分隔框...

openthings
57分钟前
1
0
四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部