The circuit is very simple, a Piezo transducer is connected to pin 2, a LED to pin 7 and a push button to pin 8. Pushing the button sends the text "CQ CD DE M6KWH".
// Morse sender // pins #define PIEZOPIN 2 #define BUTTONPIN 8 #define LEDPIN 7 // text array codes #define DOT 0 #define DASH 1 #define SPACE 2 #define WORD 3 // text words int CQ[] = {1,0,1,0,2,1,1,0,1,3}; int DE[] = {1,0,0,2,0,3}; int M6KWH[] = {1,1,2,0,1,1,1,1,2,1,0,1,2,1,1,0,2,0,0,0,0,3}; // sound frequency 1000Hz // cycle time = 1000000/frequency(Hz) usec #define CYCLE 1000 // dash = 3 dots, space = 3 dots, word = 7 dots #define DOTTIME 150 void setup() { pinMode(BUTTONPIN, INPUT); pinMode(PIEZOPIN, OUTPUT); pinMode(LEDPIN, OUTPUT); } void loop() { // wait for button pressed while(digitalRead(BUTTONPIN) != LOW); // send message words sender(CQ); sender(CQ); sender(DE); sender(M6KWH); // finger still on button? while(digitalRead(BUTTONPIN) != HIGH); delay(100); // avoid button bounce } // send a word void sender(int dida[]) { int x = 0; // array index // send characters up to end of word while(dida[x] != WORD) { switch (dida[x]) { case DOT: sound(DOTTIME); delay(DOTTIME); // add after dot break; case DASH: sound(3 * DOTTIME); delay(DOTTIME); // add after dash break; case SPACE: delay(2 * DOTTIME); // add for space break; } x++; } delay(6 * DOTTIME); // add for word } // make sound at FREQ for time (msec) void sound(long time) { long start; // make the sound for time msec start = millis(); // read current time digitalWrite(LEDPIN, HIGH); // turn on LED // loop until time has passed making sound while(millis() < start + time) { digitalWrite(PIEZOPIN, HIGH); delayMicroseconds(CYCLE/2); digitalWrite(PIEZOPIN, LOW); delayMicroseconds(CYCLE/2); } digitalWrite(LEDPIN, LOW); // turn off LED }
No comments:
Post a Comment