Basic Example / test application for the on-board MICRON QSPI-Flash. Ported from DISCO_L476VG_QSPI. Added printing on serial output and LCD screen.
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG QSPI_DISCO_F746NG TS_DISCO_F746NG mbed
main.cpp@3:13b323fb08e8, 2015-10-21 (annotated)
- Committer:
- capsavon
- Date:
- Wed Oct 21 18:08:19 2015 +0000
- Revision:
- 3:13b323fb08e8
- Parent:
- 2:a655d6640167
- Child:
- 4:95cde28a5cf1
Callbacks work !
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
capsavon | 0:742b53764813 | 1 | #include "mbed.h" |
capsavon | 0:742b53764813 | 2 | #include "TS_DISCO_F746NG.h" |
capsavon | 0:742b53764813 | 3 | #include "LCD_DISCO_F746NG.h" |
capsavon | 0:742b53764813 | 4 | |
capsavon | 2:a655d6640167 | 5 | #include "main.h" |
capsavon | 2:a655d6640167 | 6 | |
capsavon | 0:742b53764813 | 7 | LCD_DISCO_F746NG lcd; |
capsavon | 0:742b53764813 | 8 | TS_DISCO_F746NG ts; |
capsavon | 3:13b323fb08e8 | 9 | DigitalOut myled(LED1); |
capsavon | 0:742b53764813 | 10 | |
capsavon | 2:a655d6640167 | 11 | //MenuGUIButton button01; |
capsavon | 2:a655d6640167 | 12 | //MenuGUIButton button02; |
capsavon | 2:a655d6640167 | 13 | |
capsavon | 2:a655d6640167 | 14 | // TODO : add Ticker function |
capsavon | 2:a655d6640167 | 15 | |
capsavon | 0:742b53764813 | 16 | int main() |
capsavon | 0:742b53764813 | 17 | { |
capsavon | 0:742b53764813 | 18 | TS_StateTypeDef TS_State; |
capsavon | 0:742b53764813 | 19 | uint16_t x, y; |
capsavon | 0:742b53764813 | 20 | uint8_t text[30]; |
capsavon | 0:742b53764813 | 21 | uint8_t status; |
capsavon | 0:742b53764813 | 22 | uint8_t idx; |
capsavon | 0:742b53764813 | 23 | uint8_t cleared = 0; |
capsavon | 0:742b53764813 | 24 | uint8_t prev_nb_touches = 0; |
capsavon | 0:742b53764813 | 25 | |
capsavon | 0:742b53764813 | 26 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO", CENTER_MODE); |
capsavon | 3:13b323fb08e8 | 27 | led_on(); |
capsavon | 2:a655d6640167 | 28 | wait(0.2); |
capsavon | 0:742b53764813 | 29 | |
capsavon | 0:742b53764813 | 30 | status = ts.Init(lcd.GetXSize(), lcd.GetYSize()); |
capsavon | 0:742b53764813 | 31 | if (status != TS_OK) { |
capsavon | 0:742b53764813 | 32 | lcd.Clear(LCD_COLOR_RED); |
capsavon | 0:742b53764813 | 33 | lcd.SetBackColor(LCD_COLOR_RED); |
capsavon | 0:742b53764813 | 34 | lcd.SetTextColor(LCD_COLOR_WHITE); |
capsavon | 0:742b53764813 | 35 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE); |
capsavon | 0:742b53764813 | 36 | } else { |
capsavon | 0:742b53764813 | 37 | lcd.Clear(LCD_COLOR_GREEN); |
capsavon | 0:742b53764813 | 38 | lcd.SetBackColor(LCD_COLOR_GREEN); |
capsavon | 0:742b53764813 | 39 | lcd.SetTextColor(LCD_COLOR_WHITE); |
capsavon | 0:742b53764813 | 40 | lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE); |
capsavon | 0:742b53764813 | 41 | } |
capsavon | 0:742b53764813 | 42 | |
capsavon | 2:a655d6640167 | 43 | wait(0.2); |
capsavon | 0:742b53764813 | 44 | lcd.SetFont(&Font12); |
capsavon | 0:742b53764813 | 45 | lcd.SetBackColor(LCD_COLOR_BLUE); |
capsavon | 0:742b53764813 | 46 | lcd.SetTextColor(LCD_COLOR_WHITE); |
capsavon | 3:13b323fb08e8 | 47 | led_off(); |
capsavon | 1:7bec6efe01d9 | 48 | |
capsavon | 2:a655d6640167 | 49 | /* For test / demo |
capsavon | 2:a655d6640167 | 50 | ------------------ |
capsavon | 2:a655d6640167 | 51 | 2 menus + 1 main menu. The main menu has two buttons, each calling one of the two sub-menus: |
capsavon | 2:a655d6640167 | 52 | |
capsavon | 2:a655d6640167 | 53 | |------| |------| |------| |
capsavon | 2:a655d6640167 | 54 | | b1 | | b3 | | b6 | |
capsavon | 2:a655d6640167 | 55 | |------| |------| |------| |
capsavon | 2:a655d6640167 | 56 | ->menu01 |
capsavon | 2:a655d6640167 | 57 | |
capsavon | 2:a655d6640167 | 58 | |------| |------| |------| |
capsavon | 2:a655d6640167 | 59 | | b2 | | b4 | | b7 | |
capsavon | 2:a655d6640167 | 60 | |------| |------| |------| |
capsavon | 3:13b323fb08e8 | 61 | ->menu02 -> Led ON |
capsavon | 0:742b53764813 | 62 | |
capsavon | 2:a655d6640167 | 63 | |------| |------| |
capsavon | 2:a655d6640167 | 64 | | b5 | | b8 | |
capsavon | 2:a655d6640167 | 65 | |------| |------| |
capsavon | 3:13b323fb08e8 | 66 | -> Led OFF |
capsavon | 2:a655d6640167 | 67 | menu_main menu01 menu02 |
capsavon | 2:a655d6640167 | 68 | |
capsavon | 2:a655d6640167 | 69 | */ |
capsavon | 2:a655d6640167 | 70 | |
capsavon | 2:a655d6640167 | 71 | MenuGUIButton button01 (10, 80, 80, 50, "b1", &lcd); |
capsavon | 2:a655d6640167 | 72 | MenuGUIButton button02 (10, 140, 80, 50, "b2", &lcd); |
capsavon | 2:a655d6640167 | 73 | MenuGUIButton button03 (100, 80, 80, 50, "b3", &lcd); |
capsavon | 2:a655d6640167 | 74 | MenuGUIButton button04 (100, 140, 80, 50, "b4", &lcd); |
capsavon | 2:a655d6640167 | 75 | |
capsavon | 2:a655d6640167 | 76 | MenuGUIButton button05 (190, 80, 80, 50, "b5", &lcd); |
capsavon | 3:13b323fb08e8 | 77 | button05.callback = true; |
capsavon | 3:13b323fb08e8 | 78 | //button05.callback_function = led_off; |
capsavon | 3:13b323fb08e8 | 79 | button05.callback_function = led_toggle; |
capsavon | 2:a655d6640167 | 80 | MenuGUIButton button06 (190, 140, 80, 50, "b6", &lcd); |
capsavon | 2:a655d6640167 | 81 | MenuGUIButton button07 (190, 80, 80, 50, "b7", &lcd); |
capsavon | 3:13b323fb08e8 | 82 | button07.callback = true; |
capsavon | 3:13b323fb08e8 | 83 | //button07.callback_function = led_on; |
capsavon | 3:13b323fb08e8 | 84 | button07.callback_function = led_toggle; |
capsavon | 2:a655d6640167 | 85 | MenuGUIButton button08 (190, 140, 80, 50, "b8", &lcd); |
capsavon | 2:a655d6640167 | 86 | |
capsavon | 2:a655d6640167 | 87 | // Main menu |
capsavon | 2:a655d6640167 | 88 | MenuGUIMenu menu_main (2, 10, 80); |
capsavon | 2:a655d6640167 | 89 | menu_main.add_button(&button01, 0, 1); |
capsavon | 2:a655d6640167 | 90 | menu_main.add_button(&button02, 1, 1); |
capsavon | 2:a655d6640167 | 91 | |
capsavon | 2:a655d6640167 | 92 | // Menu01 |
capsavon | 2:a655d6640167 | 93 | MenuGUIMenu menu01 (3, 100, 80); |
capsavon | 2:a655d6640167 | 94 | menu01.add_button(&button03, 0, 1); |
capsavon | 2:a655d6640167 | 95 | menu01.add_button(&button04, 1, 1); |
capsavon | 2:a655d6640167 | 96 | menu01.add_button(&button05, 2, 1); |
capsavon | 2:a655d6640167 | 97 | |
capsavon | 2:a655d6640167 | 98 | // Menu02 |
capsavon | 2:a655d6640167 | 99 | MenuGUIMenu menu02 (3, 190, 80); |
capsavon | 2:a655d6640167 | 100 | menu02.add_button(&button06, 0, 1); |
capsavon | 2:a655d6640167 | 101 | menu02.add_button(&button07, 1, 1); |
capsavon | 2:a655d6640167 | 102 | menu02.add_button(&button08, 2, 1); |
capsavon | 2:a655d6640167 | 103 | |
capsavon | 2:a655d6640167 | 104 | // Main MenuGUI object |
capsavon | 2:a655d6640167 | 105 | MenuGUI menugui01 (3); |
capsavon | 2:a655d6640167 | 106 | menugui01.add_menu (&menu_main, 0); |
capsavon | 2:a655d6640167 | 107 | menugui01.add_menu (&menu01, 1); |
capsavon | 2:a655d6640167 | 108 | menugui01.add_menu (&menu02, 2); |
capsavon | 2:a655d6640167 | 109 | |
capsavon | 2:a655d6640167 | 110 | // Set transitions |
capsavon | 2:a655d6640167 | 111 | menugui01.set_transition(1, 0, 0); |
capsavon | 2:a655d6640167 | 112 | menugui01.set_transition(2, 0, 1); |
capsavon | 2:a655d6640167 | 113 | |
capsavon | 2:a655d6640167 | 114 | |
capsavon | 0:742b53764813 | 115 | while(1) { |
capsavon | 2:a655d6640167 | 116 | |
capsavon | 2:a655d6640167 | 117 | lcd.SetBackColor(LCD_COLOR_BLUE); |
capsavon | 2:a655d6640167 | 118 | lcd.SetTextColor(LCD_COLOR_WHITE); |
capsavon | 0:742b53764813 | 119 | |
capsavon | 0:742b53764813 | 120 | ts.GetState(&TS_State); |
capsavon | 0:742b53764813 | 121 | if (TS_State.touchDetected) { |
capsavon | 0:742b53764813 | 122 | // Clear lines corresponding to old touches coordinates |
capsavon | 0:742b53764813 | 123 | if (TS_State.touchDetected < prev_nb_touches) { |
capsavon | 0:742b53764813 | 124 | for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { |
capsavon | 0:742b53764813 | 125 | lcd.ClearStringLine(idx); |
capsavon | 0:742b53764813 | 126 | } |
capsavon | 0:742b53764813 | 127 | } |
capsavon | 0:742b53764813 | 128 | prev_nb_touches = TS_State.touchDetected; |
capsavon | 0:742b53764813 | 129 | |
capsavon | 0:742b53764813 | 130 | cleared = 0; |
capsavon | 0:742b53764813 | 131 | |
capsavon | 0:742b53764813 | 132 | sprintf((char*)text, "Touches: %d", TS_State.touchDetected); |
capsavon | 0:742b53764813 | 133 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
capsavon | 0:742b53764813 | 134 | |
capsavon | 0:742b53764813 | 135 | for (idx = 0; idx < TS_State.touchDetected; idx++) { |
capsavon | 0:742b53764813 | 136 | x = TS_State.touchX[idx]; |
capsavon | 0:742b53764813 | 137 | y = TS_State.touchY[idx]; |
capsavon | 0:742b53764813 | 138 | sprintf((char*)text, "Touch %d: x=%d y=%d ", idx+1, x, y); |
capsavon | 0:742b53764813 | 139 | lcd.DisplayStringAt(0, LINE(idx+1), (uint8_t *)&text, LEFT_MODE); |
capsavon | 1:7bec6efe01d9 | 140 | |
capsavon | 0:742b53764813 | 141 | } |
capsavon | 0:742b53764813 | 142 | |
capsavon | 0:742b53764813 | 143 | lcd.DrawPixel(TS_State.touchX[0], TS_State.touchY[0], LCD_COLOR_ORANGE); |
capsavon | 1:7bec6efe01d9 | 144 | |
capsavon | 0:742b53764813 | 145 | } else { |
capsavon | 0:742b53764813 | 146 | if (!cleared) { |
capsavon | 0:742b53764813 | 147 | lcd.Clear(LCD_COLOR_BLUE); |
capsavon | 0:742b53764813 | 148 | sprintf((char*)text, "Touches: 0"); |
capsavon | 0:742b53764813 | 149 | lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); |
capsavon | 1:7bec6efe01d9 | 150 | |
capsavon | 0:742b53764813 | 151 | cleared = 1; |
capsavon | 0:742b53764813 | 152 | } |
capsavon | 0:742b53764813 | 153 | } |
capsavon | 2:a655d6640167 | 154 | |
capsavon | 2:a655d6640167 | 155 | /* ------------------------------------------------------------------------ */ |
capsavon | 2:a655d6640167 | 156 | |
capsavon | 2:a655d6640167 | 157 | // Touch detection of one button |
capsavon | 2:a655d6640167 | 158 | if (TS_State.touchDetected > 0) { |
capsavon | 2:a655d6640167 | 159 | |
capsavon | 2:a655d6640167 | 160 | menugui01.update(TS_State.touchX[0], TS_State.touchY[0]); |
capsavon | 2:a655d6640167 | 161 | |
capsavon | 2:a655d6640167 | 162 | } |
capsavon | 2:a655d6640167 | 163 | else { |
capsavon | 2:a655d6640167 | 164 | |
capsavon | 2:a655d6640167 | 165 | menugui01.update(); |
capsavon | 2:a655d6640167 | 166 | |
capsavon | 2:a655d6640167 | 167 | } |
capsavon | 2:a655d6640167 | 168 | |
capsavon | 2:a655d6640167 | 169 | menugui01.display(); |
capsavon | 2:a655d6640167 | 170 | |
capsavon | 0:742b53764813 | 171 | } |
capsavon | 0:742b53764813 | 172 | } |
capsavon | 1:7bec6efe01d9 | 173 | |
capsavon | 2:a655d6640167 | 174 | |
capsavon | 3:13b323fb08e8 | 175 | // Functions definition |
capsavon | 3:13b323fb08e8 | 176 | void led_power (int state) { |
capsavon | 3:13b323fb08e8 | 177 | myled = state; |
capsavon | 3:13b323fb08e8 | 178 | } |
capsavon | 3:13b323fb08e8 | 179 | |
capsavon | 3:13b323fb08e8 | 180 | void led_on (void) { |
capsavon | 3:13b323fb08e8 | 181 | led_power(1); |
capsavon | 3:13b323fb08e8 | 182 | } |
capsavon | 3:13b323fb08e8 | 183 | |
capsavon | 3:13b323fb08e8 | 184 | void led_off (void) { |
capsavon | 3:13b323fb08e8 | 185 | led_power(0); |
capsavon | 3:13b323fb08e8 | 186 | } |
capsavon | 3:13b323fb08e8 | 187 | |
capsavon | 3:13b323fb08e8 | 188 | void led_toggle (void) { |
capsavon | 3:13b323fb08e8 | 189 | static int toggle = 0; |
capsavon | 3:13b323fb08e8 | 190 | if (toggle) { |
capsavon | 3:13b323fb08e8 | 191 | led_on(); |
capsavon | 3:13b323fb08e8 | 192 | toggle = 0; |
capsavon | 3:13b323fb08e8 | 193 | } |
capsavon | 3:13b323fb08e8 | 194 | else { |
capsavon | 3:13b323fb08e8 | 195 | led_off(); |
capsavon | 3:13b323fb08e8 | 196 | toggle = 1; |
capsavon | 3:13b323fb08e8 | 197 | } |
capsavon | 3:13b323fb08e8 | 198 | } |
capsavon | 2:a655d6640167 | 199 | |
capsavon | 2:a655d6640167 | 200 |