summaryrefslogtreecommitdiffstats
path: root/uino/morse
diff options
context:
space:
mode:
authorroot <root@krebs>2011-05-07 04:59:43 +0200
committerroot <root@krebs>2011-05-07 04:59:43 +0200
commit90b8f32a79e68d979438379d5e3799755427975c (patch)
tree77ffff91faafd3827d0c2895830c9efe4b1ea64e /uino/morse
parent91b96d2405e37eb68a29c1cab653dbd80810a672 (diff)
added morse code for krebsuino
morse.pde: listens for serial input and writes morse code to attached speaker (at port 13). written in arduino ide
Diffstat (limited to 'uino/morse')
-rw-r--r--uino/morse/morse.pde164
1 files changed, 164 insertions, 0 deletions
diff --git a/uino/morse/morse.pde b/uino/morse/morse.pde
new file mode 100644
index 00000000..685f5092
--- /dev/null
+++ b/uino/morse/morse.pde
@@ -0,0 +1,164 @@
+#include <SoftwareSerial.h>
+
+/*
+ Implementes the Morse algorithm for a simple speaker
+
+ @author Felix
+ @date 07.05.2011
+ */
+int inByte = 0;
+int i = 0;
+int j = 0;
+int char_avail = 0;
+
+/* You can touch this: */
+#define DIT_DELAY 50
+
+
+/* But you cannot touch this: */
+#define WORD_DELAY (DIT_DELAY * 7)
+#define DIT_CYCLES (DIT_DELAY/2)
+#define CHAR_DELAY (DIT_DELAY * 3)
+
+#define dsym() delay(DIT_DELAY);
+#define char_delay() delay(CHAR_DELAY);
+#define word_delay() delay(WORD_DELAY);
+
+
+static char* latin_upper[] = {
+ ". -\0" , /* A */
+ "- . . .\0"
+ "- . . .\0",
+ "- . - .\0",
+ "- . .\0",
+ ".\0",
+ ". . - .\0",
+ "- - .\0",
+ ". . . .\0",
+ ". .\0",
+ ". - - -\0",
+ "- . -\0",
+ ". - . .\0",
+ "- -\0",
+ "- .\0",
+ "- - -\0",
+ ". - - .\0",
+ "- - . -\0",
+ ". - .\0",
+ ". . .\0",
+ "-\0",
+ ". . -\0",
+ ". . . -\0",
+ ". - -\0",
+ "- . . -\0",
+ "- . - -\0",
+ "- - . .\0" /* Z */
+};
+static char* numbers[] = {
+ "- - - - -\0", /* 0 */
+ ". - - - -\0",
+ ". . - - -\0",
+ ". . . - -\0",
+ ". . . . -\0",
+ ". . . . .\0",
+ "- . . . .\0",
+ "- - . . .\0",
+ "- - - . .\0",
+ "- - - - .\0" /* 9 */
+};
+
+void setup() {
+ // initialize the digital pin as an output.
+ // Pin 13 has an LED connected on most Arduino boards:
+ pinMode(13, OUTPUT);
+ Serial.begin(9600);
+}
+
+
+
+void loop() {
+ char_avail = Serial.available();
+
+ if(char_avail > 0) {
+ for (j = 0; j < char_avail;j++)
+ {
+ char on_line = Serial.read();
+ to_beep(on_line);
+ char_delay();
+ }
+ }
+}
+
+void to_beep(char data)
+{
+ char* mdata;
+ if (data == ' ')
+ {
+ word_delay();
+ Serial.println("word end");
+ return;
+ }
+ else{
+ if (data == '\n') {
+ word_delay();
+ Serial.println("EOL");
+ return;
+ } else
+ if (data >= 'A' && data <= 'Z' )
+ mdata = latin_upper[data-'A'];
+ else
+ if (data >= 'a' && data <= 'z' )
+ mdata = latin_upper[data-'a'];
+ else
+ if (data >= '0' && data <= '9')
+ mdata = numbers[data-'0'];
+ else
+ {
+ Serial.print(data);
+ Serial.println(": not implemented");
+ return;
+ }
+ }
+
+ Serial.println(mdata);
+ int sdata = strlen( mdata);
+ for( char i = 0; i < sdata; i ++)
+ {
+
+ char token = mdata[i];
+ if (token == '.')
+ {
+ dit();
+ }
+ if (token == '-')
+ {
+ dah();
+ }
+ if (token == ' ')
+ {
+ dsym();
+ }
+
+ }
+
+}
+void dah() {
+ for (int i=0;i<3;i++)
+ {
+ dit();
+ }
+}
+
+void dit(){
+
+ for (int i=0;i<DIT_CYCLES;i++) // Number of DIT Cycles , sleep 2 milliseconds in a cycle
+ {
+ digitalWrite(13, HIGH); // set the LED on
+ delay(1);
+
+ digitalWrite(13, LOW); // set the LED off
+ delay(1);
+ }
+}
+
+