FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Revision:
8:18e86eb228ca
Parent:
7:33a8bfcbe3be
Child:
11:f1721a70b14e
--- a/main.cpp	Mon Sep 29 15:55:03 2014 +0000
+++ b/main.cpp	Wed Oct 01 13:11:15 2014 +0000
@@ -1,7 +1,7 @@
 /**
  * @file   main.cpp
  * @brief  Abstract
- * @copyright (c) 
+ * @copyright (c) Salem TANG
  */
 // -----------------------------------------------------------------------------
 //  note
@@ -14,17 +14,43 @@
 #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
 #include "mbed.h"
 #endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
-#ifdef RTC_CLOCK_TEST
+#if (defined RTC_CLOCK_TEST) || (defined SLCD_BLINKING_TEST)
 #include "SLCD.h"
-#endif  // RTC_CLOCK_TEST
+#endif  // RTC_CLOCK_TEST || SLCD_BLINKING_TEST
+#ifdef SLCD_BLINKING_TEST
+#include "MAG3110.h"
+#include "MMA8451Q.h"
+#include "TSISensor.h"
+#endif  // SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //  general define
 // -----------------------------------------------------------------------------
+#ifdef SLCD_BLINKING_TEST
+#define LED_ON  0
+#define LED_OFF 1
+#define PRESS_ON  0
+#define PRESS_OFF 1
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+#endif  // SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //  struct define
 // -----------------------------------------------------------------------------
+#ifdef SLCD_BLINKING_TEST
+struct KL46_SENSOR_DATA {
+    int   sw1State;
+    int   sw3State;
+    float accValX;
+    float accValY;
+    float accValZ;
+    float slider;
+    float light;
+    int   magValX;
+    int   magValY;
+    int   magValZ;
+} sensorData;
+#endif  // SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //  external function
@@ -33,9 +59,9 @@
 // -----------------------------------------------------------------------------
 //  function prototype
 // -----------------------------------------------------------------------------
-#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
+#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST)
 void initializeSetting (void);
-#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
+#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST
 #ifdef LED_BLINK_TEST
 void ledBlink (float dutyfactor);
 #endif  // LED_BLINK_TEST
@@ -45,6 +71,9 @@
 void switchinput1_INTIRQ (void);
 void switchinput3_INTIRQ (void);
 #endif  // LED_BLINK_TEST
+#ifdef SLCD_BLINKING_TEST
+void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2);
+#endif  // SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //  external variable
@@ -53,14 +82,14 @@
 // -----------------------------------------------------------------------------
 //  global variable
 // -----------------------------------------------------------------------------
-#ifdef LED_BLINK_TEST
+#if (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST)
 PwmOut greenled_PO(LED1);
 PwmOut redled_PO(LED2);
 DigitalIn switchinput1_DI(SW1);
 DigitalIn switchinput3_DI(SW3);
 float defaultdutyfactor = 0.0;
-#endif  // LED_BLINK_TEST
-#ifdef RTC_CLOCK_TEST
+#endif  // LED_BLINK_TEST || SLCD_BLINKING_TEST
+#if (defined RTC_CLOCK_TEST) || (defined SLCD_BLINKING_TEST)
 DigitalOut greenled_DO(LED1);
 DigitalOut redled_DO(LED2);
 InterruptIn switchinput1_INT(SW1);
@@ -71,7 +100,14 @@
 int i, j, k, lastscroll, display_timer, minute, hour, colon, dp;
 char message[60];
 char buffer[32];
-#endif  // RTC_CLOCK_TEST
+#endif  // RTC_CLOCK_TEST || SLCD_BLINKING_TEST
+#ifdef SLCD_BLINKING_TEST
+AnalogIn  light(PTE22);  // analog-light input
+TSISensor slider;  // Capacitive Touch Slider
+MAG3110 mag(PTE25, PTE24);  // Magnetometer
+MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
+Serial usb_osda(USBTX, USBRX);  // OpenSDA Terminal
+#endif  // SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //  function
@@ -83,9 +119,9 @@
 // -----------------------------------------------------------------------------
 int main (void)
 {
-#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
+#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST)
     initializeSetting();
-#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
+#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST
 
     while (true) {
 #ifdef RTC_CLOCK_TEST
@@ -101,6 +137,45 @@
             ledBlink(2.0);
         }
 #endif  // LED_BLINK_TEST
+
+#ifdef SLCD_BLINKING_TEST
+        // disable all SLCD DPs
+        slcd.DP(0, false); slcd.DP(1, false); slcd.DP(2, false);
+
+        // MAIN/Loop/Sensing and Storing data -----------------//
+        sensorData.sw1State = switchinput1_DI; sensorData.sw3State = switchinput3_DI;
+        sensorData.accValX = acc.getAccX();  // accX[-1..1]->mouse (Lab1)
+        sensorData.accValY = acc.getAccY();  // accY[-1..1]->mouse (Lab1)
+        sensorData.accValZ = acc.getAccZ();  // accZ[-1..1]->rLED
+        sensorData.slider = slider.readPercentage() * 100;
+        sensorData.light = light;
+        sensorData.magValX = mag.readVal(MAG_OUT_X_MSB);
+        sensorData.magValY = mag.readVal(MAG_OUT_Y_MSB);
+        sensorData.magValZ = mag.readVal(MAG_OUT_Z_MSB);
+
+        // MAIN/Loop/Processing and Actions -------------------//
+        // sensor -> terminal
+        if (sensorData.sw1State != PRESS_OFF) {
+            greenled_DO = !greenled_DO; //blinking 
+            usb_osda.printf(" \r\n");
+            usb_osda.printf(" Switches. Light . Slider . Accelerometer       . Magnetometer      . Compass\r\n");
+            usb_osda.printf("  SW1:SW2|  LUX  |  TSI   |  accX : accY : accZ |  magX: magY: maxZ | Heading\r\n");
+            usb_osda.printf("  %d : %d  | %1.3f |  %2.0f %%  | %+1.3f:%+1.3f:%+1.3f| %5d:%5d:%5d |  Lab3 \r\n", 
+                sensorData.sw1State, sensorData.sw3State, sensorData.light, sensorData.slider, 
+                sensorData.accValX, sensorData.accValY, sensorData.accValZ, 
+                (short)sensorData.magValX, (short)sensorData.magValY, (short)sensorData.magValZ);
+        } greenled_DO = LED_OFF;
+
+        // acc: z-axis 1g min-blinking//acc: z-axis 1g min-blinking
+        redled_PO = abs(sensorData.accValZ);
+
+        if (sensorData.slider) {
+            slcd.printf(" %3.0f", sensorData.slider);  // night->light .. 1->0
+        } else {
+            slcd.printf("%1.3f", sensorData.light);  // left->right .. 0->100%
+        }
+        wait(0.05);  // wait 50ms
+#endif  // SLCD_BLINKING_TEST
     }
 }
 
@@ -109,13 +184,13 @@
 //! @param  [in] nil
 //! @retval nil
 // -----------------------------------------------------------------------------
-#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST)
+#if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST)
 void initializeSetting (void)
 {
-#ifdef LED_BLINK_TEST
+#if (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST)
     switchinput1_DI.mode(PullUp);
     switchinput3_DI.mode(PullUp);
-#endif  // LED_BLINK_TEST
+#endif  // LED_BLINK_TEST || SLCD_BLINKING_TEST
 
 #ifdef RTC_CLOCK_TEST
     time_t seconds = time(NULL);
@@ -142,8 +217,26 @@
     switchinput1_INT.rise(switchinput1_INTIRQ);
     switchinput3_INT.rise(switchinput3_INTIRQ);
 #endif  // RTC_CLOCK_TEST
+    
+#ifdef SLCD_BLINKING_TEST
+    greenled_DO = LED_ON;  // Green LED ON to indicate running/writing
+    redled_PO = LED_OFF;  // Red LED OFF
+    redled_PO.period (150);
+    
+    //---- MAIN/Inits (Wait4SW1) -> Start! --------------------//  
+    // wait for Press SW1 - e.g. for HID/CDC/MsensorData Windows install.
+    SLCD_blinking_msg_wait("   o","PrES");  // Lab1=Hid; 2=cdc; 3=MsensorData
+
+    //---- MAIN/Inits Interface -------------------------------//
+    usb_osda.baud (115200);
+    usb_osda.printf ("\n___________________________________\r\n");
+    usb_osda.printf ("\nFRDM-KL46Z_Lab\r\n \r\n I am a CDC serial port @OpensensorDataA/mUSB. Baud=115200 \r\n");
+
+    //---- MAIN/Inits Done! (Wait4SW1) -> MANI/Loop -----------//
+    greenled_DO = LED_OFF;  // Inits are done
+#endif  // SLCD_BLINKING_TEST
 }
-#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST
+#endif  // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST
 
 // -----------------------------------------------------------------------------
 //! @brief  LED Blink
@@ -278,3 +371,29 @@
     set_time(mktime(&t));
 }
 #endif  //RTC_CLOCK_TEST
+
+// -----------------------------------------------------------------------------
+//! @brief  SLCD Blinking Massage
+//! @param  [in] *slcd_msg1 Massage 1
+//! @param  [in] *slcd_msg2 Massage 2
+//! @retval nil
+// -----------------------------------------------------------------------------
+#ifdef SLCD_BLINKING_TEST
+void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2)
+{
+    char wait4sw1 = 0;  // 500ms blinking
+    slcd.CharPosition = 0;
+    // wait for Press SW1 - to start mag calibration
+    while (switchinput1_DI == PRESS_ON);  // wait for release
+    while (switchinput1_DI == PRESS_OFF) {  // wait for press
+        if (++wait4sw1 < 150) {  // 300ms
+            slcd.printf(slcd_msg1);
+        } else {  //200ms
+            slcd.printf (slcd_msg2);
+            wait (0.002);
+            slcd.CharPosition = 0;
+        }
+    }
+    while (switchinput1_DI == PRESS_ON);  // wait for release
+}
+#endif  // SLCD_BLINKING_TEST