Clone of the "Keyboard" project combined with string>LCD calls and Serial reading for the STM32F746G-DISCO. Screen has to be reset and the font set again, and Serial must be created and destroyed each time, to dodge apparent F7 lower-level issues. Keyboard can print prompt.

Dependencies:   BSP_DISCO_F746NG mbed

Fork of Keyboard by Faberge Fabulous

Committer:
jknowles
Date:
Wed Feb 22 15:25:12 2017 +0000
Revision:
7:3d2369ac93a7
Parent:
6:310e91584386
(serial fixed by creating/destroying it: still embed issues for this board)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Faberge 0:3ea368f65bca 1 /*
Faberge 0:3ea368f65bca 2 *******************************************************************************
Faberge 0:3ea368f65bca 3 * Пример работы экранной клавиатуры на демо-плате STM32F746NG Discovery с
Faberge 0:3ea368f65bca 4 * использованием стандартного набора библиотек BSP и пользовательской
Faberge 0:3ea368f65bca 5 * библиотеки "keyboard.h"
Faberge 0:3ea368f65bca 6 *******************************************************************************
Faberge 0:3ea368f65bca 7 */
Faberge 0:3ea368f65bca 8
Faberge 0:3ea368f65bca 9 /* Добавляем библиотеку для работы с LCD */
Faberge 0:3ea368f65bca 10 #include "stm32746g_discovery_lcd.h"
Faberge 0:3ea368f65bca 11 /* Добавляем библиотеку экранной клавиатуры */
Faberge 0:3ea368f65bca 12 #include "keyboard.h"
Faberge 0:3ea368f65bca 13
jknowles 3:12b494808ffa 14 #include "mbed.h"
jknowles 3:12b494808ffa 15
jknowles 5:50c5e677f71a 16 // no such file: #include "USBSerial.h"
jknowles 3:12b494808ffa 17
Faberge 0:3ea368f65bca 18 /* Вспомогательные переменые */
Faberge 0:3ea368f65bca 19 uint8_t i;
Faberge 0:3ea368f65bca 20 uint8_t key;
jknowles 1:25b8d7bfc7d4 21 uint8_t len;
Faberge 0:3ea368f65bca 22
Faberge 0:3ea368f65bca 23 /* Пользовательский буфер */
jknowles 2:14dc9a7c52ac 24 char kb_buffer[45];
Faberge 0:3ea368f65bca 25
jknowles 3:12b494808ffa 26
jknowles 3:12b494808ffa 27
jknowles 3:12b494808ffa 28 /*
jknowles 3:12b494808ffa 29 * Calculates the mean and standard deviation of the array in data[]
jknowles 3:12b494808ffa 30 */
jknowles 3:12b494808ffa 31 void GetMeanSD(float data[], int qty, float *mn, float *sd)
jknowles 3:12b494808ffa 32 {
jknowles 3:12b494808ffa 33 float sum = 0.0;
jknowles 3:12b494808ffa 34 float mean;
jknowles 3:12b494808ffa 35 float stdDev = 0.0;
jknowles 3:12b494808ffa 36 int i;
jknowles 3:12b494808ffa 37 float delt;
jknowles 3:12b494808ffa 38 for(i=0; i<qty; i++) {
jknowles 3:12b494808ffa 39 sum = sum + data[i];
jknowles 3:12b494808ffa 40 }
jknowles 3:12b494808ffa 41 mean = sum/(float)qty;
jknowles 3:12b494808ffa 42
jknowles 3:12b494808ffa 43 for(i=0; i<qty; i++) {
jknowles 3:12b494808ffa 44 delt = data[i] - mean;
jknowles 3:12b494808ffa 45 stdDev = stdDev + (delt * delt);
jknowles 3:12b494808ffa 46 }
jknowles 3:12b494808ffa 47 *sd = sqrt(stdDev/(float)qty);
jknowles 3:12b494808ffa 48 *mn = mean;
jknowles 3:12b494808ffa 49 }
jknowles 3:12b494808ffa 50
jknowles 3:12b494808ffa 51
jknowles 3:12b494808ffa 52
jknowles 3:12b494808ffa 53 /* copies comma-seperate item into
jknowles 3:12b494808ffa 54 * rcvr_str, returns ptr to the next or end
jknowles 3:12b494808ffa 55 */
jknowles 3:12b494808ffa 56 char *get_csv_itm(char *inbufloc, char *rcvr_str)
jknowles 3:12b494808ffa 57 {
jknowles 3:12b494808ffa 58 char *p1 = inbufloc;
jknowles 3:12b494808ffa 59 char *p2 = rcvr_str ;
jknowles 3:12b494808ffa 60 *p2 = '\0'; /* null the rcvr first */
jknowles 3:12b494808ffa 61 if (*p1 == ',') /* this is and empty item */
jknowles 3:12b494808ffa 62 {
jknowles 3:12b494808ffa 63 p1++;
jknowles 3:12b494808ffa 64 return(p1);
jknowles 3:12b494808ffa 65 }
jknowles 3:12b494808ffa 66 while (*p1 != '\0' && *p1 != ',')
jknowles 3:12b494808ffa 67 {
jknowles 3:12b494808ffa 68 *p2 = *p1;
jknowles 3:12b494808ffa 69 p1++;
jknowles 3:12b494808ffa 70 p2++;
jknowles 3:12b494808ffa 71 }
jknowles 3:12b494808ffa 72 if (*p1 == ',')
jknowles 3:12b494808ffa 73 {
jknowles 3:12b494808ffa 74 p1++; /* move to nxt item */
jknowles 3:12b494808ffa 75 }
jknowles 3:12b494808ffa 76 *p2 = '\0';
jknowles 3:12b494808ffa 77 return(p1);
jknowles 3:12b494808ffa 78 }
jknowles 3:12b494808ffa 79
jknowles 3:12b494808ffa 80
jknowles 3:12b494808ffa 81
jknowles 3:12b494808ffa 82
jknowles 3:12b494808ffa 83
jknowles 3:12b494808ffa 84
jknowles 2:14dc9a7c52ac 85 void start_KB_LCD()
Faberge 0:3ea368f65bca 86 {
Faberge 0:3ea368f65bca 87 /* Инициализация дисплея */
jknowles 2:14dc9a7c52ac 88 /* Включаем дисплей */
jknowles 2:14dc9a7c52ac 89 /* Настраиваем первый и второй слои дисплея */
Faberge 0:3ea368f65bca 90 BSP_LCD_Init();
Faberge 0:3ea368f65bca 91 BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
Faberge 0:3ea368f65bca 92 BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS + (BSP_LCD_GetXSize() * BSP_LCD_GetYSize() * 4));
Faberge 0:3ea368f65bca 93 BSP_LCD_DisplayOn();
Faberge 0:3ea368f65bca 94 BSP_LCD_SelectLayer(0);
Faberge 0:3ea368f65bca 95 BSP_LCD_Clear(LCD_COLOR_WHITE);
Faberge 0:3ea368f65bca 96 BSP_LCD_SelectLayer(1);
Faberge 0:3ea368f65bca 97 BSP_LCD_Clear(LCD_COLOR_BLACK);
Faberge 0:3ea368f65bca 98 BSP_LCD_SetTransparency(0, 0);
Faberge 0:3ea368f65bca 99 BSP_LCD_SetTransparency(1, 100);
Faberge 0:3ea368f65bca 100 /* Настраиваем цвет фона экрана и цвет текста, а также шрифт */
jknowles 2:14dc9a7c52ac 101 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
Faberge 0:3ea368f65bca 102 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
Faberge 0:3ea368f65bca 103 BSP_LCD_SetFont(&Font16);
jknowles 2:14dc9a7c52ac 104
Faberge 0:3ea368f65bca 105 /* Инициализация тач-экрана*/
Faberge 0:3ea368f65bca 106 BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
jknowles 2:14dc9a7c52ac 107
jknowles 2:14dc9a7c52ac 108 }
jknowles 2:14dc9a7c52ac 109
jknowles 2:14dc9a7c52ac 110
jknowles 4:0e5755618652 111
jknowles 4:0e5755618652 112 void get_kbd_str(char *promp, char *bufr)
jknowles 2:14dc9a7c52ac 113 {
jknowles 2:14dc9a7c52ac 114 start_KB_LCD();
jknowles 2:14dc9a7c52ac 115 Keyboard_init(0, 80);
jknowles 2:14dc9a7c52ac 116 while(1) {
jknowles 4:0e5755618652 117 key = Keyboard_handler(promp, bufr);
jknowles 2:14dc9a7c52ac 118 if (key == KEY_ENTER_VALUE) break; // to go to another screen ?
jknowles 2:14dc9a7c52ac 119 HAL_Delay(10);
jknowles 2:14dc9a7c52ac 120 }
jknowles 2:14dc9a7c52ac 121 }
jknowles 2:14dc9a7c52ac 122
jknowles 2:14dc9a7c52ac 123
jknowles 2:14dc9a7c52ac 124
jknowles 2:14dc9a7c52ac 125
jknowles 2:14dc9a7c52ac 126
jknowles 2:14dc9a7c52ac 127 /* Основная программа */
jknowles 2:14dc9a7c52ac 128 int main(void)
jknowles 2:14dc9a7c52ac 129 {
jknowles 3:12b494808ffa 130 #define STATSIZE 128
jknowles 6:310e91584386 131
jknowles 3:12b494808ffa 132 char sbuf[128];
jknowles 3:12b494808ffa 133 char dbgtlk[128];
jknowles 3:12b494808ffa 134
jknowles 3:12b494808ffa 135 char tstr[128];
jknowles 3:12b494808ffa 136 char bstr[32];
jknowles 3:12b494808ffa 137 char cstr[32];
jknowles 3:12b494808ffa 138 char estr[32];
jknowles 3:12b494808ffa 139 char pbstr[32];
jknowles 3:12b494808ffa 140 int ii;
jknowles 3:12b494808ffa 141
jknowles 3:12b494808ffa 142 char *rawp;
jknowles 3:12b494808ffa 143 char *csvp;
jknowles 3:12b494808ffa 144 int rawq;
jknowles 3:12b494808ffa 145 int bi, ci, ei;
jknowles 3:12b494808ffa 146 float pbf, bf, cf, ef;
jknowles 3:12b494808ffa 147 float pbar[STATSIZE];
jknowles 3:12b494808ffa 148 float bar[STATSIZE];
jknowles 3:12b494808ffa 149 float car[STATSIZE];
jknowles 3:12b494808ffa 150 float ear[STATSIZE];
jknowles 3:12b494808ffa 151 int duds = 0;
jknowles 3:12b494808ffa 152 char gotc;
jknowles 3:12b494808ffa 153
jknowles 3:12b494808ffa 154 float pb_mn, pb_sd, b_mn, b_sd, c_mn, c_sd, e_mn, e_sd;
jknowles 3:12b494808ffa 155
jknowles 2:14dc9a7c52ac 156 char msg_b[128];
jknowles 2:14dc9a7c52ac 157 int u_tries;
jknowles 2:14dc9a7c52ac 158 char u_name[128];
jknowles 2:14dc9a7c52ac 159 char u_passwd[128];
jknowles 2:14dc9a7c52ac 160 char out_str[128];
jknowles 6:310e91584386 161 char out_str2[128];
jknowles 2:14dc9a7c52ac 162
jknowles 6:310e91584386 163
jknowles 3:12b494808ffa 164
jknowles 6:310e91584386 165
jknowles 6:310e91584386 166 start_KB_LCD();
jknowles 6:310e91584386 167 BSP_LCD_SetFont(&Font24);
jknowles 6:310e91584386 168 get_kbd_str("USE JOYSTICK TO ENTER NAME:", kb_buffer);
jknowles 6:310e91584386 169 strcpy(u_name, kb_buffer);
jknowles 6:310e91584386 170 kb_buffer[0] = '\0';
jknowles 6:310e91584386 171
jknowles 6:310e91584386 172 start_KB_LCD();
jknowles 6:310e91584386 173 BSP_LCD_SetFont(&Font24);
jknowles 6:310e91584386 174 get_kbd_str("USE JOYSTICK TO ENTER PASSWORD:", kb_buffer);
jknowles 6:310e91584386 175 strcpy(u_passwd, kb_buffer);
jknowles 6:310e91584386 176 kb_buffer[0] = '\0';
jknowles 3:12b494808ffa 177
jknowles 6:310e91584386 178 // DISPLAY WHAT USER PUT IN
jknowles 6:310e91584386 179 start_KB_LCD();
jknowles 6:310e91584386 180 BSP_LCD_SetFont(&Font24);
jknowles 6:310e91584386 181 strcpy(out_str, "USER NAME: ");
jknowles 6:310e91584386 182 strcat(out_str, u_name);
jknowles 6:310e91584386 183 BSP_LCD_DisplayStringAtLine(2, (uint8_t *) out_str);
jknowles 6:310e91584386 184 strcpy(out_str, "USER PASWD: ");
jknowles 6:310e91584386 185 strcat(out_str, u_passwd);
jknowles 6:310e91584386 186 BSP_LCD_DisplayStringAtLine(4, (uint8_t *) out_str);
jknowles 6:310e91584386 187
jknowles 6:310e91584386 188 HAL_Delay(2000);
jknowles 6:310e91584386 189
jknowles 6:310e91584386 190 start_KB_LCD();
jknowles 6:310e91584386 191 strcpy(out_str, " READY TO TAKE MEASUREMENT ");
jknowles 6:310e91584386 192 BSP_LCD_DisplayStringAtLine(2, (uint8_t *) out_str);
jknowles 6:310e91584386 193
jknowles 6:310e91584386 194 HAL_Delay(2000);
jknowles 6:310e91584386 195
jknowles 6:310e91584386 196 start_KB_LCD();
jknowles 6:310e91584386 197 strcpy(out_str, " TRIGGER DETECTED ");
jknowles 6:310e91584386 198 BSP_LCD_DisplayStringAtLine(2, (uint8_t *) out_str);
jknowles 6:310e91584386 199 HAL_Delay(3000);
jknowles 3:12b494808ffa 200
jknowles 6:310e91584386 201 start_KB_LCD();
jknowles 6:310e91584386 202 BSP_LCD_SetFont(&Font16);
jknowles 3:12b494808ffa 203
jknowles 3:12b494808ffa 204 /* orangecalypso */
jknowles 3:12b494808ffa 205 BSP_LCD_DisplayStringAtLine(1, (uint8_t *)"RDG Pb #B #C #E ");
jknowles 3:12b494808ffa 206 wait(1.0);
jknowles 3:12b494808ffa 207 for (ii=0; ii<STATSIZE; ii++) {
jknowles 3:12b494808ffa 208
jknowles 3:12b494808ffa 209 pbf = 10.2 + (float)ii/20.1;
jknowles 3:12b494808ffa 210 bi = 80 + ii*20; bf = (float) bi;
jknowles 3:12b494808ffa 211 ci = 60 + ii*6; cf = (float) ci;
jknowles 3:12b494808ffa 212 ei = 30 + ii*4; ef = (float) ei;
jknowles 3:12b494808ffa 213
jknowles 3:12b494808ffa 214 pbar[ii] = pbf;
jknowles 3:12b494808ffa 215 bar[ii] = bf;
jknowles 3:12b494808ffa 216 car[ii] = cf;
jknowles 3:12b494808ffa 217 ear[ii] = ef;
jknowles 3:12b494808ffa 218
jknowles 3:12b494808ffa 219 sprintf(tstr, "%03d %3.2f %05d %05d %05d ", ii, pbf, bi, ci, ei);
jknowles 3:12b494808ffa 220 BSP_LCD_DisplayStringAtLine((2 + (ii%5)), (uint8_t *)tstr);
jknowles 3:12b494808ffa 221
jknowles 3:12b494808ffa 222 if (ii > 2) {
jknowles 5:50c5e677f71a 223
jknowles 5:50c5e677f71a 224 if (ii > 11) {
jknowles 5:50c5e677f71a 225 GetMeanSD(pbar + ii - 11 , 10, &pb_mn, &pb_sd);
jknowles 5:50c5e677f71a 226 GetMeanSD(bar + ii - 11, 10, &b_mn, &b_sd);
jknowles 5:50c5e677f71a 227 GetMeanSD(car + ii - 11, 10, &c_mn, &c_sd);
jknowles 5:50c5e677f71a 228 GetMeanSD(ear + ii - 11 , 10, &e_mn, &e_sd);
jknowles 5:50c5e677f71a 229 }
jknowles 5:50c5e677f71a 230 else {
jknowles 5:50c5e677f71a 231 GetMeanSD(pbar, ii, &pb_mn, &pb_sd);
jknowles 5:50c5e677f71a 232 GetMeanSD(bar, ii, &b_mn, &b_sd);
jknowles 5:50c5e677f71a 233 GetMeanSD(car, ii, &c_mn, &c_sd);
jknowles 5:50c5e677f71a 234 GetMeanSD(ear, ii, &e_mn, &e_sd);
jknowles 5:50c5e677f71a 235 }
jknowles 6:310e91584386 236
jknowles 3:12b494808ffa 237 sprintf(tstr, "Mean %4.2f %05d %05d %05d", pb_mn, (int)b_mn, (int)c_mn, (int)e_mn);
jknowles 3:12b494808ffa 238 BSP_LCD_DisplayStringAtLine((8), (uint8_t *)tstr);
jknowles 3:12b494808ffa 239 sprintf(tstr, "StDv %4.2f %05d %05d %05d", pb_sd, (int)b_sd, (int)c_sd, (int)e_sd);
jknowles 3:12b494808ffa 240 BSP_LCD_DisplayStringAtLine((9), (uint8_t *)tstr);
jknowles 3:12b494808ffa 241
jknowles 3:12b494808ffa 242 sprintf(tstr, " %-04.2f%% %-04.2f%%", 100.0*(c_sd/c_mn), 100.0*(e_sd/e_mn));
jknowles 3:12b494808ffa 243 BSP_LCD_DisplayStringAtLine((10), (uint8_t *)tstr);
jknowles 6:310e91584386 244
jknowles 3:12b494808ffa 245 strcpy (sbuf, "---trying serial----");
jknowles 3:12b494808ffa 246 BSP_LCD_DisplayStringAtLine(LINE(11), (uint8_t *)sbuf);
jknowles 5:50c5e677f71a 247
jknowles 3:12b494808ffa 248 rawq = 0;
jknowles 3:12b494808ffa 249 strcpy (sbuf, "--currently empty---");
jknowles 5:50c5e677f71a 250 rawp = sbuf;
jknowles 5:50c5e677f71a 251 rawq = duds = 0;
jknowles 3:12b494808ffa 252 gotc = 'x';
jknowles 5:50c5e677f71a 253
jknowles 3:12b494808ffa 254 strcpy (dbgtlk, "---pt1---");
jknowles 3:12b494808ffa 255 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 6:310e91584386 256
jknowles 5:50c5e677f71a 257 strcpy (dbgtlk, "---pt4---");
jknowles 3:12b494808ffa 258 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk);
jknowles 5:50c5e677f71a 259
jknowles 6:310e91584386 260 if (strlen(dbgtlk) > 1)
jknowles 6:310e91584386 261 {
jknowles 6:310e91584386 262 Serial pc(USBTX, USBRX); // Serial created and destroyed each cycle
jknowles 6:310e91584386 263 pc.baud(9600);
jknowles 6:310e91584386 264 pc.gets(sbuf , 30);
jknowles 6:310e91584386 265 }
jknowles 6:310e91584386 266 else
jknowles 6:310e91584386 267 {
jknowles 6:310e91584386 268 strcpy(sbuf, "---");
jknowles 6:310e91584386 269 }
jknowles 6:310e91584386 270 // pc.scanf("%s", sbuf);
jknowles 5:50c5e677f71a 271
jknowles 3:12b494808ffa 272 if (rawq > 0) *rawp = '\0';
jknowles 6:310e91584386 273 sbuf[40] = '\0'; // just for test .... truncate the line
jknowles 3:12b494808ffa 274 BSP_LCD_DisplayStringAtLine((11), (uint8_t *)sbuf);
jknowles 6:310e91584386 275
jknowles 6:310e91584386 276 csvp = sbuf;
jknowles 6:310e91584386 277 csvp = get_csv_itm(csvp, bstr); bi = atoi(bstr);
jknowles 6:310e91584386 278 csvp = get_csv_itm(csvp, cstr); ci = atoi(cstr);
jknowles 6:310e91584386 279 csvp = get_csv_itm(csvp, estr); ei = atoi(estr);
jknowles 6:310e91584386 280 csvp = get_csv_itm(csvp, pbstr); pbf = atof(pbstr);
jknowles 6:310e91584386 281
jknowles 6:310e91584386 282 sprintf(out_str2, "b>%d c>%d e>%d Pb> %s ", bi, ci, ei, pbstr);
jknowles 6:310e91584386 283 BSP_LCD_DisplayStringAtLine((12), (uint8_t *)out_str2);
jknowles 3:12b494808ffa 284 }
jknowles 3:12b494808ffa 285 wait(2.0);
jknowles 3:12b494808ffa 286 }
jknowles 3:12b494808ffa 287
jknowles 3:12b494808ffa 288
jknowles 6:310e91584386 289
jknowles 2:14dc9a7c52ac 290
jknowles 2:14dc9a7c52ac 291
Faberge 0:3ea368f65bca 292 }