fix commands and add encoding
This commit is contained in:
parent
e10e6eddbf
commit
f0ea6b2707
37
src/cw.cpp
Normal file
37
src/cw.cpp
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
uint8_t convertASCII(char c){
|
||||||
|
uint8_t result;
|
||||||
|
if(isalpha(c)){
|
||||||
|
if(islower(c)){
|
||||||
|
result = (uint8_t)c - 97;
|
||||||
|
}else{
|
||||||
|
result = (uint8_t)c - 65;
|
||||||
|
}
|
||||||
|
} else if (isdigit(c)){
|
||||||
|
result = (uint8_t)c - 22;
|
||||||
|
} else {
|
||||||
|
switch (c) {
|
||||||
|
case '-':
|
||||||
|
result = 36;
|
||||||
|
break;
|
||||||
|
case '.':
|
||||||
|
result = 36;
|
||||||
|
break;
|
||||||
|
case ',':
|
||||||
|
result = 36;
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
result = 36;
|
||||||
|
break;
|
||||||
|
case '/' || '\\':
|
||||||
|
result = 36;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
result = 41;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
55
src/cw.h
Normal file
55
src/cw.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#ifndef CW_H
|
||||||
|
#define CW_H
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
// Morse code representation for each character (A-Z, 0-9)
|
||||||
|
const char* morseCode[42] = {
|
||||||
|
".-", // A
|
||||||
|
"-...", // B
|
||||||
|
"-.-.", // C
|
||||||
|
"-..", // D
|
||||||
|
".", // E
|
||||||
|
"..-.", // F
|
||||||
|
"--.", // G
|
||||||
|
"....", // H
|
||||||
|
"..", // I
|
||||||
|
".---", // J
|
||||||
|
"-.-", // K
|
||||||
|
".-..", // L
|
||||||
|
"--", // M
|
||||||
|
"-.", // N
|
||||||
|
"---", // O
|
||||||
|
".--.", // P
|
||||||
|
"--.-", // Q
|
||||||
|
".-.", // R
|
||||||
|
"...", // S
|
||||||
|
"-", // T
|
||||||
|
"..-", // U
|
||||||
|
"...-", // V
|
||||||
|
".--", // W
|
||||||
|
"-..-", // X
|
||||||
|
"-.--", // Y
|
||||||
|
"--..", // Z
|
||||||
|
"-----", // 0
|
||||||
|
".----", // 1
|
||||||
|
"..---", // 2
|
||||||
|
"...--", // 3
|
||||||
|
"....-", // 4
|
||||||
|
".....", // 5
|
||||||
|
"-....", // 6
|
||||||
|
"--...", // 7
|
||||||
|
"---..", // 8
|
||||||
|
"----.", // 9
|
||||||
|
"-...-", // -
|
||||||
|
".-.-.-", // .
|
||||||
|
"--..--", // ,
|
||||||
|
"..--..", // ?
|
||||||
|
"-..-.", // /
|
||||||
|
".-.-.", // End Of Message (41)
|
||||||
|
};
|
||||||
|
uint8_t convertASCII(char c);
|
||||||
|
const char* allowedCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.,?/\\";
|
||||||
|
|
||||||
|
#endif // CW_H
|
53
src/main.cpp
53
src/main.cpp
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
|
#include "cw.h"
|
||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
* - Implement sending strings
|
* - Implement sending strings
|
||||||
@ -29,6 +30,7 @@ uint16_t p_tol = 10, p_min = 50, p_max = 2000, p_buf = 0, p_cache = 0;
|
|||||||
String serial_buffer = "";
|
String serial_buffer = "";
|
||||||
char buf;
|
char buf;
|
||||||
|
|
||||||
|
void key_string(String);
|
||||||
void adjust_length(uint16_t);
|
void adjust_length(uint16_t);
|
||||||
void set_length(uint16_t, uint16_t);
|
void set_length(uint16_t, uint16_t);
|
||||||
void send(bool);
|
void send(bool);
|
||||||
@ -42,11 +44,11 @@ void setup() {
|
|||||||
pinMode(input_dah, INPUT_PULLUP);
|
pinMode(input_dah, INPUT_PULLUP);
|
||||||
pinMode(input_pot, INPUT);
|
pinMode(input_pot, INPUT);
|
||||||
pinMode(output, OUTPUT);
|
pinMode(output, OUTPUT);
|
||||||
digitalWrite(output, HIGH);
|
digitalWrite(output, LOW);
|
||||||
log("Read EEPROM\n");
|
log("Read EEPROM\n");
|
||||||
dit = EEPROM.read(20);
|
dit = EEPROM.read(20);
|
||||||
dah = EEPROM.read(21);
|
dah = EEPROM.read(21);
|
||||||
// debug = EEPROM.read(22);
|
debug = EEPROM.read(22);
|
||||||
p_buf = analogRead(input_pot);
|
p_buf = analogRead(input_pot);
|
||||||
adjust_length(p_buf);
|
adjust_length(p_buf);
|
||||||
log("Setup complete\n");
|
log("Setup complete\n");
|
||||||
@ -62,7 +64,6 @@ void setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
log(".");
|
|
||||||
if (!digitalRead(input_dah)){
|
if (!digitalRead(input_dah)){
|
||||||
send(true);
|
send(true);
|
||||||
}else if (!digitalRead(input_dit)){
|
}else if (!digitalRead(input_dit)){
|
||||||
@ -82,13 +83,10 @@ void loop() {
|
|||||||
|
|
||||||
if (Serial.available() > 0) {
|
if (Serial.available() > 0) {
|
||||||
buf = Serial.read();
|
buf = Serial.read();
|
||||||
log("SR ");
|
|
||||||
log(String(buf));
|
|
||||||
log("\n");
|
|
||||||
if ((uint16_t) buf == 13){
|
if ((uint16_t) buf == 13){
|
||||||
process_input(serial_buffer);
|
process_input(serial_buffer);
|
||||||
serial_buffer = "";
|
serial_buffer = "";
|
||||||
} else {
|
} else if ((uint8_t) buf > 27 ){
|
||||||
serial_buffer += buf;
|
serial_buffer += buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,7 +109,7 @@ void process_input(String input){
|
|||||||
log(input);
|
log(input);
|
||||||
log("\n");
|
log("\n");
|
||||||
char command = input[0];
|
char command = input[0];
|
||||||
input.remove(0);
|
input.remove(0,1);
|
||||||
log("Command: ");
|
log("Command: ");
|
||||||
log(String(command));
|
log(String(command));
|
||||||
log(" - ");
|
log(" - ");
|
||||||
@ -120,7 +118,7 @@ void process_input(String input){
|
|||||||
uint16_t length = 0;
|
uint16_t length = 0;
|
||||||
switch(command){
|
switch(command){
|
||||||
case 'S':
|
case 'S':
|
||||||
// TODO
|
key_string(input);
|
||||||
break;
|
break;
|
||||||
case 'I':
|
case 'I':
|
||||||
length = input.toInt();
|
length = input.toInt();
|
||||||
@ -132,6 +130,7 @@ void process_input(String input){
|
|||||||
break;
|
break;
|
||||||
case 'D':
|
case 'D':
|
||||||
debug = boolean(input.toInt()==1);
|
debug = boolean(input.toInt()==1);
|
||||||
|
log("Debug mode enabled");
|
||||||
EEPROM.write(22, debug);
|
EEPROM.write(22, debug);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -140,13 +139,39 @@ void process_input(String input){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void key_string(String input){
|
||||||
|
// log("Sending string: ");
|
||||||
|
// log(input);
|
||||||
|
// log("\n");
|
||||||
|
uint8_t b = 0;
|
||||||
|
for (uint8_t i = 0; i < input.length(); i++){
|
||||||
|
char c = input[i];
|
||||||
|
if ((uint8_t)c != 32){
|
||||||
|
b = convertASCII(c);
|
||||||
|
for(uint8_t y = 0; y < strlen(morseCode[b]); y++){
|
||||||
|
send(morseCode[b][y] == '.');
|
||||||
|
delay(dit);
|
||||||
|
}
|
||||||
|
if(debug){
|
||||||
|
Serial.print(' ');
|
||||||
|
}
|
||||||
|
delay(dit);
|
||||||
|
} else {
|
||||||
|
if (debug){
|
||||||
|
Serial.print(" ");
|
||||||
|
}
|
||||||
|
delay(dah);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void send(bool b) {
|
void send(bool b) {
|
||||||
log("Sending ");
|
if (debug){
|
||||||
log(b?"dah":"dit");
|
Serial.print(b?"+":"=");
|
||||||
log("\n");
|
}
|
||||||
digitalWrite(output, LOW);
|
|
||||||
delay(b?dit:dah);
|
|
||||||
digitalWrite(output, HIGH);
|
digitalWrite(output, HIGH);
|
||||||
|
delay(b?dit:dah);
|
||||||
|
digitalWrite(output, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_length(uint16_t length_dit, uint16_t length_dah) {
|
void set_length(uint16_t length_dit, uint16_t length_dah) {
|
||||||
|
Loading…
Reference in New Issue
Block a user