#define BUTTON_PIN 9 #define LED_PIN 2 uint16_t TIME_UNIT=200; uint16_t DOT_DELAY=1*TIME_UNIT; uint16_t DASH_DELAY=3*TIME_UNIT; uint16_t INTER_LETTER_DELAY=3*TIME_UNIT; uint16_t WORD_PAUSE=7*TIME_UNIT; uint16_t INTER_MARK_DELAY=1*TIME_UNIT; #define DOT 0 #define DASH 1 #define END 2 void setup() { // put your setup code here, to run once: pinMode(BUTTON_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, LOW); / Your Code to detect a button is pushed / { blink('s'); milliSecondDelay(INTER_LETTER_DELAY); blink('o'); milliSecondDelay(INTER_LETTER_DELAY); blink('s'); milliSecondDelay(WORD_PAUSE); blink('h'); milliSecondDelay(INTER_LETTER_DELAY); blink('e'); milliSecondDelay(INTER_LETTER_DELAY); blink('l'); milliSecondDelay(INTER_LETTER_DELAY); blink('p'); break; } } uint8_t convert(char letter){ /Your code to convert a letter into a number so it knows which row in morseCode[][] to enter / } void blink(char letter){ uint8_t morseCode[26][5] = { {DOT, DASH, END}, // a {DASH, DOT, DOT, DOT, END}, // b {DASH, DOT, DASH, DOT, END}, // c {DASH, DOT, DOT, END}, // d {DOT, END}, // e {DOT, DOT, DASH, DOT, END}, // f {DASH, DASH, DOT, END}, // g {DOT, DOT, DOT, DOT, END}, // h {DOT, DOT, END}, // i {DOT, DASH, DASH, DASH, END}, // j {DASH, DOT, DASH, END}, // k {DOT, DASH, DOT, DOT, END}, // l {DASH, DASH, END}, // m {DASH, DOT, END}, // n {DASH, DASH, DASH, END}, // o {DOT, DASH, DASH, DOT, END}, // p {DASH, DASH, DOT, DASH, END}, // q {DOT, DASH, DOT, END}, // r {DOT, DOT, DOT, END}, // s {DASH, END}, // t {DOT, DOT, DASH, END}, // u {DOT, DOT, DOT, DASH, END}, // v {DOT, DASH, DASH, END}, // w {DASH, DOT, DOT, DASH, END}, // x {DASH, DOT, DASH, DASH, END}, // y {DASH, DASH, DOT, DOT, END} // z }; uint8_t i = convert(letter); for (uint8_t j=0; j<5; j++){ if(morseCode[i][j] != END){ if (morseCode[i][j]==DOT){ /Your Code Turn it on for a DOT duration then Turn it off for the after-mark intermark delay / } else if (morseCode[i][j]==DASH){ /Your Code Turn it on for a DOT duration then Turn it off for the after-mark intermark delay / } } else j=5; } } void milliSecondDelay(uint16_t ms) { uint16_t i; for (i = 0; i < ms; i++) { microSecondDelay(1000); } } void microSecondDelay(uint16_t us) { uint16_t i; for (i = 0; i < us; i++) { asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); asm volatile("nop"); } }