test
Dependencies: ad5422_arduino mbed LT1446 ADS1248-1 LM35-1 Flash FT813 PGA280_ADS1259
Diff: main.cpp
- 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(<1446_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(<1446_0); @@ -630,7 +650,7 @@ LT1446_0.dacB.Code=0; LTCwrite(<1446_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