私は PICKit3、PIC v6.0.0 用の MikroC PRO、PIC18F45 @ 8MHz、および RN-42 Bluetooth モジュールを使用しています。ラップトップと Android アプリの両方から RN-42 モジュールに接続し、パスワードを送信しています。奇妙なことに、PIC はパスワードが正しいと言うことがありますが、そうでないこともあります。同じ文字列を送信しています。テスト中、たまたま最初の 1 回だけパスを受け入れず、他のすべての試みは受け入れられました。UART ボーレートは、PIC と RN-42 の両方で 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
}
}