# PICO-Keyer zum Ansteuern der Fernsteuersoftware für IC705 # DL1YAR November/Dezember 2022 # circuitpython-raspberry_pi_pico-de_DE-8.0.0-alpha.1.uf2 # Punktspeicher hinzugefügt Dezember 2022 # klassische ETM 6.1.2023 # Vband-Keyer 10.1.2023 # Revers-Paddle ohne Speicher 12.1.2 es te st 023 auswahl am Jumper GPIO15 # Junkers-Mode am 13.1.23 = Junker meets Internett # cir_CwKeyer_HID-PKTsp_Multi.py # Textspeicher 10.August 23 # Textspeicherloop, Dauerton und Rufzeichenschleife 18.8.23 # Textspeicer abbrechen am 13.3.24 Loop Dauerton auskommentiert # Keyer hat Probleme mit der Stromversorgung bei USB_HID # Softwar ergänzt am 23.4.24 # PiPicoKeyer_April24.py # test 5 text1 = "cqcq de dl1yar dl1yar cq de dl1yar pse k " text2 = "my name is winni winni qth recklinghausen nr essen dok n18 " text3 = "cqwna cqwna de dl1yar dl1yar cqwna de dl1yar pse k" text4 = "ur rst 599n18 5nnn18 k" call = " dl1yar " # rufzeichen wichtig hinten ein space! import board import digitalio import time import usb_hid import analogio from analogio import AnalogIn from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode #from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS kbd = Keyboard(usb_hid.devices) # Anschlüsse PKT = digitalio.DigitalInOut(board.GP15) # Paddle Spitze PKT.switch_to_input(pull=digitalio.Pull.UP) STR = digitalio.DigitalInOut(board.GP14) # Paddle Ring STR.switch_to_input(pull=digitalio.Pull.UP) PAD_rev = digitalio.DigitalInOut(board.GP13) # Punkt-Strich tauschen PAD_rev.switch_to_input(pull=digitalio.Pull.UP) ETM = digitalio.DigitalInOut(board.GP9) # Klassische SquezzeTaste ETM.switch_to_input(pull=digitalio.Pull.UP) Vband = digitalio.DigitalInOut(board.GP8) # Klassische SquezzeTaste Vband.switch_to_input(pull=digitalio.Pull.UP) # im viruellen InternettQSO Junkers = digitalio.DigitalInOut(board.GP7) # Klassische Junkerstaste Junkers.switch_to_input(pull=digitalio.Pull.UP) # im viruellen InternettQSO OnBoardLed = digitalio.DigitalInOut(board.LED) # onboard zum testenCw zum OnBoardLed OnBoardLed.direction = digitalio.Direction.OUTPUT # onboard zum testenCw zum OnBoardLed Cw_Tx =digitalio.DigitalInOut(board.GP12) #Transceiver Cw_Tx.direction = digitalio.Direction.OUTPUT # M_Ton = digitalio.DigitalInOut(board.GP16) # Mithoertonausgang M_Ton.direction = digitalio.Direction.OUTPUT speed_in = AnalogIn(board.A0) #----------------- #----------------------- # Speichertxte als Endlosschleife, Wiederholung nach Zeilenende # # Beendigung durch Paddlebenutzung # Text1 7.August 23 TEXT1 = digitalio.DigitalInOut(board.GP5) # Texttaster1 TEXT1.switch_to_input(pull=digitalio.Pull.UP) TEXT2 = digitalio.DigitalInOut(board.GP4) # Texttaster2 TEXT2.switch_to_input(pull=digitalio.Pull.UP) TEXT3 = digitalio.DigitalInOut(board.GP3) # Texttaster3 TEXT3.switch_to_input(pull=digitalio.Pull.UP) TEXT4 = digitalio.DigitalInOut(board.GP2) # Texttaster4 TEXT4.switch_to_input(pull=digitalio.Pull.UP) n_cw = 0 #eventuell aendern CW = 1 #eventuell aendern PKT_m = 1 #Punktmerker STR_m = 1 #Strichmerker Z_z = 0 #Zeichenzaehler Cod = 0xff #Codemuster Zp_a = 0 #Pausenzaehler speed = 22 SPACE = 0 M_Ton_m = 0 #Merker Mithoerton M_Ton_d = 0 #Dummy Mithöerton M_Loop = 0 #fuer Dauerschleife Ton = 0 def Woab(): #Wortabstand global Zp_a,SPACE Pause() Zp_a +=1 if (Zp_a >7): #print(' ') kbd.send(Keycode.SPACE) SPACE = 0 Zp_a =0 def Bu_a(): #Buchstabenerkennung global Z_z,Cod,Pkt_m,Zp_a Pause() Zp_a = Zp_a +1 #-##print('*Code ', Cod,' Zeich ',Z_z,' Zp ', Zp_a,) if Zp_a == 3: Cod =(Cod &0xFF) #Begrenzung auf 8Bit #-##print('Bin ', bin(Cod)) #Begrenzung auf 8Bit #-##print('Code ', Cod,' Zeich ',Z_z,' Zp ', Zp_a,) if (Cod == 2 ) and (Z_z == 2 ): print('A') kbd.send(Keycode.A) elif (Cod == 1) and (Z_z == 4 ): print('B') kbd.send(Keycode.B) elif (Cod == 5) and (Z_z == 4 ): print('C') kbd.send(Keycode.C) elif (Cod == 1) and (Z_z == 3 ): print('D') kbd.send(Keycode.D) elif (Cod == 0) and (Z_z == 1 ): print('E') kbd.send(Keycode.E) elif (Cod == 4) and (Z_z == 4 ): print('F') kbd.send(Keycode.F) elif (Cod == 3) and (Z_z == 3 ): #print('G') kbd.send(Keycode.G) elif (Cod == 0) and (Z_z == 4 ): print('H') kbd.send(Keycode.H) elif (Cod == 0) and (Z_z == 2 ): print('I') kbd.send(Keycode.I) elif (Cod == 14) and (Z_z == 4 ): print('J') kbd.send(Keycode.J) elif (Cod == 5) and (Z_z == 3 ): print('K') kbd.send(Keycode.K) elif (Cod == 2) and (Z_z == 4 ): print('L') kbd.send(Keycode.L) elif (Cod == 3) and (Z_z == 2 ): print('M') kbd.send(Keycode.M) elif (Cod == 1) and (Z_z == 2 ): print('N') kbd.send(Keycode.N) elif (Cod == 7) and (Z_z == 3 ): print('O') kbd.send(Keycode.O) elif (Cod == 6) and (Z_z == 4 ): print('P') kbd.send(Keycode.P) elif (Cod == 11) and (Z_z == 4 ): print('Q') kbd.send(Keycode.Q) elif (Cod == 2) and (Z_z == 3 ): print('R') kbd.send(Keycode.R) elif (Cod == 0) and (Z_z == 3 ): print('S') kbd.send(Keycode.S) elif (Cod == 1) and (Z_z == 1 ): print('T') kbd.send(Keycode.T) elif (Cod == 4) and (Z_z == 3 ): print('U') kbd.send(Keycode.U) elif (Cod == 8) and (Z_z == 4 ): print('V') kbd.send(Keycode.V) elif (Cod == 6) and (Z_z == 3 ): print('W') kbd.send(Keycode.W) elif (Cod == 9) and (Z_z == 4 ): print('X') kbd.send(Keycode.X) elif (Cod == 13) and (Z_z == 4 ): print('Y') kbd.send(Keycode.Z) elif (Cod == 3) and (Z_z == 4 ): print('Z') kbd.send(Keycode.Y) elif (Cod == 30) and (Z_z == 5 ): print('1') kbd.send(Keycode.ONE) elif (Cod == 28) and (Z_z == 5 ): print('2') kbd.send(Keycode.TWO) elif (Cod == 24) and (Z_z == 5 ): print('3') kbd.send(Keycode.THREE) elif (Cod == 16) and (Z_z == 5 ): print('4') kbd.send(Keycode.FOUR) elif (Cod == 0) and (Z_z == 5 ): print('5') kbd.send(Keycode.FIVE) elif (Cod == 1) and (Z_z == 5 ): print('6') kbd.send(Keycode.SIX) elif (Cod == 3) and (Z_z == 5 ):# print('7') kbd.send(Keycode.SEVEN) elif (Cod == 7) and (Z_z == 5 ):# print('8') kbd.send(Keycode.EIGHT) elif (Cod == 15) and (Z_z == 5 ):# print('9') kbd.send(Keycode.NINE) elif (Cod == 31) and (Z_z == 5 ): print('0') kbd.send(Keycode.ZERO) elif (Cod == 9) and (Z_z == 5 ): print('/') kbd.send(Keycode.SHIFT,Keycode.SEVEN) elif (Cod == 42) and (Z_z == 6 ): print('.') kbd.send(Keycode.PERIOD) elif (Cod == 51) and (Z_z == 6 ): print(',') kbd.send(Keycode.COMMA) elif (Cod == 12) and (Z_z == 6 ): print('?') kbd.send(Keycode.SHIFT,Keycode.MINUS)# ? elif (Cod == 14) and (Z_z == 5 ): print(';') kbd.send(Keycode.SHIFT,Keycode.COMMA)# ; elif (Cod == 29) and (Z_z == 5 ): print('!') kbd.send(Keycode.SHIFT,Keycode.ONE) # ! elif (Cod == 20) and (Z_z == 6 ): print('(') kbd.send(Keycode.SHIFT,Keycode.NINE) #( elif (Cod == 45) and (Z_z == 6 ): print(')') kbd.send(Keycode.SHIFT,Keycode.ZERO) #) elif (Cod == 7) and (Z_z == 6 ): print(':') kbd.send(Keycode.SHIFT,Keycode.PERIOD)# : elif (Cod == 17) and (Z_z == 5 ): print('=') kbd.send(Keycode.SHIFT,Keycode.ZERO) elif (Cod == 1) and (Z_z == 5 ): print('+') kbd.send(Keycode.PLUS) elif (Cod == 33) and (Z_z == 6 ): print('-') ##kbd.send(Keycode.SHIFT,Keycode.FORWARD_SLASH)# - kbd.send(Keycode.FORWARD_SLASH)# elif (Cod == 18) and (Z_z == 6 ): print('"') kbd.send(Keycode.SHIFT,Keycode.TWO)# " elif (Cod == 18) and (Z_z == 5 ): print('ret') #pspps kbd.send(Keycode.RETURN )#Enter Z_z = 0 Cod = 0 #Codemuster Pause() Zp_a = Zp_a +1 return def Pause(): global speed,Zp_a,Ton,M_Ton_m speed = int((speed_in.value /180)) #speed = int((speed_in.value /350)) while speed > 0: time.sleep(0.00072) if (M_Ton_m >0) : if Ton == 1: Ton = 0 else : Ton = 1 M_Ton.value = Ton speed -=1 Zp_a +=1 def Punkt(): #OnBoardLed.value(CW) global Z_z,Cod,PKT_m,Zp_a,SPACE,M_Ton_m OnBoardLed.value = True #if (ETM.value == False): ##ergaenzt 23.04.24 # Cw_Tx.value =True ##ergaenzt 23.04.24 Cw_Tx.value =True ##ergaenzt 23.04.24 if (Vband.value == False): kbd.press(Keycode.LEFT_CONTROL) M_Ton_m = 1 Cod = Cod & ~(1 << Z_z) #Bit loeschen #-##print('Punkt ') Z_z +=1 Pause() #OnBoardLed.value(n_cw) OnBoardLed.value = False Cw_Tx.value = False if (Vband.value == False): kbd.release_all() M_Ton_m = 0 Pause() PKT_m = 1 Zp_a = 1 #Pausenzaehler SPACE =1 def Strich(): global Z_z,Cod,PKT_m,Zp_a,SPACE,M_Ton_m OnBoardLed.value = True #if (ETM.value == False): ##ergaenzt 23.04.24 # Cw_Tx.value = True ##ergaenzt 23.04.24 Cw_Tx.value =True ##ergaenzt 23.04.24 if (Vband.value == False): kbd.press(Keycode.LEFT_CONTROL) M_Ton_m = 1 Pause() if (PKT.value == False and PAD_rev.value == True ): PKT_m = 0 #Punktspeicher Pause() if (PKT.value == False and PAD_rev.value == True ): PKT_m = 0 Pause() Cod = Cod |(1 << Z_z) # Bit setzen #-##print('Strich ') Z_z +=1 OnBoardLed.value = False Cw_Tx.value = False if (Vband.value == False): kbd.release_all() M_Ton_m = 0 Pause() Zp_a = 1 #Pausenzaehler SPACE = 1 def Key(): #Junkers meets WWW global Ton OnBoardLed.value = False kbd.release_all() while True: if PKT.value == False : OnBoardLed.value = True kbd.press(Keycode.LEFT_CONTROL) if Ton == 1: Ton = 0 M_Ton.value = Ton time.sleep(0.001072) elif Ton == 0: Ton = 1 M_Ton.value = Ton time.sleep(0.001072) else: OnBoardLed.value = False kbd.release_all() def Cw_coder(zei): if zei == 'a': kbd.send(Keycode.A) Punkt();Strich();Pause();Pause() elif zei =='b': kbd.send(Keycode.B) Strich();Punkt();Punkt();Punkt();Pause();Pause() elif zei =='c': kbd.send(Keycode.C) Strich();Punkt();Strich();Punkt();Pause();Pause() elif zei =='d': kbd.send(Keycode.D) Strich();Punkt();Punkt();Pause();Pause() elif zei =='e': kbd.send(Keycode.E) Punkt();Pause();Pause() elif zei =='f': kbd.send(Keycode.F) Punkt();Punkt();Strich();Punkt();Pause();Pause() elif zei == 'g': kbd.send(Keycode.G) Strich();Strich();Punkt();Pause();Pause() elif zei == 'h': kbd.send(Keycode.H) Punkt();Punkt();Punkt();Punkt();Pause();Pause() elif zei == 'i': kbd.send(Keycode.I) Punkt();Punkt();Pause();Pause() elif zei == 'j': kbd.send(Keycode.J) Punkt();Strich();Strich();Strich();Pause();Pause() elif zei == 'k': kbd.send(Keycode.K) Strich();Punkt();Strich();Pause();Pause() elif zei == 'l': kbd.send(Keycode.L) Punkt();Strich();Punkt();Punkt();Pause();Pause() elif zei == 'm': kbd.send(Keycode.M) Strich();Strich();Pause();Pause() elif zei == 'n': kbd.send(Keycode.N) Strich();Punkt();Pause();Pause() elif zei == 'o': kbd.send(Keycode.O) Strich();Strich();Strich();Pause();Pause() elif zei == 'p': kbd.send(Keycode.P) Punkt();Strich();Strich();Punkt();Pause();Pause() elif zei == 'q': kbd.send(Keycode.Q) Strich();Strich();Punkt();Strich();Pause();Pause() elif zei == 'r': kbd.send(Keycode.R) Punkt();Strich();Punkt();Pause();Pause() elif zei == 's': kbd.send(Keycode.S) Punkt();Punkt();Punkt();Pause();Pause() elif zei == 't': kbd.send(Keycode.T) Strich();Pause();Pause() elif zei == 'u': kbd.send(Keycode.U) Punkt();Punkt();Strich();Pause();Pause() elif zei == 'v': kbd.send(Keycode.V) Punkt();Punkt();Punkt();Strich();Pause();Pause() elif zei == 'w': kbd.send(Keycode.W) Punkt();Strich();Strich();Pause();Pause() elif zei == 'x': kbd.send(Keycode.X) Strich();Punkt();Punkt();Strich();Pause();Pause() elif zei == 'y': kbd.send(Keycode.Z) Strich();Punkt();Strich();Strich();Pause();Pause() elif zei == 'z': kbd.send(Keycode.Z) Strich();Strich();Punkt();Punkt();Pause();Pause() elif zei == 'z': kbd.send(Keycode.Y) Strich();Strich();Punkt();Punkt();Pause();Pause() elif zei == '1': kbd.send(Keycode.ONE) Punkt();Strich();Strich();Strich();Strich();Pause();Pause() elif zei == '2': kbd.send(Keycode.TWO) Punkt();Punkt();Strich();Strich();Strich();Pause();Pause() elif zei == '3': kbd.send(Keycode.THREE) Punkt();Punkt();Punkt();Strich();Strich();Pause();Pause() elif zei == '4': kbd.send(Keycode.FOUR) Punkt();Punkt();Punkt();Punkt();Strich();Pause();Pause() elif zei == '5': kbd.send(Keycode.FIVE) Punkt();Punkt();Punkt();Punkt();Punkt();Pause();Pause() elif zei == '6': kbd.send(Keycode.SIX) Strich();Punkt();Punkt();Punkt();Punkt();Pause();Pause() elif zei == '7': kbd.send(Keycode.SEVEN) Strich();Strich();Punkt();Punkt();Punkt();Pause();Pause() elif zei == '8': kbd.send(Keycode.EIGHT) Strich();Strich();Strich();Punkt();Punkt();Pause();Pause() elif zei == '9': kbd.send(Keycode.NINE) Strich();Strich();Strich();Strich();Punkt();Pause();Pause() elif zei == '0': kbd.send(Keycode.ZERO) Strich();Strich();Strich();Strich();Strich();Pause();Pause() elif zei == '/': kbd.send(Keycode.SHIFT,Keycode.SEVEN) Strich();Punkt();Punkt();Strich();Punkt();Pause();Pause() elif zei =='.': kbd.send(Keycode.PERIOD) Strich();Punkt();Strich();Punkt();Strich();Punkt();Pause();Pause() elif zei == ',': kbd.send(Keycode.COMMA) Punkt();Punkt();Strich();Punkt();Punkt();Pause();Pause() elif zei == '?': kbd.send(Keycode.SHIFT,Keycode.MINUS) Punkt();Punkt();Strich();Strich();Punkt();Punkt();Pause();Pause() elif zei == ':': kbd.send(Keycode.SHIFT,Keycode.PERIOD) Strich();Strich();Strich();Punkt();Punkt();Punkt();Pause();Pause() elif zei == '/': kbd.send(Keycode.SHIFT,Keycode.SEVEN) Strich();Punkt();Punkt();Strich();Punkt();Pause();Pause() elif zei == '+': kbd.send(Keycode.PLUS) Punkt();Strich();Punkt();Strich();Punkt();Pause();Pause() elif zei == '-': kbd.send(Keycode.FORWARD_SLASH) Strich();Punkt();Punkt();Punkt();Punkt();Strich();Pause();Pause(); elif zei == '=': kbd.send(Keycode.SHIFT,Keycode.ZERO) Strich();Punkt();Punkt();Punkt();Strich();Pause();Pause(); elif zei == '(': kbd.send(Keycode.SHIFT,Keycode.NINE) Strich();Punkt();Strich();Strich();Punkt();Strich();Pause();Pause(); elif zei ==' ': kbd.send(Keycode.SPACE) Pause();Pause();Pause();Pause() def Strich_abstand(): for i in range (0,3): if (STR.value == True) and (PKT.value == True): i = 3 #print('Strichabstand') Pause();Pause();Pause();#Strichlänge def Textout(txt): for i in range(0,len(txt),1):#Textübergabe #print(txt[i]) #print(i) Cw_coder(txt[i]) #Zeichenzerlegung if (STR.value == False or PKT.value == False):#Ausgabe abbruch time.sleep(0.01) while (STR.value == False) or (PKT.value == False): time.sleep(0.01) break def Text_loop(txt): while (STR.value == False) or (PKT.value == False): Pause() while (STR.value == True) and (PKT.value == True): #print('Textloop') Textout(txt) Strich_abstand() Strich_abstand() Strich_abstand() Strich_abstand() Strich_abstand() def Call_loop(): while(STR.value == False): Pause() while (STR.value == False) and (PKT.value == False): print('Call') Textout(call) def Dauertraeger(): global M_Ton_m while (STR.value == False) or (PKT.value == False): M_Ton_m = 1 Cw_Tx.value =True Pause() while (STR.value == True) and (PKT.value == True): print('Dauertraeger') M_Ton_m = 1 Cw_Tx.value =True Pause() M_Ton_m = 0 Cw_Tx.value = False OnBoardLed.value = True time.sleep(1) OnBoardLed.value = False time.sleep(1) OnBoardLed.value = True time.sleep(0.51) #------------------------------- #------------------------------- while True: if Junkers.value == False: Key() if STR.value == False : if PAD_rev.value == False: Punkt() if PAD_rev.value == True: Strich() if (PKT.value == False or PKT_m == 0): if PAD_rev.value == False: Strich() if PAD_rev.value == True: Punkt() if (ETM.value == True and Vband.value == True):# Bu-decoder if (PKT.value and STR.value and (Z_z > 0)): Bu_a() if (PKT.value and STR.value and (SPACE >0)): Woab() if TEXT1.value == False: #grundfuktion Textout(text1) if TEXT2.value == False: Textout(text2) if TEXT3.value == False: Textout(text3) if TEXT4.value == False: Textout(text4) #if (TEXT1.value == False and STR.value == False) :#Achtung dreifachbelegung!!!!!! 3.Funktion # Dauertraeger() #if (TEXT1.value == False and PKT.value == False) :#Achtung dreifachbelegung!!!!!! 2-Funktion # Text_loop(text1)# CQ als Dauerschleife Abbruch mit Paddledruck #if (TEXT4.value == False and STR.value == False) :#Achtung dreifachbelegung!!!!!! 3.Funktion # Call_loop() #if TEXT4.value == False: # Textout(text4)