Example of checking for a valid note:

Dependencies:   SLCD mbed-rtos mbed

Fork of Serial_IO_test_v5 by Stanley Cohen

Revision:
2:8196b4cc681b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serialO_v5.cpp	Mon Mar 09 00:33:25 2015 +0000
@@ -0,0 +1,97 @@
+#include "mbed.h"
+#include <iostream>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <locale.h> 
+#include "rtos.h"
+#include "SLCD.h"
+
+#define LCDLEN          10
+#define MAXCHAR         4
+#define ALL8          "8888"
+#define LCDUPDATE       100 //ms
+#define LEDBLINKTIME    300 // ms *** NOTE Change of units ***
+#define SERIALREADTIME  50 //ms
+// ASCII constants
+#define CR              '\r'
+
+
+
+
+DigitalOut rLed(LED_RED);
+
+ 
+Serial pc(USBTX, USBRX); // tx, rx
+SLCD slcd; //define LCD display
+char rxChar;
+char rxString[LCDLEN];
+string rxRealString;
+
+void clearString (char * aString){
+    int i;
+    int sSize = sizeof(aString);
+    
+    for (i=0; i< sSize; i++){
+        aString[i] = NULL;
+    }
+    return;
+}
+    
+    
+
+void LCDMessNoDwell(char *lMess){
+        slcd.Home();
+        slcd.clear();
+        slcd.printf(lMess);
+}
+
+// use "thread" in the name to keep things straight 
+// note the use of void constant * args - understand memory resources
+// Thes are "forever loops"
+void LCDdis_thread(void const *args){
+    while(true) {
+        LCDMessNoDwell(rxString);
+        Thread::wait(LCDUPDATE);
+    }
+}
+
+void serial_thread(void const *args){
+   static int charIndex =0;
+   int rxStringLen;
+   while(true) {
+      if (pc.readable()) {                // only read from the serial port if there is a character
+            rxChar= toupper(pc.getc());              // reading clears the buffer
+            // construct a 4-digit string for the LCD          
+            // check for carriage return           
+            if (rxChar == CR) { 
+                rxRealString.assign(rxString);                                                                
+                rxStringLen = rxRealString.length();      
+                pc.printf("%s - StringLen = %d OK \n\r", rxString, rxStringLen);
+                charIndex = 0; // start building string from position zero next time around
+            } else {
+                if(charIndex == 0) clearString(rxString);
+                rxString[charIndex] = rxChar;
+                rxRealString.assign(rxString);
+                pc.printf("%s\n\r", rxString);      
+                charIndex = (charIndex + 1)% (MAXCHAR); // Only allow 4 characters then roll over
+               
+            }
+      }
+      Thread::wait(SERIALREADTIME);
+    }
+}
+
+int main()
+{  
+ 
+    Thread lthread(LCDdis_thread);
+    Thread serthread(serial_thread);
+    
+    sprintf(rxString,"%s",ALL8);  // just put something on the LCD to show it's working
+
+    while (true) {     
+        rLed = !rLed; // toggle led
+        Thread::wait(LEDBLINKTIME);
+    }
+}
\ No newline at end of file