Een morse (her)oefen programmaatje voor op een arduino
Alleen een piezo-buzzer nodig.
met draadjes aan pin 11 van een Arduino(nano,uno of mega)
Heb de code ook als CW-Oefenprogram.txt bijgevoegd omdat .ino
niet mag op dit forum hi.
Dat kun je eenvoudig wijzigen in
CW-Oefenprogram.ino
om te laden in de arduino studio
En nu maar oefenen met luisteren..
Have fun....
Code: Selecteer alles
/*
((c))PA3BNX Morse training
@21-02-2021
LIROD programma
Only A buzzer needed at pin 11
Plays a-z and 0-9 ? CW
5 minutes
To Reset push button on Arduino
*/
const int freq = 750; //Hz
const int w = 18; //WPM
const bool bMixed = true; //Switch between a=z and 0-9, ? or a-z
const byte cPinCW=LED_BUILTIN;
const byte cPinCWtone=11; //Buzzer here. Use only PWM pins!
int di;
int dah;
int space;
int separator;
long maxtime;
int WPM(int wpm)
{
/*PARIS
.---. .- .-. .. ...
p a r i s
2+4+4+2 +2+ 2+4 +2+ 2+4+2 +2+ 2+2 +2+ 2+4 + 6
50 di times
*/
const int x=50;
//Time of a dot in 'paris' in mSec
return 60000/(wpm * x);
}
void Speed(int s)
{
di=s;//1 count + 1
dah=3 * di;// 3 counts + 1
space=4 * di;//letter separator 3 counts
separator=6 * di;//word separator 7 counts
}
void Sein(int token)
{
if (token==space)
{
delay(space);
}
else if (token==separator)
{
delay(separator);
}
else
{
//freq= 200 + (analogRead(A0)* 2);
digitalWrite(cPinCW,HIGH);
tone(cPinCWtone,freq,token);
delay(token);
digitalWrite(cPinCW,LOW);
delay(di);
}
}//End Sein=====================================
void PlayMorse(String aa)
{
byte i;
String m;
Serial.print(aa);
for (i=0;i<aa.length();i++)
{
//Serial.print( aa.charAt(i));
char myChar = aa.charAt(i);
if (myChar == ' ')
{
m += '/';
}
else
{
m += " ";
}
switch (myChar){
case 'a':
m += ".-";
break;
case 'b':
m += "-...";
break;
case 'c':
m += "-.-.";
break;
case 'd':
m += "-..";
break;
case 'e':
m += ".";
break;
case 'f':
m += "..-.";
break;
case 'g':
m += "--.";
break;
case 'h':
m += "....";
break;
case 'i':
m += "..";
break;
case 'j':
m += ".---";
break;
case 'k':
m += "-.-";
break;
case 'l':
m += ".-..";
break;
case 'm':
m += "--";
break;
case 'n':
m += "-.";
break;
case 'o':
m += "---";
break;
case 'p':
m += ".--.";
break;
case 'q':
m += "--.-";
break;
case 'r':
m += ".-.";
break;
case 's':
m += "...";
break;
case 't':
m += "-";
break;
case 'u':
m += "..-";
break;
case 'v':
m += "...-";
break;
case 'w':
m += ".--";
break;
case 'x':
m += "-..-";
break;
case 'y':
m += "-.--";
break;
case 'z':
m += "--..";
break;
case '1':
m += ".----";
break;
case '2':
m += "..---";
break;
case '3':
m += "...--";
break;
case '4':
m += "....-";
break;
case '5':
m += ".....";
break;
case '6':
m += "-....";
break;
case '7':
m += "--...";
break;
case '8':
m += "---..";
break;
case '9':
m += "----.";
break;
case '0':
m += "-----";
break;
case '?':
m+="..--..";
break;
case '.':
m+=".-.-.-";
break;
case ',':
m+=".----.";
break;
case '@':
m+=".--.-.";
break;
case '/':
m+="-..-.";
break;
case '\\':
m+="-..-.";
break;
default:
break;
}
}
m.replace(" /","/");
for (i=0;i<m.length();i++)
{
switch (m.charAt(i))
{
case '.':
Sein(di);
break;
case '-':
Sein(dah);
break;
case ' ':
Sein(space);
break;
case '/':
Sein(separator);
break;
default:
Sein(separator);
break;
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println();
Serial.print(w);
Serial.print(" wpm ");
if (bMixed==true)
{
Serial.println("0-9, ? and a-z >> ");
}
else
{
Serial.println("a-z >>");
}
pinMode(cPinCW,OUTPUT);
randomSeed(analogRead(0));
Speed(WPM(w));
maxtime+=millis()+300000;
}
void loop() {
// put your main code here, to run repeatedly:
//Bool
static bool bFlag;
//Integer
byte static t;
byte x;
byte c;
char f;
//String
String myval;
if (bMixed==false)
{
f='a';
}
else
{
f='0';
}
if (millis() < maxtime)
{
myval="";
for (x=0;x<5;x++)
{
again:
c=random(char(f), char('z'));
if (c > char('9') && c < char('a'))
{
if (c !=char('?'))
{
goto again;
}
}
myval += char(c);
}
myval += ' ';
PlayMorse(myval);
t++;
if (t == 5)
{
Serial.println("");
t=0;
}
}
else if (bFlag==false)
{
Serial.println("<<");
bFlag=true;
}
}