我正在使用 PICKit3、MikroC PRO for PIC v6.0.0、PIC18F45 @ 8MHz 和 RN-42 蓝牙模块。我正在从笔记本电脑和我的 Android 应用程序连接到 RN-42 模块,并且我正在发送密码。奇怪的是,PIC 有时会说密码是正确的,但有时却不是。我正在发送相同的字符串。在测试时,它碰巧只有第一次不接受通过,其他所有尝试都接受了。PIC 和 RN-42 上的 UART 波特率设置为 9600。RN-42 上的 RTS 和 CTS 未连接。
我也试过:
char password[] = "abc";
char password[4] = "abc";
char password[5] = "abc\0";
char *password = "abc\0";
strcmp(input, "\0"); after the UART1_Read_Text(input, "|", MAX_UART_RX_CHARACTERS);
但它是一样的......可能是什么问题,是在我的代码中还是在 MikroC 函数中可能存在和问题?
void authenticate() {
char input[MAX_UART_RX_CHARACTERS + 1] = "";
char password[] = "abc\0";
unsigned char ready = 0;
Delay_ms(500);
UART1_Write_Text("TRobot\n");
while (connected && !ready) {
if (UART1_Data_Ready()) {
TMR0ON_bit = 0;
time_out = 0;
UART1_Read_Text(input, "|", MAX_UART_RX_CHARACTERS);
if (strcmp(input, password) == 0) {
UART1_Write('y');
serve();
} else {
UART1_Write('n');
disconnect();
}
ready = 1;
}
if (time_out) {
disconnect();
}
}
}
UARTx_Read_Text() 原型:
void UARTx_Read_Text(char *Output, char *Delimiter, char Attempts);
UARTx_Read_Text() 说明:
读取通过 UART 接收的字符,直到检测到分隔符序列。读取的序列存储在参数输出中;定界符序列存储在参数定界符中。
这是一个阻塞调用:需要定界符序列,否则程序退出(如果未找到定界符)。
参数 :
输出:接收到的文本分隔符:标识接收到的字符串结尾的字符序列尝试:定义接收到的字符数,其中预期分隔符序列。如果 Attempts 设置为 255,此例程将不断尝试检测 Delimiter 序列。
例子:
读取文本直到收到序列“OK”,然后发回收到的内容:
UART1_Init(4800); // initialize UART1 module
Delay_ms(100);
while (1) {
if (UART1_Data_Ready() == 1) { // if data is received
UART1_Read_Text(output, "OK", 10); // reads text until 'OK' is found
UART1_Write_Text(output); // sends back text
}
}