Solo project mbed 2

Dependencies:   PololuLedStrip mbed

Fork of SX10_BigBangFinal_A by Tapton Eesarm

Revision:
2:bc7345c92188
Parent:
1:e4d11295b3f4
--- a/main.cpp	Mon Jan 30 13:10:56 2017 +0000
+++ b/main.cpp	Mon Feb 06 09:42:24 2017 +0000
@@ -2,17 +2,22 @@
 #include "PololuLedStrip.h"
 #include <iostream>
 
-#define LED_COUNT 60
+#define LED_COUNT 36 //was 60
 
 Serial pc(USBTX, USBRX); // tx, rx
 Serial device(p13, p14);  // tx, rx to connect to mbed 1
 
+DigitalIn intune(p19);
+DigitalIn toohigh(p18);
+DigitalIn toolow(p17);
+DigitalIn state(p16);
 DigitalOut ledd1(LED1);
 DigitalOut ledd2(LED2);
 DigitalOut ledd3(LED3);
 DigitalOut ledd4(LED4);
+DigitalIn myInputPin (p21); //select tuner or chord learning mode
 
-char rx_buffer[10]; //Only small as not an interupt buffer
+char typed[20];
 
 PololuLedStrip ledStrip(p11);
 
@@ -20,7 +25,7 @@
 
 Timer timer;
 
-int aMajor[6] = {0,2,2,2,0,-1};
+int aMajor[6] = {0,2,2,2,0,-1}; //<<<< CHORDS supported in Chord Mode for LED Strip
 int bMajor[6] = {2,4,4,4,2,-1};
 int cMajor[6] = {0,1,0,2,3,-1};
 int dMajor[6] = {2,3,2,0,-1,-1};
@@ -28,23 +33,12 @@
 int fMajor[6] = {1,-1,2,3,3,1};
 int gMajor[6] = {3,0,0,0,2,3};
 
-int aMinor[6] = {0,1,2,2,0,-1};
-int bMinor[6] = {2,3,4,4,2,-1};
-int cMinor[6] = {3,4,5,5,3,-1};
-int dMinor[6] = {1,3,2,0,-1,-1};
-int eMinor[6] = {0,0,0,2,2,0};
-int fMinor[6] = {1,1,1,3,3,1};
-int gMinor[6] = {-1,-1,-1,-1,0,0};
-int gMinorActual[6] = {3,3,3,5,5,3};
-
-int aSharpMajor[6] = {1,3,3,3,1,-1};
-int cSharpMajor[6] = {1,2,1,3,4,-1};
-int fSharpMajor[6] = {2,-1,3,4,4,2};
-int gSharpMajor[6] = {4,1,1,1,3,4};
-
-int aSharpMinor[6] = {1,2,3,3,1,-1};
-int fSharpMinor[6] = {2,2,2,4,4,2};
-
+int lowEstring[6] = {0,11,12,23,24,35}; //<<<< STRINGS supported in Tuner mode for LED strip
+int Astring[6] =    {1,10,13,22,25,34};
+int Dstring[6] =    {2,9,14,21,26,33};
+int Gstring[6] =    {3,8,15,20,27,32};
+int Bstring[6] =    {4,7,16,19,28,31};
+int HiEstring[6] =  {5,6,17,18,29,30};
 /* 
    Above are the various arrays which represent the location of the string
    played in a given fret to achieve a certain chord. The layout
@@ -92,96 +86,42 @@
 
 int decoder(string typed)
 {
-        int ascii = int(typed[0]);
-        // Convert the first character in the array 's' and find its
-        // hexadecimal code as a reference
-        int chordValue;
-        // Initialise a variable associated with the result so we can
-        // assess it later
-        if (65 <= ascii && ascii <= 71)
-        // If its hexadecimal number corresponds to a uppercase letter
-        // such that it is a major chord and...
-        {
-          //  if (typed.size() == 1)
-            // ...if the input is only one letter/symbol...
-          //  {
-                chordValue = ascii - 65; // Just set the chord as non sharp
-                
-                // ...then offset the hexadecimal code of that letter by 65
-                // to map it back to the original list of non-sharp major chords and
-                // store that value.
-          //  }
-          //  else
-            // ...if the input is more than one letter/symbol then assume
-            // a hash (#) was entered to indicate a sharp value so...
-          /*  {
-                chordValue = ascii - 51;
-                // ...offset the hexadecimal code by 51 to map it back to
-                // the original list of sharp major chords and store that value.
-            }
-          */
-        }
-        else if (97 <= ascii && ascii <= 103)
-        // If its hexadecimal number corresponds to a lowercase letter
-        // such that it is a minor chord and...
-        {
-          //  if (typed.size() == 1)
-            // ...if the input is only one letter/symbol...
-          //  {
-                chordValue = ascii - 90;
-                // ...then offset the hexadecimal code by 90 to map it back to
-                // the original list of non-sharp minor chords and store that value.
-           // }
-          //  else
-            // ...if the input is more than one letter/symbol then assume
-            // a hash (#) was entered to indicate a sharp value so...
-          //  {
-           //     chordValue = ascii - 76;
-                // ...offset the hexadecimal code by 51 to map it back to
-                // the original list of sharp minor chords and store that value.
-          //  }
-        } 
-        else
-        // If the typed character does not correspond to an existing chord then...
-        {
-            pc.printf("Incorrect input");
-            // Output an error message that indicates an incorrect input by the
-            // user and...
-            return(-99);
-            // ...output -99 to indicate an error has occured to other parts of
-            // the code.
-        }
-        
-   /*     if (typed.size() > 2)
-        // If the user input is greater than two characters then...
-        {
-            pc.printf("Incorrect input\n");
-            // Output an error message that indicates an incorrect input by the
-            // user and...
-            return(-99);
-            // ...output -99 to indicate an error has occured to other parts of
-            // the code. 
-        }
-  */      
-        if (chordValue != 15 && chordValue != 17 && chordValue != 18 && chordValue != 22 && chordValue != 23 && chordValue != 24 && chordValue != 25 && chordValue != 27)
-        // If the obtained chord value corresponds to a chord that can actually be
-        // played by Solo then...
-        {
-             return chordValue;
-             // ...output that chord value
-         }
-         else
-         // If the chord value corresponds to a chord that cannot be played by Solo or 
-         // is not even in the original table of chords then...
-         {
-             pc.printf("This chord will not be played by the Solo\n");
-             // Output an error message that indicates a chord that cannot be played by the
-             // Solo and...
-             return -1;
-             // ...output -1 to indicate an error with the input
-         }
+        int ascii = int(typed[0]);// get the hex value for input char from mbed1
+        int chordValue; //set up integer 0-6 to represent A-G for later
+        if (65 <= ascii && ascii <= 71) //test if mbed1 input is a major chord A-G
+             {
+                chordValue = ascii - 65; // it is A-G so set int to appropriate 0-6
+              //  pc.printf(" %d ", chordValue);
+/*                
+                switch (chordValue) { //for diagnostics use putc not printf to send 
+            case 0:                   //received char from mbed1 to mbed2's usb pc
+                pc.putc('A');
+                break;
+            case 1:
+                pc.putc('B');
+                break;
+            case 2:
+                pc.putc('C');                
+                break;
+            case 3:
+                pc.putc('D');                
+                break;
+            case 4:
+                pc.putc('E');                
+                break;
+            case 5:
+                pc.putc('F');                
+                break;
+            case 6:
+                pc.putc('G');               
+                break;
+                }
+  */                 
+              }
+return chordValue;
 }
 
+
 void illuminator (int position, int colour)
 {
      //pc.printf ("Position: %d Colour: %d\n",position,colour);
@@ -206,408 +146,272 @@
     }
 }
 
-void feedback(int colour)
-{
-    if (colour == 1)
-    {
-        pc.printf("Great Job!\n");
-    }
-    else if (colour == 0)
-    {
-        pc.printf("Processing...\n");
-    }
-    else if (colour == -1)
-    {
-        pc.printf("You suck!\n");
-    }
-    else
-    {
-        pc.printf("Error: Colour input incorrect");
-    }
-}
+               
+                //Possible to change to a case/switch structure improve speed?
+int shaper (int shape, int colour)// <<<<<< CHORD SHAPER >>>>>>>
+    {   
+    if (shape == 0)
+       {
+       for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(aMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 1)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(bMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+ 
+        }
+    else if (shape == 2)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(cMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 3)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(dMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 4)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(eMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 5)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(fMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 6)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (ledMapping(gMajor[i],i+1), colour);
+           }
+        //    feedback(colour);
+        }
 
-void identifier(int shape)
-{
-    int list;
-    // Initialise an integer variable 'result' that represents the list a chord belongs to.
-    int position;
-    // Initialise an integer variable 'position' that represents the chord's relative position
-    // in its allocated list.
-    const char* letter;
-    // Intialise a character variable 'letter' that will store the letter of the chord (A to G)
-    string type;
-    // Initialise a string (sentence) variable 'type' that will store the type of the chord
-    // e.g. "Sharp Minor" or "Major" etc.
-
-    list = int(shape/7);
-    // Set the value of the 'list' variable to correspond to the list to which
-    // the chord (represented by 'shape') belongs to. Each list holds 7 chords
-    // relating to the first 7 letters of the alphabet (A to G). Therefore the list
-    // a chord originates from can be determined by interpreting the integer value
-    // the chord rounds down to, when its value is divided by seven. For example...
-
-    if (list == 0)
-        // ...if the chord comes from list '0', then it must be...
-    {
-        type = "Major";
-        // ... a Major chord.
-    } else if (list == 1)
-        // ...if the chord comes from list '1', then it must be...
-    {
-        type = "Minor";
-        // ... a Minor chord.
-    } else if (list == 2)
-        // ...if the chord comes from list '2', then it must be...
-    {
-        type = "Sharp Major";
-        // ... a Sharp Major chord.
-    } else if (list == 3)
-        // ...if the chord comes from list '3', then it must be...
-    {
-        type = "Sharp Minor";
-        // ... a Sharp Minor chord.
+    // Send the colors to the LED strip.
+    // ledStrip.write(colors, LED_COUNT);
+    return (0);
     }
 
-    position = 7*(list + 1) - shape;
-    // Set the value of the 'position' as an indication of the position in the given list,
-    // that is to say that higher chord values in the same list will have a lower
-    // 'letter' due to the layout of the equation above. Irrespective of the list in
-    // which it occurs...
+                //Possible to change to a case/switch structure improve speed?
+int Tunershaper (int shape, int colour) // <<<<<<<< TUNER SHAPER >>>>>>>>>
+    {   
+    if (shape == 0)
+       {
+       for(int i = 0; i<6; i++)
+           {
+           illuminator (lowEstring[i], colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 1)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (Astring[i], colour);
+           }
+        //    feedback(colour);
+ 
+        }
+    else if (shape == 2)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (Dstring[i], colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 3)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (Gstring[i], colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 4)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (Bstring[i], colour);
+           }
+        //    feedback(colour);
+        }
+    else if (shape == 5)
+        {
+        for(int i = 0; i<6; i++)
+           {
+           illuminator (HiEstring[i], colour);
+           }
+        //    feedback(colour);
+        }
 
-    if (position == 1)
-        // ...if the position value is 1, then it must be...
-    {
-        letter = "G";
-        // ... a G chord.
-    } else if (position == 2)
-        // ...if the position value is 2, then it must be...
-    {
-        letter = "F";
-        // ... an F chord.
-    } else if (position == 3)
-        // ...if the position value is 2, then it must be...
-    {
-        letter = "E";
-        // ... an E chord.
-    } else if (position == 4)
-        // ...if the position value is 4, then it must be...
-    {
-        letter = "D";
-        // ... a D chord.
-    } else if (position == 5)
-        // ...if the position value is 5, then it must be...
-    {
-        letter = "C";
-        // ... a C chord.
-    } else if (position == 6)
-        // ...if the position value is 6, then it must be...
-    {
-        letter = "B";
-        // ... a B chord.
-    } else if (position == 7)
-        // ...if the position value is 7, then it must be...
-    {
-        letter = "A";
-        // ... an A chord.
-    }
-    pc.printf("%s %s\n",letter,type.c_str());
-    // Output the letter of the chord, followed by its type separated by a
-    // space such that the full name of the chord is displayed.
-}
-               
-//TODO fix return values
-//Change to a case/switch structure
-int shaper (int shape, int colour) 
-{
-    if (shape == 0)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(aMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 1)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(bMajor[i],i+1), colour);
-        }
-        feedback(colour);
- 
-    }
-    else if (shape == 2)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(cMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 3)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(dMajor[i],i+1), colour);
-        }
-        feedback(colour);
+    // Send the colors to the LED strip.
+    //ledStrip.write(colors, LED_COUNT);
+    return (0);
     }
 
-    else if (shape == 4)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(eMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 5)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(fMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 6)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(gMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 7)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(aMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 8)
-    {
-        for(int i = 0; i<6; i++)
+
+void clearLEDstrip() //writes to all the LEDs to clear them
+     {
+     wait(0.2);
+     for(int i=0; i < LED_COUNT ; i++)
         {
-            illuminator (ledMapping(bMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 9)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(cMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 10)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(dMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 11)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(eMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 12)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(fMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 13)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(gMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 14)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(aSharpMajor[i],i+1), colour);
+        colors[i] = (rgb_color){ 0, 0, 0 };
         }
-        feedback(colour);
-    }
-    else if (shape == 16)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator (ledMapping(cSharpMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 19)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator(ledMapping(fSharpMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 20)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator(ledMapping(gSharpMajor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 21)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator(ledMapping(aSharpMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else if (shape == 26)
-    {
-        for(int i = 0; i<6; i++)
-        {
-            illuminator(ledMapping(fSharpMinor[i],i+1), colour);
-        }
-        feedback(colour);
-    }
-    else
-    {
-        //this point should never be reached; there are no other chords
-        pc.printf ("Error: shaper failed\n");
-    }
-    // Send the colors to the LED strip.
-    ledStrip.write(colors, LED_COUNT);
-    if(colour == 1)
-    {
-       wait(0.5);
-       for(int i=0; i < LED_COUNT ; i++)
-       {
-          colors[i] = (rgb_color){ 0, 0, 0 };
-       }
-       ledStrip.write(colors, LED_COUNT);
-    }
+     ledStrip.write(colors, LED_COUNT);
+     }
 
-    return (0);
-}
-
-int tester (int testChord, int requestChord)
-{
- /* if (testChord == 0 || requestChord == 0)
-    {
-        return (99);
-    }
- */
-    if (testChord == requestChord)
-    {
-        return (1);
-    }
-    else
-    {
-        return (-1);
-    }
-}
-
-
-/*int interpreter(int requestedCode)// this function was all commented out
-{
-   int r = 0;
-    int chord = 0;
- 
-    r = rand() % 10;
-    chord = rand() % 24;
-    if(chord == 0) chord=1;
-        
-    if(r>1) return(requestedCode);
-    else return(chord);     
-
-}
-*/
-
+void callback() //interrupt from serial port from mbed1
+           {
+           ledd1=1; // received character from mbed1
+           typed[0]=device.getc(); //get char from mbed1 via serial port 
+           }
 int main()
 {
-    pc.baud (19200);
+    pc.baud (115200); //for pc usb
     device.baud(19200); //for communications with mbed 1
+    myInputPin.mode(PullUp);  //set the mbed to use a pullup resistor
     string chord;
-    char typed[20];
-    while(1)
-    {
-   //     pc.printf("Type in the chord you would like to use \n");
-   //     pc.scanf("%s",typed);
-   ledd1=0;
-   ledd2=0;
-   ledd3=0;
-   ledd4=0;
-    if (device.readable()){
-        //ledd1=1;
-        char som = device.getc();
-        if (som == 'Q'){ //Is the received byte a SOM (letter Q)?
-        for (int j=0; j<=6; j++) {  //if it is a SOM get the next 6 bytes from serial port
-            if (device.readable()){
-                //rx_buffer[j] = device.getc();
-                //pc.printf("%d%s", j,rx_buffer[j]);
-                som = device.getc();
-                if (j==1) { //get byte 3 (key/note) from serial port message
-                        typed[0] = som; // put the key /note into the typed array 
-                        pc.putc(typed[0]); //print it to a pc on the USB
-                        }
-                //pc.putc(device.getc());
-                //pc.printf("%d",j);
-          //      ledd2=1;
-                wait(0.1);
-                }
-                }
-                }
-            //    ledd3=1;
-            }
-        chordCode = decoder(typed);
-        if (chordCode != -99 && chordCode != -1)
+    int chordCode;
+    setbuf(stdin, NULL);//clear the serial input buffer
+    device.attach(&callback);// for serial interupt callback function
+    clearLEDstrip();
+ 
+     myInputPin.mode(PullUp);  //set the mbed to use a pullup resistor
+     if (myInputPin)  // <<<<SELECT GUITAR TUNER OR CHORD TRAINER FUNCTION>>>
         {
-            ledd1=1;
-            identifier(chordCode);
-            shaper(chordCode, 0);
-            interpretedChordCode = chordCode; // removed interpreter(chordCode);
-            testResult = tester(interpretedChordCode, chordCode);
-    
-            while(1)
-            {
-                if(testResult == -1)
+        while(1)
+             {
+             ledd1=0; //received character from mbed1
+             ledd2=toolow; //inputs from mbed1 mapped onto mbed 2 LED's 
+             ledd3=intune; // 
+             ledd4=toohigh;// 
+                    //          pc.putc(typed[0]); //debugging
+     /*        chordCode = decoder(typed); //takes input char from mbed1 and gives back 0-6 to represent chord selected A-G 
+             shaper(chordCode, 0); //light current chord in white (0)
+             wait(0.8); //hold it for a period so user can see it 
+             if (intune) //read mbed1 intune pin and light the green LEDs
+                {
+                shaper(chordCode, 1); //green light (1)
+                wait(0.4);
+                }
+             if ((toohigh) || (toolow))//read mbed1 toohigh and toolow pins and light the red LEDs
                 {
-                   ledd2=1;
-                   wait(2);
-                   shaper(chordCode, testResult);
-                   wait(0.5);
-                   shaper(chordCode, 0);
-                   wait(1);
-                   interpretedChordCode = chordCode; // removed interpreter(chordCode);
-                   testResult = tester(interpretedChordCode, chordCode);
+                shaper(chordCode, -1); //red light (-1)
+                wait(0.4); 
+                }  */
+                
+           /*  colors[0] = (rgb_color){0,40,0};
+             colors[11] = (rgb_color){0,40,0};
+             colors[12] = (rgb_color){0,40,0};
+             colors[23] = (rgb_color){0,40,0};
+             colors[24] = (rgb_color){0,40,0};
+             colors[35] = (rgb_color){0,40,0};
+             ledStrip.write(colors, LED_COUNT);
+             */
+            
+             for(int j = 0; j<6; j++)
+                {
+                chordCode=j;
+                Tunershaper(chordCode, -1); //red
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+                }
+                for(int j = 0; j<6; j++)
+                {
+                chordCode=j;
+                Tunershaper(chordCode, 1); //green
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+                }
+                 for(int j = 0; j<6; j++)
+                {
+                chordCode=j;
+                Tunershaper(chordCode, 0); //green
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
                 }
-                else if(testResult == 1)
-                {
-                   ledd3=1;
-                   wait(2); 
-                   shaper(chordCode, testResult);
-                   wait(0.5);
-                   break;
-                }
-                else if(testResult == 99)
+            /*    
+                chordCode=0;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+
+                chordCode=1;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+
+                chordCode=2;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+
+                chordCode=3;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+            
+                chordCode=4;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+            
+                chordCode=5;
+                Tunershaper(chordCode, 0); //white
+                wait(0.5); 
+                ledStrip.write(colors, LED_COUNT);
+            */
+                            
+            //clearLEDstrip();
+             }            
+        }
+     else   //if myinputpin Chord or Tuner mode = Chord mode selected
+        {   // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+            // ..............CHORD MODE.........................
+            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+        while(1)
+             {
+             ledd1=0; //received character from mbed1
+             ledd2=intune; //intune input from mbed1 
+             ledd3=toohigh; // toohigh input from mbed1
+             ledd4=state;// state input from mbed1
+                    //          pc.putc(typed[0]); //debugging
+             chordCode = decoder(typed); //takes input char from mbed1 and gives back 0-6 to represent chord selected A-G 
+             shaper(chordCode, 0); //light current chord in white (0)
+             wait(0.8); //hold it for a period so user can see it 
+             if (intune) //read mbed1 intune pin and light the green LEDs
                 {
-                    ledd4=1;
-                    pc.printf("Error");
-                    break;
+                shaper(chordCode, 1); //green light (1)
+                wait(0.4);
                 }
-            }
-        wait_ms(10);
-        }
-    }
+             if ((toohigh) || (toolow))//read mbed1 toohigh and toolow pins and light the red LEDs
+                {
+                shaper(chordCode, -1); //red light (-1)
+                wait(0.4); 
+                }
+             clearLEDstrip();
+             }
+        }       
 }
\ No newline at end of file