first attempt implementing iambic b
This commit is contained in:
parent
8a50645cfe
commit
7e26ea2c06
3 changed files with 33 additions and 8 deletions
|
@ -9,7 +9,6 @@ extern const uint LED_PIN;
|
|||
extern const uint LEFT_PADDLE_PIN;
|
||||
extern const uint RIGHT_PADDLE_PIN;
|
||||
|
||||
|
||||
const uint SIDETONE_FREQ = 622;
|
||||
|
||||
bool left_paddle_pressed()
|
||||
|
@ -36,7 +35,7 @@ uint64_t calcElementDurationUs(uint8_t wpm)
|
|||
return duration;
|
||||
}
|
||||
|
||||
Keyer::Keyer(uint8_t wpm) : m_wpm(wpm)
|
||||
Keyer::Keyer(uint8_t wpm, Mode mode) : m_wpm(wpm), m_mode(mode)
|
||||
{
|
||||
m_elementDuration = calcElementDurationUs(m_wpm);
|
||||
}
|
||||
|
@ -50,9 +49,12 @@ void Keyer::run()
|
|||
case State::Wait:
|
||||
if (left_paddle_pressed() && right_paddle_pressed())
|
||||
{
|
||||
if (m_lastSymbolWas == Symbol::Dit) {
|
||||
if (m_lastSymbolWas == Symbol::Dit)
|
||||
{
|
||||
state = State::Dah;
|
||||
} else if (m_lastSymbolWas == Symbol::Dah) {
|
||||
}
|
||||
else if (m_lastSymbolWas == Symbol::Dah)
|
||||
{
|
||||
state = State::Dit;
|
||||
}
|
||||
break;
|
||||
|
@ -77,6 +79,9 @@ void Keyer::run()
|
|||
}
|
||||
else
|
||||
{
|
||||
if (right_paddle_pressed() && !m_keyNextIambicB)
|
||||
m_keyNextIambicB = true;
|
||||
|
||||
if (absolute_time_diff_us(timestamp, m_keying_until) <= 0)
|
||||
{
|
||||
m_currentlyKeying = false;
|
||||
|
@ -98,6 +103,9 @@ void Keyer::run()
|
|||
}
|
||||
else
|
||||
{
|
||||
if (left_paddle_pressed() && !m_keyNextIambicB)
|
||||
m_keyNextIambicB = true;
|
||||
|
||||
if (absolute_time_diff_us(timestamp, m_keying_until) <= 0)
|
||||
{
|
||||
m_currentlyKeying = false;
|
||||
|
@ -109,14 +117,27 @@ void Keyer::run()
|
|||
}
|
||||
break;
|
||||
case State::InterCharSpace:
|
||||
if (m_previousState != State::InterCharSpace)
|
||||
if (!m_currentlyPausing)
|
||||
{
|
||||
m_pausing_until = make_timeout_time_us(m_elementDuration);
|
||||
m_previousState = State::InterCharSpace;
|
||||
m_currentlyPausing = true;
|
||||
}
|
||||
|
||||
if (absolute_time_diff_us(timestamp, m_pausing_until) <= 0)
|
||||
{
|
||||
m_currentlyPausing = false;
|
||||
|
||||
if (m_mode == Mode::IAMBIC_B && m_keyNextIambicB)
|
||||
{
|
||||
if (m_previousState == State::Dit)
|
||||
state = State::Dah;
|
||||
else
|
||||
state = State::Dit;
|
||||
|
||||
m_keyNextIambicB = false;
|
||||
break;
|
||||
}
|
||||
|
||||
state = State::Wait;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define KEYER_H
|
||||
|
||||
#include "sidetone.h"
|
||||
#include "settings.h"
|
||||
|
||||
extern const uint BUZZER_PIN;
|
||||
|
||||
|
@ -16,7 +17,7 @@ public:
|
|||
InterCharSpace,
|
||||
// TODO: perhaps new state: Keying
|
||||
};
|
||||
Keyer(uint8_t wpm);
|
||||
Keyer(uint8_t wpm, Mode mode);
|
||||
|
||||
void run();
|
||||
|
||||
|
@ -30,12 +31,15 @@ private:
|
|||
State state{State::Wait};
|
||||
State m_previousState{State::Wait};
|
||||
uint8_t m_wpm{18};
|
||||
Mode m_mode{Mode::IAMBIC_B};
|
||||
uint64_t m_elementDuration{0};
|
||||
bool m_currentlyKeying{false};
|
||||
bool m_currentlyPausing{false};
|
||||
absolute_time_t m_keying_until{0};
|
||||
absolute_time_t m_pausing_until{0};
|
||||
Symbol m_lastSymbolWas{Symbol::Dit};
|
||||
Sidetone m_Sidetone{BUZZER_PIN};
|
||||
bool m_keyNextIambicB{false};
|
||||
};
|
||||
|
||||
#endif
|
|
@ -47,7 +47,7 @@ int main()
|
|||
// printf("Element duration (u_sec): %" PRIu64 "\n", element_duration_us(settings.wpm));
|
||||
printf("\n");
|
||||
|
||||
Keyer keyer(25);
|
||||
Keyer keyer(settings.wpm, settings.mode);
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue