Alter morseOut to use a for loop and clearer dit/dah timing in the tone.
Back up to 1000Hz tones.
This commit is contained in:
parent
1c7dbfc4b6
commit
fc09429133
|
@ -1268,12 +1268,13 @@ bool HamShield::waitForChannel(long timeout = 0, long breakwindow = 0, int setRS
|
||||||
/* Morse code out, blocking */
|
/* Morse code out, blocking */
|
||||||
|
|
||||||
void HamShield::morseOut(char buffer[HAMSHIELD_MORSE_BUFFER_SIZE]) {
|
void HamShield::morseOut(char buffer[HAMSHIELD_MORSE_BUFFER_SIZE]) {
|
||||||
int i = 0;
|
int i;
|
||||||
char prev = 0;
|
char prev = 0;
|
||||||
while(buffer[i] != '\0' && i < HAMSHIELD_MORSE_BUFFER_SIZE) {
|
for(i = 0; buffer[i] != '\0' && i < HAMSHIELD_MORSE_BUFFER_SIZE; prev = buffer[i], i++) {
|
||||||
// On a space, delay 7 dots
|
// On a space, delay 7 dots
|
||||||
if(buffer[i] == ' ') {
|
if(buffer[i] == ' ') {
|
||||||
// We delay by 4 here, if we previously sent a symbol. Otherwise 7.
|
// We delay by 4 here, if we previously sent a symbol. Otherwise 7.
|
||||||
|
// This could probably just be always 7 and go relatively unnoticed.
|
||||||
if(prev == 0 || prev == ' ')
|
if(prev == 0 || prev == ' ')
|
||||||
delay(HAMSHIELD_MORSE_DOT*7);
|
delay(HAMSHIELD_MORSE_DOT*7);
|
||||||
else
|
else
|
||||||
|
@ -1284,15 +1285,16 @@ void HamShield::morseOut(char buffer[HAMSHIELD_MORSE_BUFFER_SIZE]) {
|
||||||
uint8_t bits = morseLookup(buffer[i]);
|
uint8_t bits = morseLookup(buffer[i]);
|
||||||
if(bits) { // If it is a valid character...
|
if(bits) { // If it is a valid character...
|
||||||
do {
|
do {
|
||||||
tone(HAMSHIELD_PWM_PIN, 600, HAMSHIELD_MORSE_DOT * (bits & 1 ? 3 : 1));
|
if(bits & 1)
|
||||||
|
tone(HAMSHIELD_PWM_PIN, 1000, HAMSHIELD_MORSE_DOT * 3);
|
||||||
|
else
|
||||||
|
tone(HAMSHIELD_PWM_PIN, 1000, HAMSHIELD_MORSE_DOT);
|
||||||
delay(HAMSHIELD_MORSE_DOT);
|
delay(HAMSHIELD_MORSE_DOT);
|
||||||
bits >>= 1; // Shift into the next symbol
|
bits >>= 1; // Shift into the next symbol
|
||||||
} while(bits != 1); // Wait for 1 termination to be all we have left
|
} while(bits != 1); // Wait for 1 termination to be all we have left
|
||||||
}
|
}
|
||||||
// End of character
|
// End of character
|
||||||
delay(HAMSHIELD_MORSE_DOT * 3);
|
delay(HAMSHIELD_MORSE_DOT * 3);
|
||||||
prev = buffer[i];
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue