
projelec
Dependencies: mbed LCD_DISCO_F746NG BSP_DISCO_F746NG
Diff: main.cpp
- Revision:
- 3:12b494808ffa
- Parent:
- 2:14dc9a7c52ac
- Child:
- 4:0e5755618652
--- a/main.cpp Wed Feb 15 19:25:36 2017 +0000 +++ b/main.cpp Wed Feb 15 20:29:17 2017 +0000 @@ -12,6 +12,11 @@ /* Добавляем библиотеку экранной клавиатуры */ #include "keyboard.h" + +#include "mbed.h" + + + /* Вспомогательные переменые */ uint8_t i; uint8_t key; @@ -20,6 +25,66 @@ /* Пользовательский буфер */ char kb_buffer[45]; + +RawSerial pc(USBTX, USBRX); // terminal console + +/* + * Calculates the mean and standard deviation of the array in data[] + */ +void GetMeanSD(float data[], int qty, float *mn, float *sd) +{ + float sum = 0.0; + float mean; + float stdDev = 0.0; + int i; + float delt; + for(i=0; i<qty; i++) { + sum = sum + data[i]; + } + mean = sum/(float)qty; + + for(i=0; i<qty; i++) { + delt = data[i] - mean; + stdDev = stdDev + (delt * delt); + } + *sd = sqrt(stdDev/(float)qty); + *mn = mean; +} + + + +/* copies comma-seperate item into + * rcvr_str, returns ptr to the next or end + */ +char *get_csv_itm(char *inbufloc, char *rcvr_str) +{ + char *p1 = inbufloc; + char *p2 = rcvr_str ; + *p2 = '\0'; /* null the rcvr first */ + if (*p1 == ',') /* this is and empty item */ + { + p1++; + return(p1); + } + while (*p1 != '\0' && *p1 != ',') + { + *p2 = *p1; + p1++; + p2++; + } + if (*p1 == ',') + { + p1++; /* move to nxt item */ + } + *p2 = '\0'; + return(p1); +} + + + + + + void start_KB_LCD() { /* Инициализация дисплея */ @@ -65,13 +130,43 @@ /* Основная программа */ int main(void) { +#define STATSIZE 128 + + char sbuf[128]; + char dbgtlk[128]; + + char tstr[128]; + char bstr[32]; + char cstr[32]; + char estr[32]; + char pbstr[32]; + int ii; + + char *rawp; + char *csvp; + int rawq; + int bi, ci, ei; + float pbf, bf, cf, ef; + float pbar[STATSIZE]; + float bar[STATSIZE]; + float car[STATSIZE]; + float ear[STATSIZE]; + int duds = 0; + char gotc; + + float pb_mn, pb_sd, b_mn, b_sd, c_mn, c_sd, e_mn, e_sd; + char msg_b[128]; int u_tries; char u_name[128]; char u_passwd[128]; char out_str[128]; - for (u_tries = 0; u_tries < 5; u_tries++) + pc.baud(9600); + + + + for (u_tries = 0; u_tries < 2; u_tries++) { start_KB_LCD(); BSP_LCD_SetFont(&Font24); @@ -99,12 +194,99 @@ strcpy(out_str, "USER PASWD: "); strcat(out_str, u_passwd); BSP_LCD_DisplayStringAtLine(4, (uint8_t *) out_str); - HAL_Delay(1500); - - - + HAL_Delay(150); + } + + + + start_KB_LCD(); + BSP_LCD_SetFont(&Font16); + + /* orangecalypso */ + BSP_LCD_DisplayStringAtLine(1, (uint8_t *)"RDG Pb #B #C #E "); + wait(1.0); + for (ii=0; ii<STATSIZE; ii++) { + + pbf = 10.2 + (float)ii/20.1; + bi = 80 + ii*20; bf = (float) bi; + ci = 60 + ii*6; cf = (float) ci; + ei = 30 + ii*4; ef = (float) ei; + + pbar[ii] = pbf; + bar[ii] = bf; + car[ii] = cf; + ear[ii] = ef; + + sprintf(tstr, "%03d %3.2f %05d %05d %05d ", ii, pbf, bi, ci, ei); + BSP_LCD_DisplayStringAtLine((2 + (ii%5)), (uint8_t *)tstr); + + if (ii > 2) { + GetMeanSD(pbar, ii, &pb_mn, &pb_sd); + GetMeanSD(bar, ii, &b_mn, &b_sd); + GetMeanSD(car, ii, &c_mn, &c_sd); + GetMeanSD(ear, ii, &e_mn, &e_sd); + + sprintf(tstr, "Mean %4.2f %05d %05d %05d", pb_mn, (int)b_mn, (int)c_mn, (int)e_mn); + BSP_LCD_DisplayStringAtLine((8), (uint8_t *)tstr); + sprintf(tstr, "StDv %4.2f %05d %05d %05d", pb_sd, (int)b_sd, (int)c_sd, (int)e_sd); + BSP_LCD_DisplayStringAtLine((9), (uint8_t *)tstr); + + sprintf(tstr, " %-04.2f%% %-04.2f%%", 100.0*(c_sd/c_mn), 100.0*(e_sd/e_mn)); + BSP_LCD_DisplayStringAtLine((10), (uint8_t *)tstr); + - } + strcpy (sbuf, "---trying serial----"); + BSP_LCD_DisplayStringAtLine(LINE(11), (uint8_t *)sbuf); + rawq = 0; + strcpy (sbuf, "--currently empty---"); + rawp = sbuf; // ptr to the buffer + rawq = duds = 0; // raw qty , number of duds for timeout + gotc = 'x'; + strcpy (dbgtlk, "---pt1---"); + BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk); + while (gotc != '\r' && gotc != '\n' && rawq < 127 && duds < 40) { + if (pc.readable()) { + duds = 0; // reset timeout counter + strcpy (dbgtlk, "---pt2---"); + BSP_LCD_DisplayStringAtLine(LINE(12), (uint8_t *)dbgtlk); + gotc = pc.getc(); + *rawp = gotc; + rawq++; + rawp++; + } + strcpy (dbgtlk, "---pt3---"); + BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk); + wait(.05); + duds++; + } + strcpy (dbgtlk, "---pt4---"); + BSP_LCD_DisplayStringAtLine((12), (uint8_t *)dbgtlk); + if (rawq > 0) *rawp = '\0'; + sbuf[20] = '\0'; // just for test .... truncate the line + BSP_LCD_DisplayStringAtLine((11), (uint8_t *)sbuf); + /* + char *get_csv_itm(char *inbufloc, char *rcvr_str) + csvp = sbuf; + csvp = get_csv_itm(csvp, bstr); bi = atoi(bstr); + csvp = get_csv_itm(csvp, cstr); ci = atoi(cstr); + csvp = get_csv_itm(csvp, estr); ei = atoi(estr); + csvp = get_csv_itm(csvp, pbstr); pbf = atof(pbstr); + */ + } + wait(2.0); + } + + + + + + + + + + + + } \ No newline at end of file