FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
Diff: main.cpp
- 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