Morse Deco – RX mensaje morse/Python

Decodifica en python desde el puerto serial los valores del pin del receptor descrito en: Morse Codec – TxRx Inalámbrico 433Mhz ASK/OOK

Se recibe en el puerto serial la señal OOK equivalente al mensaje morse de «SOS».

La lectura del puerto serial continua de lo presentado en Serial – Lectura datos se obtienen los valores entre [0,1023]

El resultado se convierte a símbolos morse ' .-' contando las veces que cada valor se repite «Alto»(1) o «Bajo»(0). Se toma como referencia el ancho de 15 para un simbolo, pues el transmisor usa una DURACION =100. Si se modifican éstos valores, se deben ajustar.

1016 15
 --- ...  ...
0 63
 --- ...  ... 
1016 47
 --- ...  ... -
0 32
 --- ...  ... -
1020 47
 --- ...  ... --
0 31
 --- ...  ... --
1019 47
 --- ...  ... ---
0 63
 --- ...  ... --- 
1018 15
 --- ...  ... --- .
0 31
 --- ...  ... --- .
1016 15
 --- ...  ... --- ..
0 31
 --- ...  ... --- ..
1016 15
 --- ...  ... --- ...

las instrucciones en python

# Deco señal a morseñ
# generados desde arduino
# Continuación de: TxRx Inalambrico 433Mhz ASK/OOK
# http://blog.espol.edu.ec/edelros/2018/04/11/txrx-inalambrico-433mhz-askook/

import numpy as np
import matplotlib.pyplot as plt
import serial, time

# INGRESO
puerto = 'com5'
baudios = 9600
tolera = 100    # rango PIN analógico
ancho = 15      # del mensaje

# PROCEDIMIENTO
arduino = serial.Serial(puerto, baudios)
arduino.setDTR(False)
time.sleep(0.3)

# limpia buffer de datos anteriores
arduino.flushInput()  
arduino.setDTR()  
time.sleep(0.3)
print('\nEstado del puerto: ',arduino.isOpen())
print('Nombre del dispositivo conectado: ', arduino.name)
print('Dump de la configuración:\n ',arduino)
print('\n###############################################\n')


# Lectura de datos
antes = 0
cuenta = 0
simbolo = ''
morse_msg = ''

while True:
    # espera hasta recibir un dato
    while (arduino.inWaiting()==0):
        pass
    
    # lee binario del puerto serial
    lectura = arduino.readline()
    # binario a texto, elimina /r/n
    texto = lectura.decode().strip()
    valor = int(texto)
    
    # Busca duración de símbolo
    # valor repetido
    diferencia = np.abs(valor-antes)
    if (diferencia < tolera):
        cuenta = cuenta + 1
    
    else:
        print(antes,cuenta)
        # Revisa espacios
        if (antes<(0+tolera)):
            if (cuenta<(2*ancho+4)):
                simbolo = ''
            else:
                if (cuenta<(4*ancho+5)):
                    simbolo = ' '
                else:
                    simbolo = '  '
        
        # Revisa punto o raya        
        else:
            if (cuenta<(ancho+3)):
                simbolo = '.'
            else:
                simbolo = '-'
        cuenta = 0
        morse_msg = morse_msg + simbolo
        print(morse_msg)
        
        if len(morse_msg)>40:
            morse_msg = ''
            
    antes = valor
    
# Cerrar el puerto serial.
serial.Serial.close