test

Dependencies:   ad5422_arduino mbed LT1446 ADS1248-1 LM35-1 Flash FT813 PGA280_ADS1259

Revision:
4:d53895f65eb7
Parent:
3:d4b106bf3a32
Child:
5:21240fa1ee4c
--- a/main.cpp	Sat Aug 08 18:32:53 2020 +0000
+++ b/main.cpp	Tue Aug 11 19:13:43 2020 +0000
@@ -36,8 +36,8 @@
 //InterruptIn button(USER_BUTTON);
 InterruptIn ADSRdy(PG_3);
 
-//настройка SPI для дисплея (надо поменять чтобы избежать конфликта с внешними платами)
-FT813 TFT (D11, D12, D13, D10, D9, D8); // mosi, miso, sck, ss, int, pd
+//настройка SPI для дисплея
+FT813 TFT (D11, D12, D13, D10, D9, D8); //mosi, miso, sck, ss, int, pd
 Display disp(&TFT);
 //конец
 
@@ -232,46 +232,65 @@
 
 float BufToFloat(unsigned char *buf)
 /*Преобразование строки из 16 символов в float*/
-{
+/*Нельзя первым символом вводить точку, перед неей обязательно нужна цифра
+Числа вводятся в формате 1.0 или 1,0 (точка обяательна даже если дробной части нет)*/
+{    
+    int8_t n=-1; //начало (при старте его нет)
     uint8_t i=0;
-    uint8_t j=1; //счётчик символов до точки
+    int8_t j=-1; //счётчик символов до точки
     uint8_t p=0; //позиция точки
     float result=1;  //временно используем чтобы определить знак числа
-    i=3; //команда выглядит как "v0=-123.456" поэтому считаем с символа - позиция которого 3
-            
     
-    if(buf[i]=='-'){
-        result=-result;
-        i++;
-    }    
+    //while(str[i]!=)    
+    //команда выглядит как "/v0=-123.456" поэтому считаем с символа "-" позиция которого 3 (4 знак в массиве)    
+    //проверка на отрицательность и первый знак            
+    for (i=0;i<16;i++)
+    {
+        if(buf[i]=='-'){
+            result=-result;
+            n=i;
+            i++;                    
+            break;
+            }
+        if((buf[i]>=0x30)&&(buf[i]<=0x39))
+        {
+            n=i;            
+            break;
+        }            
+    }
+    if(n<0) return 0;
     //до тех пор, пока поступают нужные символы и нет превышения длины строки
-    while((i<16)&&(buf[i]>=0x30)&&(buf[i]<=0x39)||((buf[i]=='.')||(buf[i]==',')))
-        {                
-        i++;        
+    while((i<16)&&(buf[i]>=0x30)&&(buf[i]<=0x39)||((buf[i]=='.')||(buf[i]==',')||(buf[i]=='-')))
+        {            
+            i++;            
         //проверять на наличие точки или запятой
-            if((buf[i]=='.')||(buf[i]==',')) 
+            if((buf[i]=='.')||(buf[i]==','))
             {
-                p=i; //запоминаем позицию плавающей запятой
+                if(p==0){               //если точка ещё не попадалась
+                p=i;                    //запоминаем позицию плавающей запятой
                 if (result>=0)
-                j=i-3; //цифр до точки
-                else j=i-4;                
-            }             
-        }
+                j=i-n;                  //цифр до точки (3 начало)
+                else j=i-n-1;}          //на 1 символ больше из-за "-"
+                else break;             //если попалась ещё одна точка
+            }        
+       }
+        
+    /*Добавить проверку на целое число!!*/
     
     //ниже преобразуем информацию в число
-    if (result>=0){        
+    if (result>=0){
         result=0;
-        i=i-j-4; //знаки после запятой         
+        i=i-j-n-1; //знаки после запятой
         while(i--){
             result+=(buf[p+i+1]-0x30)*powf(10,-i-1);
         }
-        while(j--){            
+        while(j--){
         result+=(buf[p-j-1]-0x30)*powf(10,j);        
         }
     }            
-    else {
+    else {//строка на 1 знак больше
         result=0;
-        i=i-j-5; //знаки после запятой         
+        i=i-j-n-2; //знаки после запятой         
         while(i--){
             result+=(buf[p+i+1]-0x30)*powf(10,-i-1);
         }
@@ -280,11 +299,11 @@
         }
         result=-result;
     }
-    if (result>=0&&result<=10000)
+    if (result>=-10000&&result<=10000)//заменить на проверку адекватности
     return result;
     else return 0;
-       
 }    
+
 void setPIDdefault(PID_t *pidx,PID_defs_t *defs)
 /*Установка для нужного пида его настроек по умолчанию*/
 {
@@ -296,8 +315,7 @@
     }
   
 int main()
-{     
-    printf("started\r\n");
+{       
     //считывание данных настроек из памяти
     for (int i=0;i<sizeof(Mem.w)/sizeof(uint32_t);i++)
     {    
@@ -370,7 +388,7 @@
      //Записать в чип
     ADS1248SettingReg(&ads1);
     if(ads1.SYS0.all==ADS1248ReadRegister(DS1248_REGISTER_SYS0,1))  //30.07.2020/8:40
-    UART.printf("ADS is configured \r\nMUX1 =%d\r\n",ADS1248ReadRegister(DS1248_REGISTER_SYS0,1));
+    UART.printf("ADS is configured\r\n");
     ADSRdy.fall(&readads);//виснет без платы (решение - закомментить)
     wait_ms(20);
     //ADS1248SleepCommand();//временно отключаем чтобы при старте не началось считывание
@@ -396,6 +414,8 @@
     disp.activeScreen = TEST_CHROM_SCREEN;
     disp.pressedButton = NONE_PRESS;
     
+    ADS1248CalibrateSoft(&ads1,BufToFloat); //эксперимент
+    
     // change active screen depending on pressed area
     while(1) {
         
@@ -446,7 +466,7 @@
                 } 
             }
         }
-   }//Проверка включения дисплея
+    }//Проверка включения дисплея
     }
 }
 
@@ -454,21 +474,21 @@
 
 /*команды*/
 void ComandCheck()
-{    
-    if(UART.getc()=='/')              
+{      
+        UART_gets(16); //моя функция на время        
+        if(str[0]=='/')              
         {
-        UART_gets(16); //моя функция на время
-        UART.printf("%c\r\n",str[0]);
-        switch (str[0]){
+        UART.printf("%c\r\n",str[1]);
+        switch (str[1]){
              /*Проверка платы SB-1 SWEN*/
              case 'i':{
-                 if (str[1]=='1')
+                 if (str[2]=='1')
                  {SB1_SWEN=1;
                  UART.printf("SW is ON\r\n");}
-                 else if (str[1]=='0')
+                 else if (str[2]=='0')
                  {SB1_SWEN=0;
                  UART.printf("SW is OFF\r\n");}
-                 else if (str[1]=='a')
+                 else if (str[2]=='a')
                  {
                      PosAw=1;
                      PosBw=0;
@@ -476,7 +496,7 @@
                      PosAw=0;
                      PosBw=0;
                      }
-                 else if (str[1]=='b')
+                 else if (str[2]=='b')
                  {
                      PosAw=0;
                      PosBw=1;
@@ -484,7 +504,7 @@
                      PosAw=0;
                      PosBw=0;
                      }
-                 else if (str[1]=='r')
+                 else if (str[2]=='r')
                  {
                      char a='0';
                      if (PosAr)
@@ -499,7 +519,7 @@
                  LT1446_0.dacB.Code=0;
                  LT1446_0.dacA.Code=0;                 
                  LTCwrite(&LT1446_0);
-                 switch (str[1]){
+                 switch (str[2]){
                  case 'P':{
                  Mem.PID.kP=BufToFloat(str);
                  Mem_write();
@@ -526,8 +546,8 @@
                  default:break;
                  }
                  //задание уставки температуры
-                 if ((str[1]>='0')&&(str[1]<='9')){
-                 temp=(str[1]-'0')*10+(str[2]-'0');                 
+                 if ((str[2]>='0')&&(str[2]<='9')){
+                 temp=(str[2]-'0')*10+(str[3]-'0');                 
                  UART.printf("temp= %d\r\n",temp); }                    
                  break;}
                  
@@ -549,7 +569,7 @@
                  break;}
                  
              case 'p':{                
-                pga280gain=str[1]; //присваиваем числовое значение команды взятое из символа цифры
+                pga280gain=str[2]; //присваиваем числовое значение команды взятое из символа цифры
                 pga280gain-=0x30;
                 ch=5;
                 pga280_setGAIN(pga280gain,ch);
@@ -557,9 +577,9 @@
                 break;}
                 
             case 'g': {      //включить нужный ПИД         
-                if(str[1]=='p')
+                if(str[2]=='p')
                 {
-                    switch(str[2])
+                    switch(str[3])
                     {//gp1
                     case '1'://первый - температура
                     {
@@ -607,14 +627,14 @@
                 
             case 'd':{//LTC1446 задание значений на ЦАП оба канала
                 //MBFlagRegister.DAC=1;
-                if (str[1]=='a')//команда = "da=xxxx" где хххх - код ЦАП
+                if (str[2]=='a')//команда = "da=xxxx" где хххх - код ЦАП
                 {
-                    LT1446_0.dacA.Code=(str[2]-0x30)*1000+(str[3]-0x30)*100+(str[4]-0x30)*10+(str[5]-0x30);
+                    LT1446_0.dacA.Code=(str[3]-0x30)*1000+(str[4]-0x30)*100+(str[5]-0x30)*10+(str[6]-0x30);
                     UART.printf("%d\r\n",LT1446_0.dacA.Code);
                     }
                 if (str[1]=='b')
                 {
-                    LT1446_0.dacB.Code=(str[2]-0x30)*1000+(str[3]-0x30)*100+(str[4]-0x30)*10+(str[5]-0x30);
+                    LT1446_0.dacB.Code=(str[3]-0x30)*1000+(str[4]-0x30)*100+(str[5]-0x30)*10+(str[6]-0x30);
                     UART.printf("%d\r\n",LT1446_0.dacB.Code);
                     }
                  LTCwrite(&LT1446_0);
@@ -630,7 +650,7 @@
                  LT1446_0.dacB.Code=0;
                  LTCwrite(&LT1446_0);
                  //обработка команд
-                 switch (str[1]){
+                 switch (str[2]){
                  case 'P':{
                  Mem.PID_R.kP=BufToFloat(str);
                  Mem_write();
@@ -675,19 +695,19 @@
                  default:break;
                  }
                  
-                if((str[1]=='e')&&(str[2]=='s')&&(str[3]=='e')&&(str[4]=='t')){
-                //перезагрука                           
+                if((str[2]=='e')&&(str[3]=='s')&&(str[4]=='e')&&(str[5]=='t')){
+                //перезагрука
                 printf("System Reset\r\n");
                 NVIC_SystemReset();}
-                if ((str[1]=='e')&&(str[2]=='c')&&(str[3]=='a')&&(str[4]=='l')){
+                if ((str[2]=='e')&&(str[3]=='c')&&(str[4]=='a')&&(str[5]=='l')){
                     disp.Calibration(Mem.calibration,1);
                     UART.printf("Recalibrated\r\n");
                     };
                 break;}
-            default:                
+            default:                                
                 //MBFlagRegister.TMLS=0; //починка зависания (не работает)
-                break;            
-        }
-    }
+                break;
+        }        
+       }    
 }
  
\ No newline at end of file