This FRDM-KL25Z demo will blink the RGB LED with all colors. The touch slider input controls the blinking frequency. The UART output shows the touch slider input.

Dependencies:   TSI mbed

Revision:
2:61fcde3ffe6e
Parent:
1:609d9df3ffdc
diff -r 609d9df3ffdc -r 61fcde3ffe6e main.cpp
--- a/main.cpp	Sat May 31 10:31:44 2014 +0000
+++ b/main.cpp	Sat May 31 12:01:24 2014 +0000
@@ -7,6 +7,23 @@
 #define RGB_COLORS              ((int) pow(2 *1.0, RGB_COMPONENTS *1.0))
 #define BAUDRATE                115200
 #define MAXDELAY                0.3
+#define UART_INTERVAL           0.2
+
+float sliderNewValue;       // temp data of touch slider
+float mainLoopDuration;     // main loop measurement
+float delay = MAXDELAY;     // blink delay
+Serial pc(USBTX, USBRX);    // UART
+
+void debugOutput()
+{
+    if (sliderNewValue > 0)
+    {
+        // UART output
+        pc.printf("slider input = %3.0f%%  -->  ", 100.0 * sliderNewValue);
+        pc.printf("blink delay = %3.0f ms", 1000 * delay);
+        pc.printf("   (last main loop took %4.0f ms)\n", mainLoopDuration);
+    }
+}
 
 int main()
 {
@@ -15,37 +32,41 @@
     DigitalOut led_rgb_grn(LED2);   // green
     DigitalOut led_rgb_blu(LED3);   // blue
     DigitalOut led_rgb[RGB_COMPONENTS] = {led_rgb_red, led_rgb_grn, led_rgb_blu};
-    float delay  = MAXDELAY; // blink delay
-
+    
     // Touch slider
     TSISensor tsi;
-    float sliderNewValue;
-
+    
     // UART
-    RawSerial pc(USBTX, USBRX);
-    char tmpString[64]; // text buffer
     pc.baud(BAUDRATE);
+    
+    // ticker for debugOutput()
+    Ticker ticker1;
+    ticker1.attach(&debugOutput, UART_INTERVAL);
 
+    // timer for main loop measurement
+    Timer timer1;
+
+    // main loop
     while (true)
     {
+        timer1.start();
+        
         // show all colors
         for (int i=1; i<RGB_COLORS; i++, wait(delay))   // for each possible color
         {
             for (int j=0; j<RGB_COMPONENTS; j++)            // for each LED component
                 led_rgb[j] = ( i & 1<<j ) ? LED_ON : LED_OFF;   // set LED component according to active color
-                
-            // check for slider input
+
+            // check for active slider input
             if ( (sliderNewValue = tsi.readPercentage()) > 0)
             {
                 // set delay to slider input
                 delay = MAXDELAY * sliderNewValue;
-                
-                // UART output (NOTE: practically, this will increase the blink delay)
-                sprintf(tmpString, "slider input = %3.0f%%  -->  ", 100.0 * sliderNewValue);
-                pc.puts(tmpString);
-                sprintf(tmpString, "blink delay = %3.0f ms\n", 1000 * delay);
-                pc.puts(tmpString);
             }
         }
+    
+        timer1.stop();
+        mainLoopDuration = timer1.read_ms();
+        timer1.reset();
     }
 }