FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp@11:f1721a70b14e, 2014-10-02 (annotated)
- Committer:
- salemtang
- Date:
- Thu Oct 02 14:12:56 2014 +0000
- Revision:
- 11:f1721a70b14e
- Parent:
- 8:18e86eb228ca
20141002_2312 modified
Who changed what in which revision?
User | Revision | Line number | New 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 |