forked from magnum88/BaliseHF
119 lines
3.6 KiB
C
119 lines
3.6 KiB
C
|
|
/*
|
||
|
|
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||
|
|
* Click nbfs://nbhost/SystemFileSystem/Templates/cppFiles/file.h to edit this template
|
||
|
|
*/
|
||
|
|
|
||
|
|
/*
|
||
|
|
* File: Iambic.h
|
||
|
|
* Author: ale
|
||
|
|
*
|
||
|
|
* Created on 9 avril 2026, 18:42
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef IAMBIC_H
|
||
|
|
#define IAMBIC_H
|
||
|
|
|
||
|
|
#include <Arduino.h>
|
||
|
|
#include <Modulation.h>
|
||
|
|
#include "Afficheur.h"
|
||
|
|
#include <Keyboard.h>
|
||
|
|
#include "Enigma.h"
|
||
|
|
|
||
|
|
|
||
|
|
#define VBAND_LEFT '['
|
||
|
|
#define VBAND_RIGHT ']'
|
||
|
|
|
||
|
|
|
||
|
|
// Keyer define
|
||
|
|
#define SIDETONE_FREQ_HZ 700 // Frequency for the keyer sidetone
|
||
|
|
#define DEFAULT_SPEED_WPM 10 // 15 WPM default keyer speed
|
||
|
|
#define KEYER_MODE_IS_IAMBIC_A // Remove the '//' at the beginning of the line if you prefer Iambic A, otherwise the code will use Iambic B. If you don't use squeeze keying it doesn't matter.
|
||
|
|
|
||
|
|
#define LEFT_PADDLE_PIN 2 // Left paddle input pin
|
||
|
|
#define RIGHT_PADDLE_PIN 8 // Right paddle input pin
|
||
|
|
#define PIEZO_SPKR_PIN 25 // Piezo Speaker connection via 100 ohm resistor
|
||
|
|
#define LED_PIN 3
|
||
|
|
#define TX_SWITCH_PIN 26 // Radio T/R Switch - HIGH is Key down (TX)), LOW is key up (RX).
|
||
|
|
|
||
|
|
#define DIT_L 0x01 // Dit latch (Binary 0000 0001)
|
||
|
|
#define DAH_L 0x02 // Dah latch (Binary 0000 0010)
|
||
|
|
#define DIT_PROC 0x04 // Dit is being processed (Binary 0000 0100)
|
||
|
|
#define IAMBIC_B 0x10 // 0x00 for Iambic A, 0x10 for Iambic B (Binary 0001 0000)
|
||
|
|
#define IAMBIC_A 0
|
||
|
|
|
||
|
|
#define PUSH_PIN 27
|
||
|
|
|
||
|
|
// Keyer State machine type - states for sending of Morse elements based on paddle input
|
||
|
|
enum KSTYPE {
|
||
|
|
IDLE,
|
||
|
|
CHK_DIT,
|
||
|
|
CHK_DAH,
|
||
|
|
KEYED_PREP,
|
||
|
|
KEYED,
|
||
|
|
INTER_ELEMENT,
|
||
|
|
PRE_IDLE,
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
// Data type for storing Keyer settings in EEPROM
|
||
|
|
struct KeyerConfigType {
|
||
|
|
uint32_t ms_per_dit; // Speed
|
||
|
|
uint8_t dit_paddle_pin; // Dit paddle pin number
|
||
|
|
uint8_t dah_paddle_pin; // Dah Paddle pin number
|
||
|
|
uint8_t iambic_keying_mode; // 0 - Iambic-A, 1 Iambic-B
|
||
|
|
uint8_t sidetone_is_muted; //
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
class Iambic {
|
||
|
|
private:
|
||
|
|
Modulation* mod;
|
||
|
|
Afficheur* afficheur;
|
||
|
|
Enigma enigma;
|
||
|
|
|
||
|
|
uint32_t g_ditTime; // Number of milliseconds per dit
|
||
|
|
uint8_t g_keyerControl; // 0x1 Dit latch, 0x2 Dah latch, 0x04 Dit being processed, 0x10 for Iambic A or 1 for B
|
||
|
|
KSTYPE g_keyerState; // Keyer state global variable
|
||
|
|
bool g_sidetone_muted; // If 'true' the Piezo speaker output is muted except for when in command mode
|
||
|
|
|
||
|
|
|
||
|
|
// We declare these as variables so that DIT and DAH paddles can be swapped for both left and right hand users. Convention is DIT on thumb.
|
||
|
|
uint8_t g_dit_paddle; // Current PIN number for Dit paddle
|
||
|
|
uint8_t g_dah_paddle; // Current PIN number for Dah paddle
|
||
|
|
|
||
|
|
// We use this variable to encode Morse elements (DIT = 0, DAH =1) to capture the current character sent via the paddles which is needed for user commands.
|
||
|
|
// The encoding practice is to left pad the character with 1's. A zero start bit is to the left of the first encoded element.
|
||
|
|
// We start with B11111110 and shift left with a 0 or 1 from the least significant bit, according the last Morse element received (DIT = 0, DAH =1).
|
||
|
|
uint8_t g_current_morse_character;
|
||
|
|
|
||
|
|
// Etat des touches
|
||
|
|
bool left_down;
|
||
|
|
bool right_down;
|
||
|
|
|
||
|
|
// Anti-rebond
|
||
|
|
unsigned long debounce_ms;
|
||
|
|
unsigned long left_time;
|
||
|
|
unsigned long right_time;
|
||
|
|
|
||
|
|
bool enigmaEn;
|
||
|
|
int wpmSpeed;
|
||
|
|
|
||
|
|
char morse_char_decode(uint8_t code);
|
||
|
|
void update_PaddleLatch();
|
||
|
|
void tx_key_down();
|
||
|
|
void tx_key_up();
|
||
|
|
|
||
|
|
public:
|
||
|
|
// Constructeur
|
||
|
|
Iambic(Modulation* m, Afficheur* a,int wpm,char _mode,bool _enigma);
|
||
|
|
|
||
|
|
// Destructeur
|
||
|
|
~Iambic();
|
||
|
|
|
||
|
|
void scan();
|
||
|
|
void vband();
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif // IAMBIC_H
|