FRDM-KL46Z board sLCD demo code

Dependencies:   SLCD mbed

Fork of FRDM-KL46Z LCD rtc Demo by Paul Staron

Committer:
salemtang
Date:
Thu Oct 02 14:14:28 2014 +0000
Revision:
12:cae0afb130b1
Parent:
11:f1721a70b14e
20141002_2315 modified

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salemtang 6:10b73ebdba3d 1 /**
salemtang 6:10b73ebdba3d 2 * @file main.cpp
salemtang 6:10b73ebdba3d 3 * @brief Abstract
salemtang 8:18e86eb228ca 4 * @copyright (c) Salem TANG
salemtang 6:10b73ebdba3d 5 */
salemtang 6:10b73ebdba3d 6 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 7 // note
salemtang 6:10b73ebdba3d 8 // -----------------------------------------------------------------------------
salemtang 4:15da67d64f85 9
salemtang 6:10b73ebdba3d 10 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 11 // include files
salemtang 6:10b73ebdba3d 12 // -----------------------------------------------------------------------------
salemtang 7:33a8bfcbe3be 13 #include "main.h"
salemtang 11:f1721a70b14e 14 #ifdef SLCD_BLINKING_TEST
star297 0:4f67859595b2 15 #include "SLCD.h"
salemtang 8:18e86eb228ca 16 #include "MAG3110.h"
salemtang 8:18e86eb228ca 17 #include "MMA8451Q.h"
salemtang 8:18e86eb228ca 18 #include "TSISensor.h"
salemtang 8:18e86eb228ca 19 #endif // SLCD_BLINKING_TEST
salemtang 6:10b73ebdba3d 20
salemtang 6:10b73ebdba3d 21 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 22 // general define
salemtang 6:10b73ebdba3d 23 // -----------------------------------------------------------------------------
salemtang 8:18e86eb228ca 24 #ifdef SLCD_BLINKING_TEST
salemtang 8:18e86eb228ca 25 #define LED_ON 0
salemtang 8:18e86eb228ca 26 #define LED_OFF 1
salemtang 8:18e86eb228ca 27 #define PRESS_ON 0
salemtang 8:18e86eb228ca 28 #define PRESS_OFF 1
salemtang 8:18e86eb228ca 29 #define MMA8451_I2C_ADDRESS (0x1d<<1)
salemtang 8:18e86eb228ca 30 #endif // SLCD_BLINKING_TEST
star297 0:4f67859595b2 31
salemtang 6:10b73ebdba3d 32 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 33 // struct define
salemtang 6:10b73ebdba3d 34 // -----------------------------------------------------------------------------
salemtang 8:18e86eb228ca 35 #ifdef SLCD_BLINKING_TEST
salemtang 8:18e86eb228ca 36 struct KL46_SENSOR_DATA {
salemtang 8:18e86eb228ca 37 int sw1State;
salemtang 8:18e86eb228ca 38 int sw3State;
salemtang 8:18e86eb228ca 39 float accValX;
salemtang 8:18e86eb228ca 40 float accValY;
salemtang 8:18e86eb228ca 41 float accValZ;
salemtang 8:18e86eb228ca 42 float slider;
salemtang 8:18e86eb228ca 43 float light;
salemtang 8:18e86eb228ca 44 int magValX;
salemtang 8:18e86eb228ca 45 int magValY;
salemtang 8:18e86eb228ca 46 int magValZ;
salemtang 8:18e86eb228ca 47 } sensorData;
salemtang 8:18e86eb228ca 48 #endif // SLCD_BLINKING_TEST
salemtang 3:fb38dbc95b12 49
salemtang 6:10b73ebdba3d 50 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 51 // external function
salemtang 6:10b73ebdba3d 52 // -----------------------------------------------------------------------------
star297 0:4f67859595b2 53
salemtang 6:10b73ebdba3d 54 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 55 // function prototype
salemtang 6:10b73ebdba3d 56 // -----------------------------------------------------------------------------
salemtang 11:f1721a70b14e 57 #if (defined SLCD_BLINKING_TEST)
salemtang 3:fb38dbc95b12 58 void initializeSetting (void);
salemtang 8:18e86eb228ca 59 void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2);
salemtang 8:18e86eb228ca 60 #endif // SLCD_BLINKING_TEST
salemtang 3:fb38dbc95b12 61
salemtang 6:10b73ebdba3d 62 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 63 // external variable
salemtang 6:10b73ebdba3d 64 // -----------------------------------------------------------------------------
salemtang 2:678c0be8c23d 65
salemtang 6:10b73ebdba3d 66 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 67 // global variable
salemtang 6:10b73ebdba3d 68 // -----------------------------------------------------------------------------
salemtang 11:f1721a70b14e 69 #if (defined SLCD_BLINKING_TEST)
salemtang 3:fb38dbc95b12 70 PwmOut greenled_PO(LED1);
salemtang 3:fb38dbc95b12 71 PwmOut redled_PO(LED2);
salemtang 3:fb38dbc95b12 72 DigitalIn switchinput1_DI(SW1);
salemtang 3:fb38dbc95b12 73 DigitalIn switchinput3_DI(SW3);
salemtang 4:15da67d64f85 74 DigitalOut greenled_DO(LED1);
salemtang 4:15da67d64f85 75 DigitalOut redled_DO(LED2);
salemtang 3:fb38dbc95b12 76 InterruptIn switchinput1_INT(SW1);
salemtang 3:fb38dbc95b12 77 InterruptIn switchinput3_INT(SW3);
star297 0:4f67859595b2 78 SLCD slcd;
star297 0:4f67859595b2 79 Timer scroll;
salemtang 8:18e86eb228ca 80 AnalogIn light(PTE22); // analog-light input
salemtang 8:18e86eb228ca 81 TSISensor slider; // Capacitive Touch Slider
salemtang 8:18e86eb228ca 82 MAG3110 mag(PTE25, PTE24); // Magnetometer
salemtang 8:18e86eb228ca 83 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
salemtang 8:18e86eb228ca 84 Serial usb_osda(USBTX, USBRX); // OpenSDA Terminal
salemtang 11:f1721a70b14e 85 struct tm t;
salemtang 11:f1721a70b14e 86 int i, j, k, lastscroll, display_timer, minute, hour, colon, dp;
salemtang 11:f1721a70b14e 87 char message[60];
salemtang 11:f1721a70b14e 88 char buffer[32];
salemtang 11:f1721a70b14e 89 float defaultdutyfactor = 0.0;
salemtang 8:18e86eb228ca 90 #endif // SLCD_BLINKING_TEST
star297 0:4f67859595b2 91
salemtang 6:10b73ebdba3d 92 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 93 // function
salemtang 6:10b73ebdba3d 94 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 95 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 96 //! @brief Main Function
salemtang 6:10b73ebdba3d 97 //! @param [in] nil
salemtang 6:10b73ebdba3d 98 //! @retval int
salemtang 6:10b73ebdba3d 99 // -----------------------------------------------------------------------------
salemtang 6:10b73ebdba3d 100 int main (void)
star297 1:34f0bfc62803 101 {
salemtang 11:f1721a70b14e 102 #if (defined SLCD_BLINKING_TEST)
salemtang 3:fb38dbc95b12 103 initializeSetting();
salemtang 11:f1721a70b14e 104 #endif // SLCD_BLINKING_TEST
salemtang 2:678c0be8c23d 105
salemtang 3:fb38dbc95b12 106 while (true) {
salemtang 8:18e86eb228ca 107 #ifdef SLCD_BLINKING_TEST
salemtang 8:18e86eb228ca 108 // disable all SLCD DPs
salemtang 8:18e86eb228ca 109 slcd.DP(0, false); slcd.DP(1, false); slcd.DP(2, false);
salemtang 8:18e86eb228ca 110
salemtang 8:18e86eb228ca 111 // MAIN/Loop/Sensing and Storing data -----------------//
salemtang 8:18e86eb228ca 112 sensorData.sw1State = switchinput1_DI; sensorData.sw3State = switchinput3_DI;
salemtang 11:f1721a70b14e 113 sensorData.accValX = acc.getAccX(); // accX[-1..1]->mouse(Lab1)
salemtang 11:f1721a70b14e 114 sensorData.accValY = acc.getAccY(); // accY[-1..1]->mouse(Lab1)
salemtang 8:18e86eb228ca 115 sensorData.accValZ = acc.getAccZ(); // accZ[-1..1]->rLED
salemtang 8:18e86eb228ca 116 sensorData.slider = slider.readPercentage() * 100;
salemtang 8:18e86eb228ca 117 sensorData.light = light;
salemtang 8:18e86eb228ca 118 sensorData.magValX = mag.readVal(MAG_OUT_X_MSB);
salemtang 8:18e86eb228ca 119 sensorData.magValY = mag.readVal(MAG_OUT_Y_MSB);
salemtang 8:18e86eb228ca 120 sensorData.magValZ = mag.readVal(MAG_OUT_Z_MSB);
salemtang 8:18e86eb228ca 121
salemtang 8:18e86eb228ca 122 // MAIN/Loop/Processing and Actions -------------------//
salemtang 8:18e86eb228ca 123 // sensor -> terminal
salemtang 8:18e86eb228ca 124 if (sensorData.sw1State != PRESS_OFF) {
salemtang 11:f1721a70b14e 125 greenled_DO = !greenled_DO; // blinking
salemtang 8:18e86eb228ca 126 } greenled_DO = LED_OFF;
salemtang 8:18e86eb228ca 127
salemtang 11:f1721a70b14e 128 // acc:z-axis 1g min-blinking // acc:z-axis 1g min-blinking
salemtang 8:18e86eb228ca 129 redled_PO = abs(sensorData.accValZ);
salemtang 8:18e86eb228ca 130
salemtang 8:18e86eb228ca 131 if (sensorData.slider) {
salemtang 8:18e86eb228ca 132 slcd.printf(" %3.0f", sensorData.slider); // night->light .. 1->0
salemtang 8:18e86eb228ca 133 } else {
salemtang 8:18e86eb228ca 134 slcd.printf("%1.3f", sensorData.light); // left->right .. 0->100%
salemtang 8:18e86eb228ca 135 }
salemtang 8:18e86eb228ca 136 wait(0.05); // wait 50ms
salemtang 8:18e86eb228ca 137 #endif // SLCD_BLINKING_TEST
star297 0:4f67859595b2 138 }
star297 1:34f0bfc62803 139 }
star297 0:4f67859595b2 140
salemtang 6:10b73ebdba3d 141 // -----------------------------------------------------------------------------
salemtang 3:fb38dbc95b12 142 //! @brief Initialize Setting
salemtang 6:10b73ebdba3d 143 //! @param [in] nil
salemtang 3:fb38dbc95b12 144 //! @retval nil
salemtang 6:10b73ebdba3d 145 // -----------------------------------------------------------------------------
salemtang 11:f1721a70b14e 146 #if (defined SLCD_BLINKING_TEST)
salemtang 3:fb38dbc95b12 147 void initializeSetting (void)
salemtang 3:fb38dbc95b12 148 {
salemtang 11:f1721a70b14e 149 #if (defined SLCD_BLINKING_TEST)
salemtang 3:fb38dbc95b12 150 switchinput1_DI.mode(PullUp);
salemtang 3:fb38dbc95b12 151 switchinput3_DI.mode(PullUp);
salemtang 8:18e86eb228ca 152 greenled_DO = LED_ON; // Green LED ON to indicate running/writing
salemtang 8:18e86eb228ca 153 redled_PO = LED_OFF; // Red LED OFF
salemtang 8:18e86eb228ca 154 redled_PO.period (150);
salemtang 8:18e86eb228ca 155
salemtang 8:18e86eb228ca 156 //---- MAIN/Inits (Wait4SW1) -> Start! --------------------//
salemtang 8:18e86eb228ca 157 // wait for Press SW1 - e.g. for HID/CDC/MsensorData Windows install.
salemtang 8:18e86eb228ca 158 SLCD_blinking_msg_wait(" o","PrES"); // Lab1=Hid; 2=cdc; 3=MsensorData
salemtang 8:18e86eb228ca 159
salemtang 8:18e86eb228ca 160 //---- MAIN/Inits Interface -------------------------------//
salemtang 8:18e86eb228ca 161 usb_osda.baud (115200);
salemtang 8:18e86eb228ca 162 usb_osda.printf ("\n___________________________________\r\n");
salemtang 8:18e86eb228ca 163 usb_osda.printf ("\nFRDM-KL46Z_Lab\r\n \r\n I am a CDC serial port @OpensensorDataA/mUSB. Baud=115200 \r\n");
salemtang 8:18e86eb228ca 164
salemtang 8:18e86eb228ca 165 //---- MAIN/Inits Done! (Wait4SW1) -> MANI/Loop -----------//
salemtang 8:18e86eb228ca 166 greenled_DO = LED_OFF; // Inits are done
salemtang 8:18e86eb228ca 167 #endif // SLCD_BLINKING_TEST
salemtang 3:fb38dbc95b12 168 }
salemtang 11:f1721a70b14e 169 #endif // SLCD_BLINKING_TEST
salemtang 8:18e86eb228ca 170
salemtang 8:18e86eb228ca 171 // -----------------------------------------------------------------------------
salemtang 8:18e86eb228ca 172 //! @brief SLCD Blinking Massage
salemtang 8:18e86eb228ca 173 //! @param [in] *slcd_msg1 Massage 1
salemtang 8:18e86eb228ca 174 //! @param [in] *slcd_msg2 Massage 2
salemtang 8:18e86eb228ca 175 //! @retval nil
salemtang 8:18e86eb228ca 176 // -----------------------------------------------------------------------------
salemtang 8:18e86eb228ca 177 #ifdef SLCD_BLINKING_TEST
salemtang 8:18e86eb228ca 178 void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2)
salemtang 8:18e86eb228ca 179 {
salemtang 8:18e86eb228ca 180 char wait4sw1 = 0; // 500ms blinking
salemtang 8:18e86eb228ca 181 slcd.CharPosition = 0;
salemtang 8:18e86eb228ca 182 // wait for Press SW1 - to start mag calibration
salemtang 8:18e86eb228ca 183 while (switchinput1_DI == PRESS_ON); // wait for release
salemtang 8:18e86eb228ca 184 while (switchinput1_DI == PRESS_OFF) { // wait for press
salemtang 8:18e86eb228ca 185 if (++wait4sw1 < 150) { // 300ms
salemtang 8:18e86eb228ca 186 slcd.printf(slcd_msg1);
salemtang 8:18e86eb228ca 187 } else { //200ms
salemtang 8:18e86eb228ca 188 slcd.printf (slcd_msg2);
salemtang 8:18e86eb228ca 189 wait (0.002);
salemtang 8:18e86eb228ca 190 slcd.CharPosition = 0;
salemtang 8:18e86eb228ca 191 }
salemtang 8:18e86eb228ca 192 }
salemtang 8:18e86eb228ca 193 while (switchinput1_DI == PRESS_ON); // wait for release
salemtang 8:18e86eb228ca 194 }
salemtang 8:18e86eb228ca 195 #endif // SLCD_BLINKING_TEST