const int spk = 7;

const int onOff = 2;

volatile int toggle;

boolean output;

int dot = 250; //dot time 250 ms;

int dash = 750; //dash is 3 dot times

int space = 750; //space is 3 dot times

int newWord = 1750; //space between words is 7 dot times

 

void setup() {

  pinMode (spk, OUTPUT);

  pinMode (onOff, INPUT_PULLUP);

  attachInterrupt(0, resetISR, LOW); //hardware interrupt on pin 2

}

 

void loop() {

  output = digitalRead (onOff);

  delay(150);//debounce

  if (output == 0 && toggle == 0) {

    toggle = 1;

  }

 

  while (toggle > 0) {

    tone(spk, 2000, dot); //letter S

    delay(dot + dot);

    tone(spk, 2000, dot);

    delay(dot + dot);

    tone(spk, 2000, dot);

    delay(dot + space);

 

    tone(spk, 2000, dash); //letter O

    delay(dash + dot);

    tone(spk, 2000, dash);

    delay(dash + dot);

    tone(spk, 2000, dash);

    delay(dash + space);

 

    tone(spk, 2000, dot); //letter S

    delay(dot + dot);

    tone(spk, 2000, dot);

    delay(dot + dot);

    tone(spk, 2000, dot);

    delay(newWord);

  }

}

void resetISR() { //reset function, shuts off xmitter

  if (toggle == 1) {

    toggle = 0;

  }

}