如何使用C编程添加和显示从串口获取的小时,分​​钟,秒数据

我从Arduino串行端口获取了温度数据。来自Arduino串行监视器的温度数据是:

21.48
21.97
21.48
21.00
21.97
21.97

通过使用C程序读取串行端口,如下所示 代码:

char Tempchar;
DWORD NoBytesRead;
do{
    ReadFile(hComm,&Tempchar,sizeof(Tempchar),&NoBytesRead,NULL);
    printf("%c",Tempchar);                            }
while(!kbhit());

然后它将显示如下。

21.48
21.97
21.48
21.00
21.97
21.97

现在,我想使用c程序添加并显示小时,分钟和秒,如下面的代码:

char Tempchar;
DWORD NoBytesRead;

SYSTEMTIME str_t;
GetSystemTime(&str_t);

do{
   ReadFile(hComm,NULL);
    printf("%c,%d:%d:%d ",Tempchar,str_t.wHour+7,str_t.wMinute,str_t.wSecond);
 }while(!kbhit());

但是结果是这样的:

,18:9:38  1,18:9:38 .,18:9:38 0,18:9:38,18:9:38 2,18:9:38 1,18:9:38

我实际上希望结果是

21.48,18:9:38
21.97,18:9:38
21.48,18:9:38
21.00,18:9:38

我应该从C语言程序代码中解决什么?

fulex168 回答:如何使用C编程添加和显示从串口获取的小时,分​​钟,秒数据

您正在逐个字符读取温度数据。因此,您需要在此字符流中检测每个数据包的边界在哪里。显然,其中包含换行符,因此您需要检测它们:

if(tempChar == '\n')
{
    // print separator and date/time
}
printf("%c",TempChar)

现在取决于使用哪个行分隔符,以上与\n一起使用,如果您有\r\n或只有\r,则需要调整...

似乎您的数据中有一个前导换行符,因此您可能需要特殊处理才能实现第一个换行符。

,

那么Arduino发送换行符吗?然后将读取的字符收集到字符串中,并在读取换行符后显示(随时间显示)。

,

由于您编写打印语句的方式而出现此错误。

printf("%c,%d:%d:%d ",TempChar,str_t.wHour+7,str_t.wMinute,str_t.wSecond);

因此,这里TempChar存储当前字符值,该值正在打印到临时数据的每个字符上。因此,首先打印所有临时数据,然后打印日期。

do{
   ReadFile(hComm,&TempChar,sizeof(TempChar),&NoBytesRead,NULL);
   if(TempChar!='\n'){printf("%c",TempChar);}
   else{
        printf(",%d:%d:%d \n",str_t.wSecond);}
}while(!kbhit());
本文链接:https://www.f2er.com/3124636.html

大家都在问