     prevButtonState[i] = cur;
     }
   }
+
+  //Morse Code button specifically (always listening)
+    boolean curINmor = digitalRead(morBtn);
+    if (curINmor != morINlast)
+      morINlastChange = millis();
+    if (((millis() - morINlastChange) > debounceTime) && (curINmor != morINstate))
+    {
+      morINstate = curINmor;    
+      if (curINmor)
+      {
+        morTimePressed = millis();
+        int diff = morTimePressed - morTimeReleased;
+        if (diff >= (2 * dot) && diff < (5 * dot)) //between letters is 3 dots
+            morMessage += " ";
+        else if (diff >= (5 * dot) && diff < (10 * dot)) //between words is 7 dots
+            morMessage += "|";
+      }
+      else {
+        morTimeReleased = millis();
+        int diff = morTimeReleased - morTimePressed;
+        if (diff < (1.75 * dot)) //single dot
+            morMessage += ".";
+        else if (diff >= (1.75 * dot)) //dash
+            morMessage += "-";
+      }
+    }
+    morINlast = curINmor;
+    
+
+  //always see if enough time has passed to send a message
+  if (morMessage != "" && (millis() - morTimeReleased > (dot * 11)) && !curINmor) //using 11 as an offest
+  { 
+    Serial.println(morMessage);
+    morMessage = "";
+  }
+
+
   
-  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
   //if we're not in bypass mode and a change needs to be made
   if (morseAvailable && (millis() - morStart > morLength))
-  {
-    //converts next char to a char pointer (Extra character for null terminator
-    char next[2];
-    String(morQue.peek()).toCharArray(next, 2);
-    Serial.println(morseMap.getValueOf(next));
-    Serial.println(morQue.peek());
+  {  
     //if the state is currently on
     if (morState)
     {
+       morState = 0;
+       digitalWrite(morLed, LOW);
+       analogWrite(morBuz, 0);
+     
+       
       //if the next character is another dit or dah, you must wait one dot duration worth
-      //if (morseMap.getValueOf(next) % 10 == 1)
-     // {
-        
-     // }
-      
+      if (morQue.peek() % 10)
+        morLength = dot;
+      //otherwise next is a pause of some sort
+      else
+      { 
+        morLength = (morQue.pop() / 10) * dot;       
+       //we have run out of morse code
+        if(morQue.isEmpty())
+         morseAvailable = false;
+      }
     }
     //just finished a pause, so no matter what we need the next character
     else{
-      
-    }
-    //we have run out of characters
-    //if(!morQue.isEmpty())
-    //{
-      //morQue.pop(
-   //   Serial.println("Empty");
-   // }
-  }
-  
-
+      morState = 1;
+      digitalWrite(morLed, HIGH);
+      analogWrite(morBuz, buzzerLevel);
+      morLength = (morQue.pop() / 10) * dot;
+    }
+   morStart = millis();
+  }
 }//end loop
-
-
 
 
 //expect morse code to start with . or - and sequences are in the form 12031021, BOTH END WITH ~

      //start index = inclusive, end index = exlusive (this removes tilde)
      recString = recString.substring(0, endIndex);

      
      //PROCESS MORSE CODE (space between letters, pipe between words)
      if (recString.charAt(0) == '.' || recString.charAt(0) == '-') 
      {
        //Add to Queue
        for (int i = 0; i < recString.length(); i++)
        {
          morQue.push(recString.charAt(i));
        }
        morseAvailable = true; 
      }
   
      //PROCESS SEQUENCE  

      if (playerWasCorrect)
      {
        animationIndex = 0;
        endI = 15;
      }
      else {
        animationIndex = 16;
        endI = 22;
      }
    }
    //if an LED has been on and it's time to turn it off
