Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Hexi_OLED_SSD1351
main.cpp@0:a84d2425acba, 2019-07-26 (annotated)
- Committer:
- raynard
- Date:
- Fri Jul 26 13:37:55 2019 +0000
- Revision:
- 0:a84d2425acba
watch
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| raynard | 0:a84d2425acba | 1 | #include "mbed.h" |
| raynard | 0:a84d2425acba | 2 | #include "Hexi_KW40Z.h" |
| raynard | 0:a84d2425acba | 3 | #include "Hexi_OLED_SSD1351.h" |
| raynard | 0:a84d2425acba | 4 | #include "OLED_types.h" |
| raynard | 0:a84d2425acba | 5 | #include "OpenSans_Font.h" |
| raynard | 0:a84d2425acba | 6 | #include "string.h" |
| raynard | 0:a84d2425acba | 7 | #include <stdio.h> |
| raynard | 0:a84d2425acba | 8 | #include <stdlib.h> |
| raynard | 0:a84d2425acba | 9 | #include <string.h> |
| raynard | 0:a84d2425acba | 10 | |
| raynard | 0:a84d2425acba | 11 | |
| raynard | 0:a84d2425acba | 12 | #define LED_ON 0 |
| raynard | 0:a84d2425acba | 13 | #define LED_OFF 1 |
| raynard | 0:a84d2425acba | 14 | #define MPL3115A2_I2C_ADDRESS (0x60<<1) |
| raynard | 0:a84d2425acba | 15 | |
| raynard | 0:a84d2425acba | 16 | void StartHaptic(void); |
| raynard | 0:a84d2425acba | 17 | void StopHaptic(void const *n); |
| raynard | 0:a84d2425acba | 18 | |
| raynard | 0:a84d2425acba | 19 | |
| raynard | 0:a84d2425acba | 20 | |
| raynard | 0:a84d2425acba | 21 | DigitalOut redLed(LED1,1); |
| raynard | 0:a84d2425acba | 22 | DigitalOut greenLed(LED2,1); |
| raynard | 0:a84d2425acba | 23 | DigitalOut WHITELed(LED3,1); |
| raynard | 0:a84d2425acba | 24 | DigitalOut haptic(PTB9); |
| raynard | 0:a84d2425acba | 25 | DigitalOut sensorPowerEn(PTB12); |
| raynard | 0:a84d2425acba | 26 | DigitalOut powerEN (PTB12); |
| raynard | 0:a84d2425acba | 27 | DigitalOut led1(LED_GREEN); // RGB LED |
| raynard | 0:a84d2425acba | 28 | Serial pc(USBTX,USBRX); // Serial interface |
| raynard | 0:a84d2425acba | 29 | |
| raynard | 0:a84d2425acba | 30 | char text[20]; // Text Buffer for dynamic value displayed |
| raynard | 0:a84d2425acba | 31 | char text1[20]; // Text Buffer for dynamic value displayed |
| raynard | 0:a84d2425acba | 32 | char text2[20]; // Text Buffer for dynamic value displayed |
| raynard | 0:a84d2425acba | 33 | char text3[20]; // Text Buffer for dynamic value displayed |
| raynard | 0:a84d2425acba | 34 | char text4[20]; // Text Buffer for dynamic value displayed |
| raynard | 0:a84d2425acba | 35 | |
| raynard | 0:a84d2425acba | 36 | /* Define timer for haptic feedback */ |
| raynard | 0:a84d2425acba | 37 | RtosTimer hapticTimer(StopHaptic, osTimerOnce); |
| raynard | 0:a84d2425acba | 38 | |
| raynard | 0:a84d2425acba | 39 | /* Instantiate the Hexi KW40Z Driver (UART TX, UART RX) */ |
| raynard | 0:a84d2425acba | 40 | KW40Z kw40z_device(PTE24, PTE25); |
| raynard | 0:a84d2425acba | 41 | |
| raynard | 0:a84d2425acba | 42 | /* Instantiate the SSD1351 OLED Driver */ |
| raynard | 0:a84d2425acba | 43 | SSD1351 oled(PTB22,PTB21,PTC13,PTB20,PTE6, PTD15); /* (MOSI,SCLK,POWER,CS,RST,DC) */ |
| raynard | 0:a84d2425acba | 44 | //void page_1(void); |
| raynard | 0:a84d2425acba | 45 | |
| raynard | 0:a84d2425acba | 46 | |
| raynard | 0:a84d2425acba | 47 | |
| raynard | 0:a84d2425acba | 48 | |
| raynard | 0:a84d2425acba | 49 | /****************************Call Back Functions*******************************/ |
| raynard | 0:a84d2425acba | 50 | |
| raynard | 0:a84d2425acba | 51 | |
| raynard | 0:a84d2425acba | 52 | void ButtonRight(void) |
| raynard | 0:a84d2425acba | 53 | { |
| raynard | 0:a84d2425acba | 54 | StartHaptic(); |
| raynard | 0:a84d2425acba | 55 | pc.printf("opoooooooo"); |
| raynard | 0:a84d2425acba | 56 | |
| raynard | 0:a84d2425acba | 57 | } |
| raynard | 0:a84d2425acba | 58 | |
| raynard | 0:a84d2425acba | 59 | void ButtonLeft(void) |
| raynard | 0:a84d2425acba | 60 | { |
| raynard | 0:a84d2425acba | 61 | StartHaptic(); |
| raynard | 0:a84d2425acba | 62 | |
| raynard | 0:a84d2425acba | 63 | } |
| raynard | 0:a84d2425acba | 64 | |
| raynard | 0:a84d2425acba | 65 | void ButtonDown(void) |
| raynard | 0:a84d2425acba | 66 | { |
| raynard | 0:a84d2425acba | 67 | |
| raynard | 0:a84d2425acba | 68 | StartHaptic(); |
| raynard | 0:a84d2425acba | 69 | pc.printf("down"); |
| raynard | 0:a84d2425acba | 70 | |
| raynard | 0:a84d2425acba | 71 | } |
| raynard | 0:a84d2425acba | 72 | |
| raynard | 0:a84d2425acba | 73 | void ButtonUp(void) |
| raynard | 0:a84d2425acba | 74 | { |
| raynard | 0:a84d2425acba | 75 | StartHaptic(); |
| raynard | 0:a84d2425acba | 76 | pc.printf("up once"); |
| raynard | 0:a84d2425acba | 77 | |
| raynard | 0:a84d2425acba | 78 | } |
| raynard | 0:a84d2425acba | 79 | |
| raynard | 0:a84d2425acba | 80 | void ButtonSlide(void) |
| raynard | 0:a84d2425acba | 81 | { |
| raynard | 0:a84d2425acba | 82 | StartHaptic(); |
| raynard | 0:a84d2425acba | 83 | } |
| raynard | 0:a84d2425acba | 84 | void PassKey(void) |
| raynard | 0:a84d2425acba | 85 | { |
| raynard | 0:a84d2425acba | 86 | StartHaptic(); |
| raynard | 0:a84d2425acba | 87 | strcpy((char *) text,"PAIR CODE"); |
| raynard | 0:a84d2425acba | 88 | oled.TextBox((uint8_t *)text,0,25,95,18); |
| raynard | 0:a84d2425acba | 89 | |
| raynard | 0:a84d2425acba | 90 | /* Display Bond Pass Key in a 95px by 18px textbox at x=0,y=40 */ |
| raynard | 0:a84d2425acba | 91 | sprintf(text,"%d", kw40z_device.GetPassKey()); |
| raynard | 0:a84d2425acba | 92 | oled.TextBox((uint8_t *)text,0,40,95,18); |
| raynard | 0:a84d2425acba | 93 | } |
| raynard | 0:a84d2425acba | 94 | |
| raynard | 0:a84d2425acba | 95 | /***********************End of Call Back Functions*****************************/ |
| raynard | 0:a84d2425acba | 96 | |
| raynard | 0:a84d2425acba | 97 | |
| raynard | 0:a84d2425acba | 98 | |
| raynard | 0:a84d2425acba | 99 | |
| raynard | 0:a84d2425acba | 100 | |
| raynard | 0:a84d2425acba | 101 | /********************************Main******************************************/ |
| raynard | 0:a84d2425acba | 102 | |
| raynard | 0:a84d2425acba | 103 | |
| raynard | 0:a84d2425acba | 104 | int pages[5]; |
| raynard | 0:a84d2425acba | 105 | |
| raynard | 0:a84d2425acba | 106 | int row_count = 0; |
| raynard | 0:a84d2425acba | 107 | |
| raynard | 0:a84d2425acba | 108 | void pag_1(){ |
| raynard | 0:a84d2425acba | 109 | |
| raynard | 0:a84d2425acba | 110 | |
| raynard | 0:a84d2425acba | 111 | pc.printf("page1\n"); |
| raynard | 0:a84d2425acba | 112 | } |
| raynard | 0:a84d2425acba | 113 | void pag_2(){ |
| raynard | 0:a84d2425acba | 114 | |
| raynard | 0:a84d2425acba | 115 | |
| raynard | 0:a84d2425acba | 116 | pc.printf("page2\n"); |
| raynard | 0:a84d2425acba | 117 | } |
| raynard | 0:a84d2425acba | 118 | |
| raynard | 0:a84d2425acba | 119 | void pag_3(){ |
| raynard | 0:a84d2425acba | 120 | |
| raynard | 0:a84d2425acba | 121 | |
| raynard | 0:a84d2425acba | 122 | pc.printf("page3\n"); |
| raynard | 0:a84d2425acba | 123 | } |
| raynard | 0:a84d2425acba | 124 | |
| raynard | 0:a84d2425acba | 125 | void pag_4(){ |
| raynard | 0:a84d2425acba | 126 | |
| raynard | 0:a84d2425acba | 127 | |
| raynard | 0:a84d2425acba | 128 | pc.printf("page4\n"); |
| raynard | 0:a84d2425acba | 129 | } |
| raynard | 0:a84d2425acba | 130 | void pag_5(){ |
| raynard | 0:a84d2425acba | 131 | |
| raynard | 0:a84d2425acba | 132 | |
| raynard | 0:a84d2425acba | 133 | pc.printf("page5\n"); |
| raynard | 0:a84d2425acba | 134 | } |
| raynard | 0:a84d2425acba | 135 | void switch_page (int count) |
| raynard | 0:a84d2425acba | 136 | { |
| raynard | 0:a84d2425acba | 137 | //This function checks |
| raynard | 0:a84d2425acba | 138 | //the int value of the count to determine what page to load to the screen |
| raynard | 0:a84d2425acba | 139 | switch (count) { |
| raynard | 0:a84d2425acba | 140 | //checks and calls appropriate function |
| raynard | 0:a84d2425acba | 141 | case 0: |
| raynard | 0:a84d2425acba | 142 | // pull first page function |
| raynard | 0:a84d2425acba | 143 | pag_1(); |
| raynard | 0:a84d2425acba | 144 | break; |
| raynard | 0:a84d2425acba | 145 | |
| raynard | 0:a84d2425acba | 146 | case 1: |
| raynard | 0:a84d2425acba | 147 | // pull 2nd page function |
| raynard | 0:a84d2425acba | 148 | pag_2(); |
| raynard | 0:a84d2425acba | 149 | break; |
| raynard | 0:a84d2425acba | 150 | |
| raynard | 0:a84d2425acba | 151 | case 2: |
| raynard | 0:a84d2425acba | 152 | // pull 3rd page function |
| raynard | 0:a84d2425acba | 153 | pag_3(); |
| raynard | 0:a84d2425acba | 154 | break; |
| raynard | 0:a84d2425acba | 155 | |
| raynard | 0:a84d2425acba | 156 | case 3: |
| raynard | 0:a84d2425acba | 157 | // pull 4th page function |
| raynard | 0:a84d2425acba | 158 | pag_4(); |
| raynard | 0:a84d2425acba | 159 | break; |
| raynard | 0:a84d2425acba | 160 | |
| raynard | 0:a84d2425acba | 161 | |
| raynard | 0:a84d2425acba | 162 | case 4: |
| raynard | 0:a84d2425acba | 163 | // pull 5th page function |
| raynard | 0:a84d2425acba | 164 | pag_5(); |
| raynard | 0:a84d2425acba | 165 | break; |
| raynard | 0:a84d2425acba | 166 | |
| raynard | 0:a84d2425acba | 167 | default: |
| raynard | 0:a84d2425acba | 168 | // Do nothing |
| raynard | 0:a84d2425acba | 169 | break; |
| raynard | 0:a84d2425acba | 170 | |
| raynard | 0:a84d2425acba | 171 | } |
| raynard | 0:a84d2425acba | 172 | |
| raynard | 0:a84d2425acba | 173 | } |
| raynard | 0:a84d2425acba | 174 | |
| raynard | 0:a84d2425acba | 175 | void ButtonTouch() |
| raynard | 0:a84d2425acba | 176 | { |
| raynard | 0:a84d2425acba | 177 | StartHaptic(); |
| raynard | 0:a84d2425acba | 178 | |
| raynard | 0:a84d2425acba | 179 | // typedef int(*pageFunction)(); |
| raynard | 0:a84d2425acba | 180 | // pageFunction page_1 = pag_1; |
| raynard | 0:a84d2425acba | 181 | |
| raynard | 0:a84d2425acba | 182 | |
| raynard | 0:a84d2425acba | 183 | switch_page(row_count); |
| raynard | 0:a84d2425acba | 184 | if (row_count > 4) row_count = 4; |
| raynard | 0:a84d2425acba | 185 | |
| raynard | 0:a84d2425acba | 186 | row_count++; |
| raynard | 0:a84d2425acba | 187 | } |
| raynard | 0:a84d2425acba | 188 | |
| raynard | 0:a84d2425acba | 189 | |
| raynard | 0:a84d2425acba | 190 | void ButtonTouch2() |
| raynard | 0:a84d2425acba | 191 | { |
| raynard | 0:a84d2425acba | 192 | StartHaptic(); |
| raynard | 0:a84d2425acba | 193 | |
| raynard | 0:a84d2425acba | 194 | // typedef int(*pageFunction)(); |
| raynard | 0:a84d2425acba | 195 | // pageFunction page_1 = pag_1; |
| raynard | 0:a84d2425acba | 196 | |
| raynard | 0:a84d2425acba | 197 | |
| raynard | 0:a84d2425acba | 198 | |
| raynard | 0:a84d2425acba | 199 | if (row_count > 4) row_count = 4; |
| raynard | 0:a84d2425acba | 200 | row_count--; |
| raynard | 0:a84d2425acba | 201 | switch_page(row_count); |
| raynard | 0:a84d2425acba | 202 | } |
| raynard | 0:a84d2425acba | 203 | |
| raynard | 0:a84d2425acba | 204 | int main() |
| raynard | 0:a84d2425acba | 205 | { |
| raynard | 0:a84d2425acba | 206 | |
| raynard | 0:a84d2425acba | 207 | |
| raynard | 0:a84d2425acba | 208 | |
| raynard | 0:a84d2425acba | 209 | //kw40z_device.ToggleAdvertisementMode(); |
| raynard | 0:a84d2425acba | 210 | /* Register callbacks to application functions */ |
| raynard | 0:a84d2425acba | 211 | kw40z_device.attach_buttonLeft(&ButtonLeft); |
| raynard | 0:a84d2425acba | 212 | kw40z_device.attach_buttonRight(&ButtonRight); |
| raynard | 0:a84d2425acba | 213 | kw40z_device.attach_passkey(&PassKey); |
| raynard | 0:a84d2425acba | 214 | kw40z_device.attach_buttonDown(&ButtonDown); |
| raynard | 0:a84d2425acba | 215 | kw40z_device.attach_buttonUp(&ButtonUp); |
| raynard | 0:a84d2425acba | 216 | kw40z_device.PageIndex(&ButtonTouch); |
| raynard | 0:a84d2425acba | 217 | kw40z_device.PageIndex2(&ButtonTouch2); |
| raynard | 0:a84d2425acba | 218 | |
| raynard | 0:a84d2425acba | 219 | |
| raynard | 0:a84d2425acba | 220 | /* Turn on the backlight of the OLED Display */ |
| raynard | 0:a84d2425acba | 221 | oled.DimScreenON(); |
| raynard | 0:a84d2425acba | 222 | /* Fills the screen with solid black */ |
| raynard | 0:a84d2425acba | 223 | oled.FillScreen(COLOR_BLACK); |
| raynard | 0:a84d2425acba | 224 | /* Get OLED Class Default Text Properties */ |
| raynard | 0:a84d2425acba | 225 | oled_text_properties_t textProperties = {0}; |
| raynard | 0:a84d2425acba | 226 | oled.GetTextProperties(&textProperties); |
| raynard | 0:a84d2425acba | 227 | oled.FillScreen(COLOR_BLACK); |
| raynard | 0:a84d2425acba | 228 | |
| raynard | 0:a84d2425acba | 229 | while (true) { |
| raynard | 0:a84d2425acba | 230 | |
| raynard | 0:a84d2425acba | 231 | Thread::wait(0.1); |
| raynard | 0:a84d2425acba | 232 | WHITELed = !kw40z_device.GetAdvertisementMode(); /*Indicate BLE Advertisment Mode*/ |
| raynard | 0:a84d2425acba | 233 | Thread::wait(50); |
| raynard | 0:a84d2425acba | 234 | } |
| raynard | 0:a84d2425acba | 235 | } |
| raynard | 0:a84d2425acba | 236 | |
| raynard | 0:a84d2425acba | 237 | /******************************End of Main*************************************/ |
| raynard | 0:a84d2425acba | 238 | |
| raynard | 0:a84d2425acba | 239 | |
| raynard | 0:a84d2425acba | 240 | void StartHaptic(void) |
| raynard | 0:a84d2425acba | 241 | { |
| raynard | 0:a84d2425acba | 242 | hapticTimer.start(50); |
| raynard | 0:a84d2425acba | 243 | haptic = 1; |
| raynard | 0:a84d2425acba | 244 | } |
| raynard | 0:a84d2425acba | 245 | |
| raynard | 0:a84d2425acba | 246 | void StopHaptic(void const *n) |
| raynard | 0:a84d2425acba | 247 | { |
| raynard | 0:a84d2425acba | 248 | haptic = 0; |
| raynard | 0:a84d2425acba | 249 | hapticTimer.stop(); |
| raynard | 0:a84d2425acba | 250 | } |
| raynard | 0:a84d2425acba | 251 | |
| raynard | 0:a84d2425acba | 252 | |
| raynard | 0:a84d2425acba | 253 |