Arduino Morse Am Transmitter
Arduino Morse Am Transmitter
initMorseTab(void);
char2morse(unsigned char);
txMorseCode4Char(unsigned char);
txMorseCode4String(const char*);
setLED(void);
unsetLED(void);
changeLED(void);
changeLEDseq(int, int []);
void setup()
{
// set up Timer 1
TCCR1A = _BV (COM1A0); // toggle OC1A on Compare Match
TCCR1B = _BV(WGM12) | _BV(CS10); // CTC, no prescaler
OCR1A = 7;
// compare A register value to 10 (zero relative)
pinMode(LED, OUTPUT);
Serial.begin(9600);
delay(1000);
} // end of setup
void loop()
{
//transmit signal
Serial.println("TX ON");
pinMode (ANTENNA, OUTPUT);
setLED();
delay (1000);
//pause transmitting
Serial.println("TX OFF");
pinMode (ANTENNA, INPUT);
unsetLED();
delay (2333);
int i, ii;
int blinkSeq[]={
50, 10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100,
10,100,10,100,10,100,10,100,10,100,10,100,10,100 };
int startblinkSeq[]={
50,100,300,100,300,1000 };
changeLEDseq(6, startblinkSeq);
Serial.println("init morse");
initMorseTab();
Serial.println("init done");
{
unsetLED();
changeLEDseq(7, blinkSeq);
setLED();
Serial.println("TX ON");
for(ii=0; ii<(3*1024); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
Serial.println("TX OFF");
unsetLED();
delay(ii*1*1);
unsetLED();
changeLEDseq(7, blinkSeq);
setLED();
Serial.println("TX ON");
for(ii=0; ii<(3*1024); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
Serial.println("TX OFF");
unsetLED();
delay(ii*1*1);
unsetLED();
changeLEDseq(7, blinkSeq);
setLED();
Serial.println("TX ON");
for(ii=0; ii<(3*1024); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
Serial.println("TX OFF");
unsetLED();
delay(ii*1*1);
unsetLED();
changeLEDseq(23, blinkSeq);
}
delay(ii*1*1);
unsetLED();
changeLEDseq(7, blinkSeq);
setLED();
Serial.println("TX ON");
for(ii=0; ii<(3*1024); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
Serial.println("TX OFF");
unsetLED();
delay(ii*1*1);
unsetLED();
changeLEDseq(7, blinkSeq);
setLED();
Serial.println("TX ON");
for(ii=0; ii<(3*1024); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
Serial.println("TX OFF");
unsetLED();
delay(ii*1*1);
unsetLED();
changeLEDseq(23, blinkSeq);
}*/
unsetLED();
delay(1000);
} // end of loop
void txMorseCode4String(const char s[])
{
int i;
unsigned char c;
Serial.print("TX STRING: ");
Serial.println(s);
for(i=0; ((s[i]!=0)&&(i<64)); i++)
{
c=s[i];
if(c!=' ')
{
txMorseCode4Char(c);
}
else
{
delay(1024);
}
}
Serial.println("TX STRING DONE!");
unsetLED();
delay(1024);
}
void txMorseCode4Char(unsigned char c)
{
int i, ii;
char2morse(c);
/* Serial.println("IN: ");
for(i=0; i<8; i++)
{
Serial.println(mc[i]);
Serial.flush();
}
Serial.flush();*/
Serial.print("TX: <");
Serial.print(char(c));
Serial.print(">: ");
for(i=0; i<8; i++)
{
//
Serial.print("IN: ");
// Serial.println(result[i]);
if(result[i]==2)
{
setLED();
Serial.print("-");
for(ii=0; ii<(3*256); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
unsetLED();
}
else if(result[i]==1)
{
setLED();
Serial.print(".");
for(ii=0; ii<(256); ii++)
{
pinMode (ANTENNA, OUTPUT);
delay (1);
pinMode (ANTENNA, INPUT);
delay (1);
}
unsetLED();
}
else
{
break;
}
delay(512);
}
Serial.println("\tDONE! ");
Serial.flush();
delay(256);
}
void initMorseTab(void)
{
unsigned char mt[][8]= {
"!-.-.--", "\".-..-.", "# ", "$ ", "% ", "&.-...", "\'.----.",
"(-.--.", ")-.--.-", "* ", "+.-.-.", ",--..--", "m-....-", "p.-.-.-",
"/-..-.", "0-----", "1.----", "2..---", "3...--", "4....-", "5.....",
"6-....", "7--...", "8---..", "9----.", ":---...", ";-.-.-.", "< ",
"=-...-", "> ", "?..--..", "@.--.-.",
"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--..",
" " }
, c;
int i, ii;
for(i=0; (mt[i][0]!=' '); i++)
{
morseTab[i][0]=mt[i][0];
c=0;
ii=0;
if(mt[i][ii]!=' ')
{
for(ii=1; ((ii<8)&&(mt[i][ii]!=0)); ii++)
{
if(mt[i][ii]=='-')
{
bitSet(c,(ii-1));
}
else if(mt[i][ii]=='.')
{
c=c+0;
}
else
{
break;
}
}
}
morseTab[i][1]=c;
morseTab[i][2]=ii-1;
}
while(i<64)
{
morseTab[i][0]=' ';
morseTab[i][1]=0;
morseTab[i][2]=0;
i++;
}
}
void char2morse(unsigned char c)
{
unsigned char tmp;
int i, ii;
for(ii=0; ii<8; ii++)
{
result[ii]=0;
}
for(i=0; ((morseTab[i][0]!=' ')&&(i<=64)); i++)
{
if(c==morseTab[i][0])
{
tmp=morseTab[i][1];
for(ii=0; (ii<morseTab[i][2]); ii++)
{
if(bitRead(tmp, ii)==1)
{
result[ii]=2;
}
else
{
result[ii]=1;
}
}
break;
}
}
/*
Serial.println("c2m");
Serial.flush();
for(i=0; i<8; i++)
{
Serial.println(result[i]);
Serial.flush();
}
Serial.println(" ");
Serial.println("...");
Serial.flush();*/
}
void setLED()
{
digitalWrite(LED, HIGH);
ledstatus=1;
}
void unsetLED()
{
digitalWrite(LED, LOW);
ledstatus=-1;
}
void changeLED()
{
ledstatus=ledstatus*-1;
if(ledstatus>=1)
{
setLED();
}
else
{
unsetLED();
}
}
void changeLEDseq(int seqLen, int seq[])
{
int maxPause=30000, maxSeqLen=(min(seqLen, 1024));
int i, time;
for(i=0; i<maxSeqLen; i++)
{
time=(max(0, (min(maxPause, seq[i]))));
delay(time);
changeLED();
}
}