Iambic Modes fertig. StraightKey fertig.
In der nächsten Version testen, ob Drehencoder nicht besser über PinChangeInterrupt aufgerufen werden sollte.
Dieser Commit ist enthalten in:
Ursprung
463869f62f
Commit
ffeece7d9e
@ -85,8 +85,25 @@ void IntDisable(void)
|
|||||||
sreg_tmp = SREG;
|
sreg_tmp = SREG;
|
||||||
cli();
|
cli();
|
||||||
}
|
}
|
||||||
|
/** @brief Pin Change Interrupt abschalten
|
||||||
/** \brief EEPROM schreiben
|
* @param none
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
void DisablePinChangeIRQ(void)
|
||||||
|
{
|
||||||
|
cbi(PCICR,PCIE2);
|
||||||
|
}
|
||||||
|
/** @brief Pin Change Interrupt einschalten
|
||||||
|
* @param none
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
void EnablePinChangeIRQ(void)
|
||||||
|
{
|
||||||
|
sbi(PCICR,PCIE2);
|
||||||
|
}
|
||||||
|
/** @brief EEPROM schreiben
|
||||||
|
* @param none
|
||||||
|
* @return none
|
||||||
*/
|
*/
|
||||||
void WriteEEprom(void)
|
void WriteEEprom(void)
|
||||||
{
|
{
|
||||||
@ -365,85 +382,8 @@ void CheckStraightKey(void)
|
|||||||
*/
|
*/
|
||||||
void CheckPaddles(void)
|
void CheckPaddles(void)
|
||||||
{
|
{
|
||||||
static uint8_t LastAction = NOTHING;
|
|
||||||
|
|
||||||
CheckDitPaddle();
|
CheckDitPaddle();
|
||||||
CheckDahPaddle();
|
CheckDahPaddle();
|
||||||
|
|
||||||
if(bConfig.KeyerMode == ULTIMATIC)
|
|
||||||
{
|
|
||||||
switch(LastAction)
|
|
||||||
{
|
|
||||||
case DAH_DIT_ON:
|
|
||||||
if(DahBuffer) {
|
|
||||||
if(DitBuffer)
|
|
||||||
DitBuffer = 0;
|
|
||||||
else
|
|
||||||
LastAction = DAH_DIT_OFF;
|
|
||||||
} else {
|
|
||||||
if(DitBuffer)
|
|
||||||
LastAction = DIT_DAH_OFF;
|
|
||||||
else
|
|
||||||
LastAction = NOTHING;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DIT_DAH_ON:
|
|
||||||
if(DitBuffer) {
|
|
||||||
if(DahBuffer)
|
|
||||||
DahBuffer = 0;
|
|
||||||
else
|
|
||||||
LastAction = DIT_DAH_OFF;
|
|
||||||
} else {
|
|
||||||
if(DahBuffer)
|
|
||||||
LastAction = DAH_DIT_OFF;
|
|
||||||
else
|
|
||||||
LastAction = NOTHING;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DAH_DIT_OFF:
|
|
||||||
if(DitBuffer) {
|
|
||||||
if(DahBuffer)
|
|
||||||
{
|
|
||||||
LastAction = DIT_DAH_ON;
|
|
||||||
DahBuffer = 0;
|
|
||||||
} else {
|
|
||||||
LastAction = DIT_DAH_OFF;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(!DahBuffer)
|
|
||||||
LastAction = NOTHING;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DIT_DAH_OFF:
|
|
||||||
if(DahBuffer) {
|
|
||||||
if(DitBuffer)
|
|
||||||
{
|
|
||||||
LastAction = DAH_DIT_ON;
|
|
||||||
DitBuffer = 0;
|
|
||||||
} else {
|
|
||||||
LastAction = DAH_DIT_OFF;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(!DitBuffer)
|
|
||||||
LastAction = NOTHING;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NOTHING:
|
|
||||||
if((DitBuffer) && (!DahBuffer)) {
|
|
||||||
LastAction = NOTHING;
|
|
||||||
} else {
|
|
||||||
if((DahBuffer) && (!DitBuffer)) {
|
|
||||||
LastAction = DAH_DIT_OFF;
|
|
||||||
} else {
|
|
||||||
if((DitBuffer) && (DahBuffer)) {
|
|
||||||
LastAction = DIT_DAH_ON;
|
|
||||||
DahBuffer = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/** \brief CheckDitPaddle
|
/** \brief CheckDitPaddle
|
||||||
*
|
*
|
||||||
@ -460,7 +400,7 @@ void CheckDitPaddle(void)
|
|||||||
|
|
||||||
if(pinvalue == 0) // DitPaddle betätigt
|
if(pinvalue == 0) // DitPaddle betätigt
|
||||||
{
|
{
|
||||||
DitBuffer = 1;
|
bState.DitPressed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -477,146 +417,91 @@ void CheckDahPaddle(void)
|
|||||||
|
|
||||||
if(pinvalue == 0)
|
if(pinvalue == 0)
|
||||||
{
|
{
|
||||||
DahBuffer = 1;
|
bState.DahPressed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetRatio(uint8_t WPMCorrectFactor)
|
void SetRatio(uint8_t WPMCorrectFactor)
|
||||||
{
|
{
|
||||||
DitMillis = 1200 / WpM;
|
DitMillis = 1200 / WpM;
|
||||||
DahMillis = DitMillis * (float)(bConfig.Ratio/10);
|
DahMillis = DitMillis * (float)(bConfig.Ratio/10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Schleife für die Dauer eines Zeichenelements Dit oder Dah
|
/** @brief Symbol senden
|
||||||
*
|
* @param Dit = 1, wenn Symbol ein Punkt ist
|
||||||
* @param Len Anzahl der Symbole (in Dits)
|
|
||||||
* @return none
|
* @return none
|
||||||
*/
|
*/
|
||||||
void SymbolLoop(uint8_t Len)
|
void SendSymbol(uint8_t Dit)
|
||||||
{
|
{
|
||||||
volatile static uint16_t ticks; // lengths of elements + AddMilliSeconds in ms
|
volatile static uint16_t ticks; // Länge des Symbols
|
||||||
|
if(Dit)
|
||||||
ticks = DitMillis * Len; //
|
ticks = DitMillis;
|
||||||
t_elementlength = 0; // Reset Timer 0 variable
|
else
|
||||||
while(t_elementlength < ticks)
|
ticks = DahMillis;
|
||||||
{
|
t_elementlength = 0;
|
||||||
if(KeyerMode != ULTIMATIC)
|
TXKey(1);
|
||||||
{
|
DelayMilliSeconds(ticks);
|
||||||
if((KeyerMode == IAMBIC_A) && (!(PIND & (1<<LEFT_PADDLE))) && (!(PIND & (1<<RIGHT_PADDLE))))
|
TXKey(0);
|
||||||
{
|
DelayMilliSeconds(DitMillis);
|
||||||
IambicFlag = 1;
|
|
||||||
SerialWriteString("526:IambicFlag == 1\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(bState.SendStatus == SENDING_DIT)
|
|
||||||
{
|
|
||||||
CheckDahPaddle();
|
|
||||||
} else {
|
|
||||||
if(bState.SendStatus == SENDING_DAH)
|
|
||||||
{
|
|
||||||
CheckDitPaddle();
|
|
||||||
} else {
|
|
||||||
CheckDahPaddle();
|
|
||||||
CheckDitPaddle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(bState.SendStatus == SENDING_DIT)
|
|
||||||
{
|
|
||||||
CheckDahPaddle();
|
|
||||||
} else {
|
|
||||||
if(bState.SendStatus == SENDING_DAH)
|
|
||||||
{
|
|
||||||
CheckDitPaddle();
|
|
||||||
} else {
|
|
||||||
CheckDahPaddle();
|
|
||||||
CheckDitPaddle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Wenn Taste losgelassen, dann im KeyerMode IAMBIC_A das IambicFlag löschen
|
|
||||||
if((KeyerMode == IAMBIC_A) && (IambicFlag) && (PIND & (1<<LEFT_PADDLE)) && (PIND & (1<<RIGHT_PADDLE)))
|
|
||||||
{
|
|
||||||
IambicFlag = 0;
|
|
||||||
DitBuffer = 0;
|
|
||||||
DahBuffer = 0;
|
|
||||||
SerialWriteString("562:IambicFlag == 0\r\n");
|
|
||||||
}
|
|
||||||
if((bState.SendStatus == SENDING_DIT) || (bState.SendStatus == SENDING_DAH))
|
|
||||||
{
|
|
||||||
if(bConfig.Memory == 0)
|
|
||||||
{
|
|
||||||
DitBuffer = 0;
|
|
||||||
DahBuffer = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** void SendDit(uint8_t SendingType)
|
** void SendDit(uint8_t SendingType)
|
||||||
*/
|
*/
|
||||||
void SendDit(uint8_t SendingType)
|
void SendDit(void)
|
||||||
{
|
{
|
||||||
bState.SendStatus = SENDING_DIT;
|
bState.DitPressed = 0;
|
||||||
TXKey(1);
|
SendSymbol(DIT);
|
||||||
SymbolLoop(1);
|
bState.LastSymbolWasDit = 1;
|
||||||
TXKey(0);
|
|
||||||
SymbolLoop(1);
|
|
||||||
bState.SendStatus = NOTHING;
|
|
||||||
CheckPaddles();
|
|
||||||
}
|
}
|
||||||
/** \brief Send a dah
|
/** \brief Send a dah
|
||||||
** A Dah with weight = 50 has the length of 3 Dits.
|
** A Dah with weight = 50 has the length of 3 Dits.
|
||||||
*/
|
*/
|
||||||
void SendDah(uint8_t SendingType)
|
void SendDah(void)
|
||||||
{
|
{
|
||||||
bState.SendStatus = SENDING_DAH;
|
bState.DahPressed = 0;
|
||||||
TXKey(1);
|
SendSymbol(DAH);
|
||||||
SymbolLoop(3);
|
bState.LastSymbolWasDit = 0;
|
||||||
TXKey(0);
|
|
||||||
SymbolLoop(1);
|
|
||||||
bState.SendStatus = NOTHING;
|
|
||||||
CheckPaddles();
|
|
||||||
}
|
}
|
||||||
/** @brief Bearbeiten der Punkt- und Strichbuffer für Iambic Modes
|
|
||||||
*
|
void SendIambic(void)
|
||||||
* Bei Iambic A wird der Buffer gelöscht, bei Iambic B voher das
|
|
||||||
* gegensätzliche Zeichen ausgegeben.
|
|
||||||
* @param none
|
|
||||||
* @return none
|
|
||||||
*/
|
|
||||||
void DitDahBuffers(void)
|
|
||||||
{
|
{
|
||||||
if((bConfig.KeyerMode == IAMBIC_A) || (bConfig.KeyerMode == IAMBIC_B))
|
bState.DahPressed = 0;
|
||||||
|
bState.DitPressed = 0;
|
||||||
|
if(bState.LastSymbolWasDit)
|
||||||
{
|
{
|
||||||
// IAMBIC_A
|
SendDah();
|
||||||
if((bConfig.KeyerMode == IAMBIC_A) && (IambicFlag) && (PIND & (1<<LEFT_PADDLE)) && (PIND & (1<<RIGHT_PADDLE)))
|
if(bConfig.KeyerMode == IAMBIC_B && !bState.DahPressed && !bState.DitPressed)
|
||||||
{
|
{
|
||||||
IambicFlag = 0;
|
SendDit();
|
||||||
DitBuffer = 0;
|
|
||||||
DahBuffer = 0;
|
|
||||||
SerialWriteString("616:IambicFlag == 0\r\n");
|
|
||||||
} else {
|
} else {
|
||||||
// IAMBIC_B
|
if(bConfig.KeyerMode == ULTIMATIC)
|
||||||
if(DitBuffer)
|
|
||||||
{
|
{
|
||||||
DitBuffer = 0;
|
while(bState.DahPressed)
|
||||||
SendDit(MAN);
|
{
|
||||||
|
bState.DitPressed = 0;
|
||||||
|
bState.DahPressed = 0;
|
||||||
|
SendDah();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(DahBuffer)
|
}
|
||||||
|
} else {
|
||||||
|
SendDit();
|
||||||
|
if(bConfig.KeyerMode == IAMBIC_B && !bState.DitPressed && !bState.DahPressed)
|
||||||
|
{
|
||||||
|
SendDah();
|
||||||
|
} else {
|
||||||
|
if(bConfig.KeyerMode == ULTIMATIC)
|
||||||
{
|
{
|
||||||
DahBuffer = 0;
|
while(bState.DitPressed)
|
||||||
SendDah(MAN);
|
{
|
||||||
|
bState.DitPressed = 0;
|
||||||
|
bState.DahPressed = 0;
|
||||||
|
SendDit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(bConfig.KeyerMode == ULTIMATIC)
|
|
||||||
{
|
|
||||||
SerialWriteString("Ultimatic\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Set sidetone frequency
|
** Set sidetone frequency
|
||||||
*/
|
*/
|
||||||
@ -659,6 +544,7 @@ void SendChar(unsigned char c)
|
|||||||
switch(c)
|
switch(c)
|
||||||
{
|
{
|
||||||
// Buchstaben
|
// Buchstaben
|
||||||
|
/*
|
||||||
case 'A': SendDit(AUTO); SendDah(AUTO); break;
|
case 'A': SendDit(AUTO); SendDah(AUTO); break;
|
||||||
case 'B': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
|
case 'B': SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDit(AUTO); break;
|
||||||
case 'C': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
|
case 'C': SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); break;
|
||||||
@ -703,6 +589,7 @@ void SendChar(unsigned char c)
|
|||||||
case ',': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
|
case ',': SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); break;
|
||||||
case '?': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
|
case '?': SendDit(AUTO); SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDit(AUTO); break;
|
||||||
case '@': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); break;
|
case '@': SendDit(AUTO); SendDah(AUTO); SendDah(AUTO); SendDit(AUTO); SendDah(AUTO); SendDit(AUTO); break;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,10 @@ uint8_t ReadKeyPin(uint8_t pin);
|
|||||||
void CheckPaddles(void);
|
void CheckPaddles(void);
|
||||||
void SetRatio(uint8_t WpMCorrectFactor);
|
void SetRatio(uint8_t WpMCorrectFactor);
|
||||||
void DitDahBuffers(void);
|
void DitDahBuffers(void);
|
||||||
|
|
||||||
|
void SendDit(void);
|
||||||
|
void SendDah(void);
|
||||||
|
void SendIambic(void);
|
||||||
// Sidetone
|
// Sidetone
|
||||||
void SideToneOn(void);
|
void SideToneOn(void);
|
||||||
void SideToneOff(void);
|
void SideToneOff(void);
|
||||||
@ -30,6 +34,8 @@ void BeepBoop(void);
|
|||||||
// Interrupt
|
// Interrupt
|
||||||
void IntDisable(void);
|
void IntDisable(void);
|
||||||
void IntEnable(void);
|
void IntEnable(void);
|
||||||
|
void DisablePinChangeIRQ(void);
|
||||||
|
void EnablePinChangeIRQ(void);
|
||||||
// EEPROM
|
// EEPROM
|
||||||
void WriteEEprom(void);
|
void WriteEEprom(void);
|
||||||
void ReadEEprom(void);
|
void ReadEEprom(void);
|
||||||
|
@ -96,6 +96,8 @@
|
|||||||
// States
|
// States
|
||||||
#define ON 1
|
#define ON 1
|
||||||
#define OFF 0
|
#define OFF 0
|
||||||
|
#define DIT 1
|
||||||
|
#define DAH 0
|
||||||
#define NO_KEY_PRESSED 0
|
#define NO_KEY_PRESSED 0
|
||||||
#define KEY_PRESSED_DEBOUNCE 1
|
#define KEY_PRESSED_DEBOUNCE 1
|
||||||
#define KEY_PRESSED 2
|
#define KEY_PRESSED 2
|
||||||
@ -130,7 +132,10 @@ struct State
|
|||||||
uint8_t WriteEEprom: 1; // nicht gespeicherte EEprom Werte
|
uint8_t WriteEEprom: 1; // nicht gespeicherte EEprom Werte
|
||||||
uint8_t SidetoneOff: 1; // Mithörton an oder aus
|
uint8_t SidetoneOff: 1; // Mithörton an oder aus
|
||||||
uint8_t SidetoneEnabled: 1; // Mithörton ein- oder ausgeschaltet
|
uint8_t SidetoneEnabled: 1; // Mithörton ein- oder ausgeschaltet
|
||||||
uint8_t SendStatus; //
|
uint8_t SendStatus; // Status, ob Symbol gesendet wird
|
||||||
|
uint8_t LastSymbolWasDit: 1; // letztes Symbol war ein Punkt
|
||||||
|
uint8_t DitPressed: 1; // Dit Hebel betätigt
|
||||||
|
uint8_t DahPressed: 1; // Dah Hebel betätigt
|
||||||
uint8_t KeyState:1; //
|
uint8_t KeyState:1; //
|
||||||
uint8_t KeyTX:1;
|
uint8_t KeyTX:1;
|
||||||
};
|
};
|
||||||
@ -165,6 +170,8 @@ struct Config
|
|||||||
uint8_t RiseTimeCounter; // Anzahl Sinusschwingungen für den Anstieg
|
uint8_t RiseTimeCounter; // Anzahl Sinusschwingungen für den Anstieg
|
||||||
uint8_t DebounceTime; // Entprellzeit für Straight Key Eingang
|
uint8_t DebounceTime; // Entprellzeit für Straight Key Eingang
|
||||||
};
|
};
|
||||||
|
// Pin Change Interrupt Merker für Port
|
||||||
|
uint8_t LastPINDState;
|
||||||
|
|
||||||
// Drehencoder
|
// Drehencoder
|
||||||
volatile uint8_t EncoderTimer; // 10ms Timer for Encoder
|
volatile uint8_t EncoderTimer; // 10ms Timer for Encoder
|
||||||
|
@ -161,7 +161,7 @@ void Init()
|
|||||||
// PD4 - StraightKey - PCINT20 - Pin Change Interrupt 20
|
// PD4 - StraightKey - PCINT20 - Pin Change Interrupt 20
|
||||||
// PD3 - Right Paddle - PCINT19 - Pin Change Interrupt 19
|
// PD3 - Right Paddle - PCINT19 - Pin Change Interrupt 19
|
||||||
// PD2 - Left Paddle - PCINT18 - Pin Change Interrupt 18
|
// PD2 - Left Paddle - PCINT18 - Pin Change Interrupt 18
|
||||||
// sbi(PCICR,PCIE2);
|
sbi(PCICR,PCIE2);
|
||||||
// sbi(PCMSK2,PCINT18);
|
// sbi(PCMSK2,PCINT18);
|
||||||
// sbi(PCMSK2,PCINT19);
|
// sbi(PCMSK2,PCINT19);
|
||||||
// sbi(PCMSK2,PCINT20);
|
// sbi(PCMSK2,PCINT20);
|
||||||
@ -315,6 +315,14 @@ ISR(USART_RX_vect)
|
|||||||
data = UDR0;
|
data = UDR0;
|
||||||
SerialWriteChar(data);
|
SerialWriteChar(data);
|
||||||
}
|
}
|
||||||
|
/** @brief Pin Change Interrupt
|
||||||
|
* @param none
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
ISR(PCINT2_vect)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
/** @brief Initialisierung bei Reset und Neustart
|
/** @brief Initialisierung bei Reset und Neustart
|
||||||
* @param none
|
* @param none
|
||||||
* @return none
|
* @return none
|
||||||
@ -329,7 +337,7 @@ void ReStart(void)
|
|||||||
Init();
|
Init();
|
||||||
DisplayVersion();
|
DisplayVersion();
|
||||||
ReadEEprom();
|
ReadEEprom();
|
||||||
WpM = bConfig.WpM;
|
WpM = 12; // 12; // 12; // 12; // 12; // 12; // 12; // 12; // 12; // 12; // 12; // 12; // bConfig.WpM;
|
||||||
EncoderPos = bConfig.WpM;
|
EncoderPos = bConfig.WpM;
|
||||||
EncoderWrite(bConfig.WpM);
|
EncoderWrite(bConfig.WpM);
|
||||||
EncoderPosConfig = 1;
|
EncoderPosConfig = 1;
|
||||||
@ -343,6 +351,7 @@ void ReStart(void)
|
|||||||
SidetoneEnable();
|
SidetoneEnable();
|
||||||
else
|
else
|
||||||
SidetoneDisable();
|
SidetoneDisable();
|
||||||
|
LastPINDState = 0xff;
|
||||||
}
|
}
|
||||||
/** @brief main()
|
/** @brief main()
|
||||||
* @param none
|
* @param none
|
||||||
@ -375,7 +384,16 @@ int main(void)
|
|||||||
UpdateDisplay();
|
UpdateDisplay();
|
||||||
CheckStraightKey();
|
CheckStraightKey();
|
||||||
CheckPaddles();
|
CheckPaddles();
|
||||||
DitDahBuffers();
|
|
||||||
|
if(bState.DitPressed || bState.DahPressed)
|
||||||
|
{
|
||||||
|
if(bState.DitPressed && !bState.DahPressed)
|
||||||
|
SendDit();
|
||||||
|
else if(bState.DahPressed && !bState.DitPressed)
|
||||||
|
SendDah();
|
||||||
|
else if(bState.DahPressed && bState.DitPressed)
|
||||||
|
SendIambic();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,4 +25,7 @@ extern void CheckDitPaddle(void);
|
|||||||
extern void CheckStraightKey(void);
|
extern void CheckStraightKey(void);
|
||||||
extern void SetFrequency(uint16_t f);
|
extern void SetFrequency(uint16_t f);
|
||||||
extern void DitDahBuffers(void);
|
extern void DitDahBuffers(void);
|
||||||
|
|
||||||
|
extern void DahPaddle(void);
|
||||||
|
extern void DitPaddle(void);
|
||||||
#endif // BJ-KEYER_H_INCLUDED
|
#endif // BJ-KEYER_H_INCLUDED
|
||||||
|
Laden…
x
In neuem Issue referenzieren
Einen Benutzer sperren