/**
* Arduino + Wire = Morse Code AM Radio Beacon
* By EllisGL 2011-08-09
* Version 1.03 (Arduino version)
* Based on http://arduino.cc/forum/index.php/topic,8456.msg68164.html
*
* Change log:
* V1.00: Initial
* V1.01: Refactored for smaller size
* V1.02: More refactoring
* V1.03: More refactoring
*
* Known Issues:
* Harmonics
*/
// Beacon message
const char message[] = "hello from my arduino 1022";
// Timings
const unsigned int dahLen = 1000; // 1000 ms - dah length
const unsigned int ditLen = 250; // 250 ms - dit length - same timeing between dots and dashes of the same letter
const unsigned int lPause = 750; // 750 ms - length between charaters
const unsigned int wPause = 1750; // 1750 ms - length for spaces
const unsigned int ledPin = 13;
const unsigned int outPin = 11;
// Character mapping
const char chars[36][6] =
{
{'.', '-' }, // 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
};
unsigned int msgLen, i, l, p, x;
char buff;
void dit(void);
void dah(void);
void pause(void);
void broadcast(int N_cycles);
void dontbroadcast(int N_cycles);
void setup()
{
Serial.begin(9600);
pinMode(outPin, OUTPUT); // sets the digital pin as output
msgLen = strlen(message);
}
void loop()
{
for(x = 0; x < msgLen; x++)
{
buff = message[x];
if(buff >= 'a' && buff <= 'z')
{
l = buff - 97;
}
else if(buff >= '0' && buff <= '9')
{
l = buff - 22;
}
else
{
l = 36;
}
Serial.print(buff);
if(l == 36)
{
Serial.println("SPACE");
delay(wPause);
}
else
{
p = strlen(chars[l]);
for(i = 0; i < p; i++)
{
if(chars[l][i] == '.')
{
dit();
}
else if(chars[l][i] == '-')
{
dah();
}
}
delay(lPause);
Serial.println();
}
}
Serial.println();
delay(wPause);
}
void dah(void)
{
Serial.print("-");
digitalWrite(ledPin, HIGH);
analogWrite(outPin, 128);
delay(dahLen);
digitalWrite(ledPin, LOW);
analogWrite(outPin, 0);
delay(ditLen);
}
void dit(void)
{
Serial.print(".");
digitalWrite(ledPin, HIGH);
analogWrite(outPin, 128);
delay(ditLen);
digitalWrite(ledPin, LOW);
analogWrite(outPin, 0);
delay(ditLen);
}