现在我有一些代码打印出从putch(out)
的串行端口读取的数据。但是我需要将它存储到一个数组中并处理它以获得浮点值。
这是我的代码,仅用于与串口通信,省略了计算:
#include <bios.h>
#include <conio.h>
#define COM1 0
#define DATA_READY 0x100
// set the baud rate, parity bit, data width...
#define SETTINGS ( 0xE0 | 0x03 | 0x00 | 0x00)
int main(void)
{
int in, out, status,i;
char dataRead[21];
float roll, pitch;
bioscom(0, SETTINGS, COM1); /*initialize the port*/
clrscr();
cprintf("Data sent to you: ");
while (1)
{
status = bioscom(3, 0, COM1); // reading the data here
if (status & DATA_READY)
if ((out = bioscom(2, 0, COM1) & 0 7F) != 0)
putch(out); // printing read value
if (kbhit( )) // If Esc is hit. it breaks and exit.
{
if ((in = getch( )) == ‘ 1B’) // 1B = Esc
DONE = TRUE;
bioscom(1, in, COM1); // data write. I am not making use of it.
}
}
return 0;
}
传入的数据对滚动和音调进行编码,类似于"R:+XXX.XX P:-YYY.YY\r\n"
。
我不想只打印这些数据,而是将其存储在dataRead[]
数组中并将其解释为浮点值。例如,dataRead[2]
到dataRead[8]
为&#34; roll&#34;编码浮点值。作为字符+XXX.XX
。
如何将这些字符存储在数组中并从中获取浮点数?
如果你能写下串口的一些代码,它完全符合我的要求那么它会非常有用。请确保它是用C&#39;。
写的答案 0 :(得分:1)
我不熟悉Dev C ++,但在C ++中你有 strtod 函数,它将字符串转换为double(float)。你需要:
在一个文本行中收集串口中的所有字符
解析行
首先很容易,只需等到“\ n”即可。类似的东西:
char line [MAX_LINE];
if(out == '\n')
parse_line(line. ....)
else
line[n_readed++] = out;
第二部分更棘手。您可以使用一些文本处理库来解析或编写您的文本 使用 strtod 自己的解析功能。由于你的案子很简单,我宁愿做第二件事。以下是解析文本行的解析函数示例:
const char* line = "R:+123.56P:-767.77\r\n";
// return true on success
bool parse_line(const char* line, double* R, double* P)
{
const char* p = line;
if(*p++ != 'R')
return false;
if(*p++ != ':')
return false;
if(*p == '+') // + sign is optional
p++ ;
char* pEnd;
*R = strtod (p, &pEnd);
if(pEnd == p)
return false;
p = pEnd;
if(*p++ != 'P')
return false;
if(*p++ != ':')
return false;
*P = strtod (p, &pEnd);
if(pEnd == p)
return false;
return true;
}
int main()
{
double R,P;
if(!parse_line(line, &R, &P))
printf("error\n");
else
printf("sucessfully readed: %f\t%f\n", R,P);
return 0;
}
当解析函数返回true时,您需要声明两个float数组并用解析的float值填充它们。否则会出现一些错误,可能是因为数据损坏。您还可以使用浮动更改所有双打。
我希望这能帮到你。