int led = 13; // led to use for output (13 is built-in) int dit_delay = 200; // length of a dit in ms int dah_delay = dit_delay * 3; // length of a dah in ms // dit() and dat() already include dit_delay int letter_delay = dah_delay - dit_delay; // letters already include letter delay int word_delay = dit_delay * 7 - letter_delay; // send a dit void dit() { Serial.print("."); digitalWrite(led, HIGH); delay(dit_delay); digitalWrite(led, LOW); delay(dit_delay); } // send a dah void dah() { Serial.print("-"); digitalWrite(led, HIGH); delay(dah_delay); digitalWrite(led, LOW); delay(dit_delay); } void morse_S() { Serial.print("Morse Letter 'S' "); dit(); dit(); dit(); pause_letter(); } void morse_O() { Serial.print("Morse Letter 'O' "); dah(); dah(); dah(); pause_letter(); } void morse_SOS() { morse_S(); morse_O(); morse_S(); delay(dit_delay * 6); pause_word(); } // Send single digit n in morse code. Fails if n > 9 void morse_digit(int n) { Serial.print("morse_digit("); Serial.print(n); Serial.println(")"); if (n == 0) { dah(); dah(); dah(); dah(); dah(); } if (n == 1) { dit(); dah(); dah(); dah(); dah(); } if (n == 2) { dit(); dit(); dah(); dah(); dah(); } if (n == 3) { dit(); dit(); dit(); dah(); dah(); } if (n == 4) { dit(); dit(); dit(); dit(); dah(); } if (n == 5) { dit(); dit(); dit(); dit(); dit(); } if (n == 6) { dah(); dit(); dit(); dit(); dit(); } if (n == 7) { dah(); dah(); dit(); dit(); dit(); } if (n == 8) { dah(); dah(); dah(); dit(); dit(); } if (n == 9) { dah(); dah(); dah(); dah(); dit(); } if (n > 9) { if (n == 10) { send_A(); } if (n == 11) { send_B(); } if (n == 12) { send_C(); } if (n == 13) { send_D(); } if (n == 14) { send_E(); } if (n == 15) { send_F(); } } pause_letter(); } //Send Letter A void send_A() { Serial.println("Sending A"); dit(); dah(); } //Send Letter B void send_B() { Serial.println("Sending B"); dah(); dit(); dit(); dit(); } //Send Letter C void send_C() { Serial.println("Sending C"); dah(); dit(); dah(); dit(); } //Send Letter D void send_D() { Serial.println("Sending D"); dah(); dit(); dit(); } //Send Letter E void send_E() { Serial.println("Sending E"); dit(); } void send_F() { Serial.println("Sending F"); dit(); dit(); dah(); dit(); } //Adds a pause between two letters void pause_letter() { Serial.println(""); delay(letter_delay); } //Adds a pause between two words void pause_word() { delay(word_delay); } //Morses given number n with base 10 void morse_decimal(int n) { if (n >= 10) { morse_decimal(n / 10); } morse_digit(n % 10); //what would happen if we add this call at the top? } //Morse number n with binary base void morse_binary(int n) { if (n >= 2) { morse_binary(n / 2); } morse_digit(n % 2); } //Morse number n encoded in base base void morse_base(int n, int base) { Serial.print("Sending number "); Serial.print(n); Serial.print(" to base "); Serial.print(base); Serial.println("."); if (n >= base) { morse_base(n / base, base); } morse_digit(n % base); } void setup() { // Transfer at 9600 bits/s Serial.begin(9600); // Configure LED as output pinMode(led, OUTPUT); } void loop() { morse_base(31, 16); pause_word(); }