FRDM-KL46Z board sLCD demo code
Fork of FRDM-KL46Z LCD rtc Demo by
main.cpp@8:18e86eb228ca, 2014-10-01 (annotated)
- Committer:
- salemtang
- Date:
- Wed Oct 01 13:11:15 2014 +0000
- Revision:
- 8:18e86eb228ca
- Parent:
- 7:33a8bfcbe3be
- Child:
- 11:f1721a70b14e
20141001_2211 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 | 4:15da67d64f85 | 14 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) |
star297 | 0:4f67859595b2 | 15 | #include "mbed.h" |
salemtang | 6:10b73ebdba3d | 16 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST |
salemtang | 8:18e86eb228ca | 17 | #if (defined RTC_CLOCK_TEST) || (defined SLCD_BLINKING_TEST) |
star297 | 0:4f67859595b2 | 18 | #include "SLCD.h" |
salemtang | 8:18e86eb228ca | 19 | #endif // RTC_CLOCK_TEST || SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 20 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 21 | #include "MAG3110.h" |
salemtang | 8:18e86eb228ca | 22 | #include "MMA8451Q.h" |
salemtang | 8:18e86eb228ca | 23 | #include "TSISensor.h" |
salemtang | 8:18e86eb228ca | 24 | #endif // SLCD_BLINKING_TEST |
salemtang | 6:10b73ebdba3d | 25 | |
salemtang | 6:10b73ebdba3d | 26 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 27 | // general define |
salemtang | 6:10b73ebdba3d | 28 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 29 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 30 | #define LED_ON 0 |
salemtang | 8:18e86eb228ca | 31 | #define LED_OFF 1 |
salemtang | 8:18e86eb228ca | 32 | #define PRESS_ON 0 |
salemtang | 8:18e86eb228ca | 33 | #define PRESS_OFF 1 |
salemtang | 8:18e86eb228ca | 34 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
salemtang | 8:18e86eb228ca | 35 | #endif // SLCD_BLINKING_TEST |
star297 | 0:4f67859595b2 | 36 | |
salemtang | 6:10b73ebdba3d | 37 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 38 | // struct define |
salemtang | 6:10b73ebdba3d | 39 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 40 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 41 | struct KL46_SENSOR_DATA { |
salemtang | 8:18e86eb228ca | 42 | int sw1State; |
salemtang | 8:18e86eb228ca | 43 | int sw3State; |
salemtang | 8:18e86eb228ca | 44 | float accValX; |
salemtang | 8:18e86eb228ca | 45 | float accValY; |
salemtang | 8:18e86eb228ca | 46 | float accValZ; |
salemtang | 8:18e86eb228ca | 47 | float slider; |
salemtang | 8:18e86eb228ca | 48 | float light; |
salemtang | 8:18e86eb228ca | 49 | int magValX; |
salemtang | 8:18e86eb228ca | 50 | int magValY; |
salemtang | 8:18e86eb228ca | 51 | int magValZ; |
salemtang | 8:18e86eb228ca | 52 | } sensorData; |
salemtang | 8:18e86eb228ca | 53 | #endif // SLCD_BLINKING_TEST |
salemtang | 3:fb38dbc95b12 | 54 | |
salemtang | 6:10b73ebdba3d | 55 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 56 | // external function |
salemtang | 6:10b73ebdba3d | 57 | // ----------------------------------------------------------------------------- |
star297 | 0:4f67859595b2 | 58 | |
salemtang | 6:10b73ebdba3d | 59 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 60 | // function prototype |
salemtang | 6:10b73ebdba3d | 61 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 62 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 3:fb38dbc95b12 | 63 | void initializeSetting (void); |
salemtang | 8:18e86eb228ca | 64 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST |
salemtang | 4:15da67d64f85 | 65 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 66 | void ledBlink (float dutyfactor); |
salemtang | 6:10b73ebdba3d | 67 | #endif // LED_BLINK_TEST |
salemtang | 4:15da67d64f85 | 68 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 69 | void rtcClock (void); |
salemtang | 3:fb38dbc95b12 | 70 | void scrollMessage (void); |
salemtang | 3:fb38dbc95b12 | 71 | void switchinput1_INTIRQ (void); |
salemtang | 3:fb38dbc95b12 | 72 | void switchinput3_INTIRQ (void); |
salemtang | 6:10b73ebdba3d | 73 | #endif // LED_BLINK_TEST |
salemtang | 8:18e86eb228ca | 74 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 75 | void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2); |
salemtang | 8:18e86eb228ca | 76 | #endif // SLCD_BLINKING_TEST |
salemtang | 3:fb38dbc95b12 | 77 | |
salemtang | 6:10b73ebdba3d | 78 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 79 | // external variable |
salemtang | 6:10b73ebdba3d | 80 | // ----------------------------------------------------------------------------- |
salemtang | 2:678c0be8c23d | 81 | |
salemtang | 6:10b73ebdba3d | 82 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 83 | // global variable |
salemtang | 6:10b73ebdba3d | 84 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 85 | #if (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 3:fb38dbc95b12 | 86 | PwmOut greenled_PO(LED1); |
salemtang | 3:fb38dbc95b12 | 87 | PwmOut redled_PO(LED2); |
salemtang | 3:fb38dbc95b12 | 88 | DigitalIn switchinput1_DI(SW1); |
salemtang | 3:fb38dbc95b12 | 89 | DigitalIn switchinput3_DI(SW3); |
salemtang | 4:15da67d64f85 | 90 | float defaultdutyfactor = 0.0; |
salemtang | 8:18e86eb228ca | 91 | #endif // LED_BLINK_TEST || SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 92 | #if (defined RTC_CLOCK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 4:15da67d64f85 | 93 | DigitalOut greenled_DO(LED1); |
salemtang | 4:15da67d64f85 | 94 | DigitalOut redled_DO(LED2); |
salemtang | 3:fb38dbc95b12 | 95 | InterruptIn switchinput1_INT(SW1); |
salemtang | 3:fb38dbc95b12 | 96 | InterruptIn switchinput3_INT(SW3); |
star297 | 0:4f67859595b2 | 97 | SLCD slcd; |
star297 | 0:4f67859595b2 | 98 | Timer scroll; |
star297 | 0:4f67859595b2 | 99 | struct tm t; |
salemtang | 2:678c0be8c23d | 100 | int i, j, k, lastscroll, display_timer, minute, hour, colon, dp; |
star297 | 1:34f0bfc62803 | 101 | char message[60]; |
star297 | 0:4f67859595b2 | 102 | char buffer[32]; |
salemtang | 8:18e86eb228ca | 103 | #endif // RTC_CLOCK_TEST || SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 104 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 105 | AnalogIn light(PTE22); // analog-light input |
salemtang | 8:18e86eb228ca | 106 | TSISensor slider; // Capacitive Touch Slider |
salemtang | 8:18e86eb228ca | 107 | MAG3110 mag(PTE25, PTE24); // Magnetometer |
salemtang | 8:18e86eb228ca | 108 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
salemtang | 8:18e86eb228ca | 109 | Serial usb_osda(USBTX, USBRX); // OpenSDA Terminal |
salemtang | 8:18e86eb228ca | 110 | #endif // SLCD_BLINKING_TEST |
star297 | 0:4f67859595b2 | 111 | |
salemtang | 6:10b73ebdba3d | 112 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 113 | // function |
salemtang | 6:10b73ebdba3d | 114 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 115 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 116 | //! @brief Main Function |
salemtang | 6:10b73ebdba3d | 117 | //! @param [in] nil |
salemtang | 6:10b73ebdba3d | 118 | //! @retval int |
salemtang | 6:10b73ebdba3d | 119 | // ----------------------------------------------------------------------------- |
salemtang | 6:10b73ebdba3d | 120 | int main (void) |
star297 | 1:34f0bfc62803 | 121 | { |
salemtang | 8:18e86eb228ca | 122 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 3:fb38dbc95b12 | 123 | initializeSetting(); |
salemtang | 8:18e86eb228ca | 124 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST |
salemtang | 2:678c0be8c23d | 125 | |
salemtang | 3:fb38dbc95b12 | 126 | while (true) { |
salemtang | 4:15da67d64f85 | 127 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 128 | rtcClock(); |
salemtang | 6:10b73ebdba3d | 129 | #endif // RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 130 | |
salemtang | 4:15da67d64f85 | 131 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 132 | if (!switchinput1_DI) { |
salemtang | 4:15da67d64f85 | 133 | ledBlink(0.5); |
salemtang | 4:15da67d64f85 | 134 | } else if (!switchinput3_DI) { |
salemtang | 3:fb38dbc95b12 | 135 | ledBlink(1.0); |
star297 | 1:34f0bfc62803 | 136 | } else { |
salemtang | 4:15da67d64f85 | 137 | ledBlink(2.0); |
star297 | 0:4f67859595b2 | 138 | } |
salemtang | 6:10b73ebdba3d | 139 | #endif // LED_BLINK_TEST |
salemtang | 8:18e86eb228ca | 140 | |
salemtang | 8:18e86eb228ca | 141 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 142 | // disable all SLCD DPs |
salemtang | 8:18e86eb228ca | 143 | slcd.DP(0, false); slcd.DP(1, false); slcd.DP(2, false); |
salemtang | 8:18e86eb228ca | 144 | |
salemtang | 8:18e86eb228ca | 145 | // MAIN/Loop/Sensing and Storing data -----------------// |
salemtang | 8:18e86eb228ca | 146 | sensorData.sw1State = switchinput1_DI; sensorData.sw3State = switchinput3_DI; |
salemtang | 8:18e86eb228ca | 147 | sensorData.accValX = acc.getAccX(); // accX[-1..1]->mouse (Lab1) |
salemtang | 8:18e86eb228ca | 148 | sensorData.accValY = acc.getAccY(); // accY[-1..1]->mouse (Lab1) |
salemtang | 8:18e86eb228ca | 149 | sensorData.accValZ = acc.getAccZ(); // accZ[-1..1]->rLED |
salemtang | 8:18e86eb228ca | 150 | sensorData.slider = slider.readPercentage() * 100; |
salemtang | 8:18e86eb228ca | 151 | sensorData.light = light; |
salemtang | 8:18e86eb228ca | 152 | sensorData.magValX = mag.readVal(MAG_OUT_X_MSB); |
salemtang | 8:18e86eb228ca | 153 | sensorData.magValY = mag.readVal(MAG_OUT_Y_MSB); |
salemtang | 8:18e86eb228ca | 154 | sensorData.magValZ = mag.readVal(MAG_OUT_Z_MSB); |
salemtang | 8:18e86eb228ca | 155 | |
salemtang | 8:18e86eb228ca | 156 | // MAIN/Loop/Processing and Actions -------------------// |
salemtang | 8:18e86eb228ca | 157 | // sensor -> terminal |
salemtang | 8:18e86eb228ca | 158 | if (sensorData.sw1State != PRESS_OFF) { |
salemtang | 8:18e86eb228ca | 159 | greenled_DO = !greenled_DO; //blinking |
salemtang | 8:18e86eb228ca | 160 | usb_osda.printf(" \r\n"); |
salemtang | 8:18e86eb228ca | 161 | usb_osda.printf(" Switches. Light . Slider . Accelerometer . Magnetometer . Compass\r\n"); |
salemtang | 8:18e86eb228ca | 162 | usb_osda.printf(" SW1:SW2| LUX | TSI | accX : accY : accZ | magX: magY: maxZ | Heading\r\n"); |
salemtang | 8:18e86eb228ca | 163 | usb_osda.printf(" %d : %d | %1.3f | %2.0f %% | %+1.3f:%+1.3f:%+1.3f| %5d:%5d:%5d | Lab3 \r\n", |
salemtang | 8:18e86eb228ca | 164 | sensorData.sw1State, sensorData.sw3State, sensorData.light, sensorData.slider, |
salemtang | 8:18e86eb228ca | 165 | sensorData.accValX, sensorData.accValY, sensorData.accValZ, |
salemtang | 8:18e86eb228ca | 166 | (short)sensorData.magValX, (short)sensorData.magValY, (short)sensorData.magValZ); |
salemtang | 8:18e86eb228ca | 167 | } greenled_DO = LED_OFF; |
salemtang | 8:18e86eb228ca | 168 | |
salemtang | 8:18e86eb228ca | 169 | // acc: z-axis 1g min-blinking//acc: z-axis 1g min-blinking |
salemtang | 8:18e86eb228ca | 170 | redled_PO = abs(sensorData.accValZ); |
salemtang | 8:18e86eb228ca | 171 | |
salemtang | 8:18e86eb228ca | 172 | if (sensorData.slider) { |
salemtang | 8:18e86eb228ca | 173 | slcd.printf(" %3.0f", sensorData.slider); // night->light .. 1->0 |
salemtang | 8:18e86eb228ca | 174 | } else { |
salemtang | 8:18e86eb228ca | 175 | slcd.printf("%1.3f", sensorData.light); // left->right .. 0->100% |
salemtang | 8:18e86eb228ca | 176 | } |
salemtang | 8:18e86eb228ca | 177 | wait(0.05); // wait 50ms |
salemtang | 8:18e86eb228ca | 178 | #endif // SLCD_BLINKING_TEST |
star297 | 0:4f67859595b2 | 179 | } |
star297 | 1:34f0bfc62803 | 180 | } |
star297 | 0:4f67859595b2 | 181 | |
salemtang | 6:10b73ebdba3d | 182 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 183 | //! @brief Initialize Setting |
salemtang | 6:10b73ebdba3d | 184 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 185 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 186 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 187 | #if (defined RTC_CLOCK_TEST) || (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 3:fb38dbc95b12 | 188 | void initializeSetting (void) |
salemtang | 3:fb38dbc95b12 | 189 | { |
salemtang | 8:18e86eb228ca | 190 | #if (defined LED_BLINK_TEST) || (defined SLCD_BLINKING_TEST) |
salemtang | 3:fb38dbc95b12 | 191 | switchinput1_DI.mode(PullUp); |
salemtang | 3:fb38dbc95b12 | 192 | switchinput3_DI.mode(PullUp); |
salemtang | 8:18e86eb228ca | 193 | #endif // LED_BLINK_TEST || SLCD_BLINKING_TEST |
salemtang | 4:15da67d64f85 | 194 | |
salemtang | 4:15da67d64f85 | 195 | #ifdef RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 196 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 197 | |
salemtang | 3:fb38dbc95b12 | 198 | slcd.All_Segments(1); |
salemtang | 3:fb38dbc95b12 | 199 | wait(2); |
salemtang | 3:fb38dbc95b12 | 200 | slcd.All_Segments(0); |
salemtang | 3:fb38dbc95b12 | 201 | wait(1); |
salemtang | 3:fb38dbc95b12 | 202 | |
salemtang | 3:fb38dbc95b12 | 203 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 204 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 205 | |
salemtang | 4:15da67d64f85 | 206 | sprintf(message, " rtc clock sw3 sets the hours sw1 sets the minutes"); |
salemtang | 3:fb38dbc95b12 | 207 | |
salemtang | 3:fb38dbc95b12 | 208 | // scrolling message |
salemtang | 3:fb38dbc95b12 | 209 | scroll.start(); |
salemtang | 3:fb38dbc95b12 | 210 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 211 | while (i < 58) { |
salemtang | 3:fb38dbc95b12 | 212 | scrollMessage(); |
salemtang | 3:fb38dbc95b12 | 213 | } |
salemtang | 3:fb38dbc95b12 | 214 | } |
salemtang | 3:fb38dbc95b12 | 215 | wait(1); |
salemtang | 3:fb38dbc95b12 | 216 | |
salemtang | 5:15c484c41006 | 217 | switchinput1_INT.rise(switchinput1_INTIRQ); |
salemtang | 5:15c484c41006 | 218 | switchinput3_INT.rise(switchinput3_INTIRQ); |
salemtang | 6:10b73ebdba3d | 219 | #endif // RTC_CLOCK_TEST |
salemtang | 8:18e86eb228ca | 220 | |
salemtang | 8:18e86eb228ca | 221 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 222 | greenled_DO = LED_ON; // Green LED ON to indicate running/writing |
salemtang | 8:18e86eb228ca | 223 | redled_PO = LED_OFF; // Red LED OFF |
salemtang | 8:18e86eb228ca | 224 | redled_PO.period (150); |
salemtang | 8:18e86eb228ca | 225 | |
salemtang | 8:18e86eb228ca | 226 | //---- MAIN/Inits (Wait4SW1) -> Start! --------------------// |
salemtang | 8:18e86eb228ca | 227 | // wait for Press SW1 - e.g. for HID/CDC/MsensorData Windows install. |
salemtang | 8:18e86eb228ca | 228 | SLCD_blinking_msg_wait(" o","PrES"); // Lab1=Hid; 2=cdc; 3=MsensorData |
salemtang | 8:18e86eb228ca | 229 | |
salemtang | 8:18e86eb228ca | 230 | //---- MAIN/Inits Interface -------------------------------// |
salemtang | 8:18e86eb228ca | 231 | usb_osda.baud (115200); |
salemtang | 8:18e86eb228ca | 232 | usb_osda.printf ("\n___________________________________\r\n"); |
salemtang | 8:18e86eb228ca | 233 | 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 | 234 | |
salemtang | 8:18e86eb228ca | 235 | //---- MAIN/Inits Done! (Wait4SW1) -> MANI/Loop -----------// |
salemtang | 8:18e86eb228ca | 236 | greenled_DO = LED_OFF; // Inits are done |
salemtang | 8:18e86eb228ca | 237 | #endif // SLCD_BLINKING_TEST |
salemtang | 3:fb38dbc95b12 | 238 | } |
salemtang | 8:18e86eb228ca | 239 | #endif // RTC_CLOCK_TEST || LED_BLINK_TEST || SLCD_BLINKING_TEST |
salemtang | 3:fb38dbc95b12 | 240 | |
salemtang | 6:10b73ebdba3d | 241 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 242 | //! @brief LED Blink |
salemtang | 6:10b73ebdba3d | 243 | //! @param [in] dutyfactor Duty Factor Integer |
salemtang | 3:fb38dbc95b12 | 244 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 245 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 246 | #ifdef LED_BLINK_TEST |
salemtang | 3:fb38dbc95b12 | 247 | void ledBlink (float dutyfactor) |
salemtang | 3:fb38dbc95b12 | 248 | { |
salemtang | 3:fb38dbc95b12 | 249 | redled_PO.write(defaultdutyfactor); |
salemtang | 3:fb38dbc95b12 | 250 | greenled_PO.write(dutyfactor - defaultdutyfactor); |
salemtang | 6:10b73ebdba3d | 251 | defaultdutyfactor += 0.01; |
salemtang | 3:fb38dbc95b12 | 252 | if (defaultdutyfactor >= dutyfactor) defaultdutyfactor = 0.0; |
salemtang | 6:10b73ebdba3d | 253 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 254 | } |
salemtang | 4:15da67d64f85 | 255 | #endif |
salemtang | 3:fb38dbc95b12 | 256 | |
salemtang | 6:10b73ebdba3d | 257 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 258 | //! @brief RTC Clock |
salemtang | 6:10b73ebdba3d | 259 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 260 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 261 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 262 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 263 | void rtcClock (void) |
salemtang | 3:fb38dbc95b12 | 264 | { |
salemtang | 3:fb38dbc95b12 | 265 | time_t seconds = time(NULL); |
salemtang | 3:fb38dbc95b12 | 266 | |
salemtang | 3:fb38dbc95b12 | 267 | if (display_timer > 6) { |
salemtang | 5:15c484c41006 | 268 | // display Hours,Minutes for 2 seconds |
salemtang | 5:15c484c41006 | 269 | strftime(buffer, 4, "%H%M", localtime(&seconds)); |
salemtang | 3:fb38dbc95b12 | 270 | slcd.Colon(1); |
salemtang | 3:fb38dbc95b12 | 271 | redled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 272 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 273 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 274 | } else { |
salemtang | 5:15c484c41006 | 275 | // display Minutes,Seconds for 8 seconds |
salemtang | 5:15c484c41006 | 276 | strftime(buffer, 4, "%M%S", localtime(&seconds)); |
salemtang | 3:fb38dbc95b12 | 277 | slcd.Colon(0); |
salemtang | 3:fb38dbc95b12 | 278 | redled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 279 | slcd.DP2(1); |
salemtang | 3:fb38dbc95b12 | 280 | greenled_DO = 0; |
salemtang | 3:fb38dbc95b12 | 281 | } |
salemtang | 3:fb38dbc95b12 | 282 | |
salemtang | 3:fb38dbc95b12 | 283 | slcd.printf(buffer); |
salemtang | 3:fb38dbc95b12 | 284 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 285 | slcd.DP2(0); |
salemtang | 3:fb38dbc95b12 | 286 | greenled_DO = 1; |
salemtang | 3:fb38dbc95b12 | 287 | display_timer++; |
salemtang | 3:fb38dbc95b12 | 288 | if (display_timer > 9) display_timer = 0; |
salemtang | 3:fb38dbc95b12 | 289 | wait(0.5); |
salemtang | 3:fb38dbc95b12 | 290 | } |
salemtang | 6:10b73ebdba3d | 291 | #endif // RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 292 | |
salemtang | 6:10b73ebdba3d | 293 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 294 | //! @brief Scroll Message |
salemtang | 6:10b73ebdba3d | 295 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 296 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 297 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 298 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 299 | void scrollMessage (void) |
star297 | 0:4f67859595b2 | 300 | { |
star297 | 1:34f0bfc62803 | 301 | if (scroll.read_ms() > lastscroll + 350) { |
star297 | 0:4f67859595b2 | 302 | scroll.reset(); |
star297 | 1:34f0bfc62803 | 303 | if (i > 58) { |
salemtang | 4:15da67d64f85 | 304 | i = 0; |
star297 | 0:4f67859595b2 | 305 | } |
star297 | 0:4f67859595b2 | 306 | int j, k = i; |
star297 | 0:4f67859595b2 | 307 | for (j = 0; j < 4; j++) { |
star297 | 0:4f67859595b2 | 308 | if (message[k+j]) { |
star297 | 0:4f67859595b2 | 309 | slcd.putc(message[k+j]); |
star297 | 0:4f67859595b2 | 310 | } else { |
star297 | 0:4f67859595b2 | 311 | slcd.putc(' '); |
star297 | 0:4f67859595b2 | 312 | k--; |
star297 | 0:4f67859595b2 | 313 | } |
star297 | 0:4f67859595b2 | 314 | } |
star297 | 0:4f67859595b2 | 315 | i++; |
salemtang | 2:678c0be8c23d | 316 | lastscroll = scroll.read_ms(); |
star297 | 0:4f67859595b2 | 317 | } |
star297 | 0:4f67859595b2 | 318 | } |
salemtang | 6:10b73ebdba3d | 319 | #endif // RTC_CLOCK_TEST |
salemtang | 4:15da67d64f85 | 320 | |
salemtang | 6:10b73ebdba3d | 321 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 322 | //! @brief Set Minutes ISR |
salemtang | 6:10b73ebdba3d | 323 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 324 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 325 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 326 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 327 | void switchinput1_INTIRQ (void) |
star297 | 0:4f67859595b2 | 328 | { |
salemtang | 2:678c0be8c23d | 329 | display_timer = 7; |
star297 | 0:4f67859595b2 | 330 | time_t seconds = time(NULL); |
star297 | 1:34f0bfc62803 | 331 | char buffer[2]; |
star297 | 0:4f67859595b2 | 332 | strftime(buffer, 2,"%H", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 333 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 334 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 335 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 336 | minute++; |
salemtang | 2:678c0be8c23d | 337 | if (minute > 59) minute = 0; |
salemtang | 6:10b73ebdba3d | 338 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 339 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 340 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 341 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 342 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 343 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 344 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 345 | } |
salemtang | 6:10b73ebdba3d | 346 | #endif // RTC_CLOCK_TEST |
star297 | 0:4f67859595b2 | 347 | |
salemtang | 6:10b73ebdba3d | 348 | // ----------------------------------------------------------------------------- |
salemtang | 3:fb38dbc95b12 | 349 | //! @brief Set Hours ISR |
salemtang | 6:10b73ebdba3d | 350 | //! @param [in] nil |
salemtang | 3:fb38dbc95b12 | 351 | //! @retval nil |
salemtang | 6:10b73ebdba3d | 352 | // ----------------------------------------------------------------------------- |
salemtang | 4:15da67d64f85 | 353 | #ifdef RTC_CLOCK_TEST |
salemtang | 3:fb38dbc95b12 | 354 | void switchinput3_INTIRQ (void) |
star297 | 0:4f67859595b2 | 355 | { |
salemtang | 2:678c0be8c23d | 356 | display_timer = 7; |
star297 | 0:4f67859595b2 | 357 | time_t seconds = time(NULL); |
star297 | 0:4f67859595b2 | 358 | char buffer[2]; |
star297 | 1:34f0bfc62803 | 359 | strftime(buffer, 2,"%H", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 360 | hour = atoi(buffer); // get Hour integer |
star297 | 0:4f67859595b2 | 361 | strftime(buffer, 2,"%M", localtime(&seconds)); |
salemtang | 6:10b73ebdba3d | 362 | minute = atoi(buffer); // get Minutes integer |
star297 | 0:4f67859595b2 | 363 | hour++; |
salemtang | 2:678c0be8c23d | 364 | if (hour > 23) hour = 0; |
salemtang | 6:10b73ebdba3d | 365 | t.tm_sec = 0; // Seconds reset to zero |
star297 | 1:34f0bfc62803 | 366 | t.tm_min = minute; |
star297 | 1:34f0bfc62803 | 367 | t.tm_hour = hour; |
star297 | 1:34f0bfc62803 | 368 | t.tm_mday = 1; |
star297 | 1:34f0bfc62803 | 369 | t.tm_mon = 2; |
star297 | 1:34f0bfc62803 | 370 | t.tm_year = 114; |
salemtang | 2:678c0be8c23d | 371 | set_time(mktime(&t)); |
star297 | 0:4f67859595b2 | 372 | } |
salemtang | 6:10b73ebdba3d | 373 | #endif //RTC_CLOCK_TEST |
salemtang | 8:18e86eb228ca | 374 | |
salemtang | 8:18e86eb228ca | 375 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 376 | //! @brief SLCD Blinking Massage |
salemtang | 8:18e86eb228ca | 377 | //! @param [in] *slcd_msg1 Massage 1 |
salemtang | 8:18e86eb228ca | 378 | //! @param [in] *slcd_msg2 Massage 2 |
salemtang | 8:18e86eb228ca | 379 | //! @retval nil |
salemtang | 8:18e86eb228ca | 380 | // ----------------------------------------------------------------------------- |
salemtang | 8:18e86eb228ca | 381 | #ifdef SLCD_BLINKING_TEST |
salemtang | 8:18e86eb228ca | 382 | void SLCD_blinking_msg_wait (char *slcd_msg1, char *slcd_msg2) |
salemtang | 8:18e86eb228ca | 383 | { |
salemtang | 8:18e86eb228ca | 384 | char wait4sw1 = 0; // 500ms blinking |
salemtang | 8:18e86eb228ca | 385 | slcd.CharPosition = 0; |
salemtang | 8:18e86eb228ca | 386 | // wait for Press SW1 - to start mag calibration |
salemtang | 8:18e86eb228ca | 387 | while (switchinput1_DI == PRESS_ON); // wait for release |
salemtang | 8:18e86eb228ca | 388 | while (switchinput1_DI == PRESS_OFF) { // wait for press |
salemtang | 8:18e86eb228ca | 389 | if (++wait4sw1 < 150) { // 300ms |
salemtang | 8:18e86eb228ca | 390 | slcd.printf(slcd_msg1); |
salemtang | 8:18e86eb228ca | 391 | } else { //200ms |
salemtang | 8:18e86eb228ca | 392 | slcd.printf (slcd_msg2); |
salemtang | 8:18e86eb228ca | 393 | wait (0.002); |
salemtang | 8:18e86eb228ca | 394 | slcd.CharPosition = 0; |
salemtang | 8:18e86eb228ca | 395 | } |
salemtang | 8:18e86eb228ca | 396 | } |
salemtang | 8:18e86eb228ca | 397 | while (switchinput1_DI == PRESS_ON); // wait for release |
salemtang | 8:18e86eb228ca | 398 | } |
salemtang | 8:18e86eb228ca | 399 | #endif // SLCD_BLINKING_TEST |