projelec

Dependencies:   mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

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