C 使用UART arduino接收数据阵列
我正试图通过arduino中的UART将数据发送到指纹扫描仪 我使用一个数组来发送命令,它工作得很好C 使用UART arduino接收数据阵列,c,arrays,arduino,C,Arrays,Arduino,我正试图通过arduino中的UART将数据发送到指纹扫描仪 我使用一个数组来发送命令,它工作得很好 for(i =0 ; i<= 24 ; i++) { Serial.write(SendArray[i]); SendArray[i] =0; } for(i=0;iOP正在尝试使用24个元素,但在两个位置循环了25次。这肯定会导致无效的数组访问 char SendArray[24] = ... // for(i =0 ; i<= 24 ; i++) f
for(i =0 ; i<= 24 ; i++)
{
Serial.write(SendArray[i]);
SendArray[i] =0;
}
for(i=0;iOP正在尝试使用24个元素,但在两个位置循环了25次。这肯定会导致无效的数组访问
char SendArray[24] = ...
// for(i =0 ; i<= 24 ; i++)
for(i = 0; i < 24; i++) {
Serial.write(SendArray[i]);
SendArray[i] = 0;
}
// for(k=0 ; k<=24 ; k++)
for(k = 0; k < 24; k++)
RecieveArray[k] = Serial.read(); // Receive spelled wrong
char SendArray[24]=。。。
//对于(i=0;i调用循环中的Serial.read()
将返回-1
,如果没有数据可用,或者当数据仍在通过串行线传输时。您可能正在该接收循环上用-1
填充缓冲区
您可以做的是等待Serial.available()
变为大于零,然后再调用Serial.read()
:
(k=0;k<24;k++)的{
while(Serial.available()==0);
ReceiveArray[k]=Serial.read();
}
串行
、发送阵列
和接收阵列
的类型是什么?以及串行读取()
return?您在扫描仪上使用的是什么协议?您希望接收什么以及如何检测/显示“奇怪符号”?请注意,您似乎正在发送/请求25个字符?Serial.read()
返回一个int
和序列。write
用于发送二进制数据,因此如果您试图直接可视化此数据,您将看到不可打印的字符。可以对接收到的数据进行后处理以将其转换为ASCII数字,或者管理与chars
的通信。两者都是char类型,例如command就像这个char SendArray[24]={85170,36,1,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,1};我会收到类似的东西also@MartinJames扫描器正在使用UART,我希望接收像这样的东西{85170,36,1,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,1};它是十进制或十六进制的,这无关紧要,我通过存储来显示它们,例如char store=receivearray[5];然后我使用Serial.println(store);要查看不起作用的值,仍然无法读取characters@MuhammedAshraf“不工作”没有用。“仍然获取无法读取的字符”没有公布你收到的信息、预期的信息和最简单的代码有用。例如,我发送了{85170,36,1,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,1}指纹的这一序列数据。指纹应该像这样回复ack{0x55,0xAA,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01}我应该存储此序列以对其执行操作,例如,我必须将0x01保存为用户id,我尝试将数组的元素#3存储在char类型的变量中,然后使用serial.print()打印它;要查看并了解它的值,我得到这个@Muhammed Ashraf您的发送方/接收方可能有不匹配的字长、奇偶校验或停止位设置。请查看端口两端的设置,以确保字长=8,相同的奇偶校验、停止位设置。另一个可能是信号的电压电平不兼容,因为您大部分是DROP输入1位。当发送器的电压不够负时,可能会发生这种情况。
char SendArray[24] = ...
// for(i =0 ; i<= 24 ; i++)
for(i = 0; i < 24; i++) {
Serial.write(SendArray[i]);
SendArray[i] = 0;
}
// for(k=0 ; k<=24 ; k++)
for(k = 0; k < 24; k++)
RecieveArray[k] = Serial.read(); // Receive spelled wrong
for(k = 0; k < 24; k++) {
while (Serial.available() == 0);
ReceiveArray[k] = Serial.read();
}