From 295b15866268d4bf78a55e636027071f6ea1d902 Mon Sep 17 00:00:00 2001 From: Rob French Date: Sat, 19 Mar 2022 22:19:53 -0500 Subject: [PATCH] Cleaned up te code a little for the non-analog keyer. Needs to be tested. --- ubitx_20/ubitx.h | 5 +++-- ubitx_20/ubitx_20.ino | 13 +++++++------ ubitx_20/ubitx_keyer.ino | 38 +++++++++++++++++++------------------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/ubitx_20/ubitx.h b/ubitx_20/ubitx.h index 28c8ab0..40e12a7 100644 --- a/ubitx_20/ubitx.h +++ b/ubitx_20/ubitx.h @@ -223,8 +223,9 @@ extern byte I2C_LCD_SECOND_ADDRESS; //only using Dual LCD Mode #define ANALOG_SMETER (A7) //by KD8CEC #ifdef USE_ALTKEYER - #define DIGITAL_DOT (11) - #define DIGITAL_DASH (12) + #define DIGITAL_DOT (12) + #define DIGITAL_DASH (11) + #define DIGITAL_KEY (A3) #endif /** diff --git a/ubitx_20/ubitx_20.ino b/ubitx_20/ubitx_20.ino index a2bcae1..f4cf62c 100644 --- a/ubitx_20/ubitx_20.ino +++ b/ubitx_20/ubitx_20.ino @@ -1295,6 +1295,7 @@ void initPorts(){ #ifdef USE_ALTKEYER pinMode(DIGITAL_DOT, INPUT_PULLUP); pinMode(DIGITAL_DASH, INPUT_PULLUP); + if (DIGITAL_KEY != PTT) pinMode(DIGITAL_KEY, INPUT_PULLUP); #endif #ifdef USE_CUSTOM_LPF_FILTER @@ -1466,14 +1467,14 @@ void checkAutoSaveFreqMode() void loop(){ if (isCWAutoMode == 0){ //when CW AutoKey Mode, disable this process #ifdef USE_ALTKEYER - // when using the alternate keyer, don't check the PTT if we're in CW mode, because - // the PTT is also a straight key - if (!txCAT && (cwMode == 0)) - checkPTT(); -#else + // when using the alternate keyer, don't check the PTT if we're in CW mode--assuming the pin is the same as PTT + if (DIGITAL_KEY == PTT) { + if (!txCAT && (cwMode == 0)) + checkPTT(); + } else +#endif if (!txCAT) checkPTT(); -#endif checkButton(); } else diff --git a/ubitx_20/ubitx_keyer.ino b/ubitx_20/ubitx_keyer.ino index 3ddfbfd..d5c910b 100644 --- a/ubitx_20/ubitx_keyer.ino +++ b/ubitx_20/ubitx_keyer.ino @@ -38,21 +38,20 @@ char lastPaddle = 0; //reads the analog keyer pin and reports the paddle -byte getPaddle(){ +byte getPaddle() { #ifdef USE_ALTKEYER - // Alternate keyer... but it looks like getPaddle() ever actually gets used, so... - if (cwMode > 0) { - // PTT functions as straight key, but only if we're in CW mode - if (digitalRead(PTT) == LOW) { + // Alternate keyer + if ((DIGITAL_KEY != PTT) || ((DIGITAL_KEY == PTT) && (cwMode > 0))) { + if (digitalRead(DIGITAL_KEY) == LOW) { return PADDLE_STRAIGHT; } - } else { - // paddles work whether or not CW mode is actually selected - int rv = 0; - rv |= digitalRead(DIGITAL_DOT) == LOW ? 1 : 0; - rv |= digitalRead(DIGITAL_DASH) == LOW ? 2 : 0; - return rv; - } + } + // paddles work whether or not CW mode is actually selected + int rv = 0; + rv |= digitalRead(DIGITAL_DOT) == LOW ? PADDLE_DOT : 0; + rv |= digitalRead(DIGITAL_DASH) == LOW ? PADDLE_DASH : 0; + return rv; + #else int paddle = analogRead(ANALOG_KEYER); @@ -117,12 +116,14 @@ char update_PaddleLatch(byte isUpdateKeyState) { #ifdef USE_ALTKEYER // One big note... I have no idea how debounce does or doesn't affect this... but there is no debounce right now. It's conceivable // that the normal uBITX use of an analog input for this masks bouncing... - if (digitalRead(DIGITAL_DOT) == LOW) tmpKeyerControl |= DIT_L; + if ((digitalRead(DIGITAL_DASH) == LOW)) tmpKeyerControl |= DAH_L; if (Iambic_Key) { - if ((digitalRead(DIGITAL_DASH) == LOW)) tmpKeyerControl |= DAH_L; + if (digitalRead(DIGITAL_DOT) == LOW) tmpKeyerControl |= DIT_L; } else { // I really would like to have the PTT (during CW mode) just result in key down regardless of Iambic, but this doesn't do that yet... - if ((cwMode > 0) && (digitalRead(PTT) == LOW)) tmpKeyerControl |= DIT_L; + if ((DIGITAL_KEY != PTT) || ((DIGITAL_KEY == PTT) && (cwMode > 0))) { + if (digitalRead(DIGITAL_KEY) == LOW) tmpKeyerControl |= DAH_L; + } } #else int paddle = analogRead(ANALOG_KEYER); @@ -252,10 +253,9 @@ void cwKeyer(void){ Check_Cat(2); } //end of while - } - else{ + } else { while(1){ - if (update_PaddleLatch(0) == DIT_L) { + if (update_PaddleLatch(0) == DAH_L) { // if we are here, it is only because the key is pressed if (!inTx){ //DelayTime Option @@ -267,7 +267,7 @@ void cwKeyer(void){ } cwKeydown(); - while ( update_PaddleLatch(0) == DIT_L ) + while ( update_PaddleLatch(0) == DAH_L ) delay_background(1, 3); cwKeyUp();