HC-05 Arduino AT автоматизированная команда INQ - PullRequest
0 голосов
/ 13 ноября 2018

Новичок здесь, прочитайте все вопросы о HC-05, но в этом случае мне это не поможет. Я управляю AT-командами моего HC-05 в своем коде Arduino, так что я могу нажать кнопку на моей главной стороне Bluetooth / Arduino Master, которая запросит ближайший подчиненный с командой INQ, например, ответить на его адрес. + INQ: 2016: 6: 61785. Это записывается мастером в строку, двоеточия заменяются запятыми и отправляются в модуль Master BT с остальными командами для сопряжения двух устройств. Это все работает очень хорошо, но проблема здесь в том, что подтверждение «хорошо» после того, как адрес приходит сразу после адреса, который затем появляется в моей строке вместо адреса, не всегда, но в большинстве случаев, так что это удар и пропустить каждый сейчас и тогда. Как я могу не читать "хорошо".? Просто не могу понять это по какой-то причине. С платой Arduino она работает немного лучше, как если бы между адресом и «ок» была небольшая задержка, поэтому строка сначала захватывает адрес, но с моим отдельным прототипом Atmel328p «ок» иногда приходит слишком быстро. Вот фрагмент кода, который я использую для команд AT.

//*****Setup Routine for Slave device*******

ButtonState = digitalRead(Button); // read AT Setup Mode button 


if (ButtonState == LOW) { 


digitalWrite(SetLED, HIGH);          // Switch Setup LED ON during Setup
digitalWrite(HC_05_SETUPKEY, HIGH);  // Set AT command mode when powering up
delay(500);
digitalWrite(HC_05_PWR1, LOW);       // Power VCC
digitalWrite(HC_06_PWR2, LOW);       // Power VCC

wdt_reset();                  

delay(1000);
digitalWrite(HC_05_PWR1, HIGH); // Power VCC
digitalWrite(HC_06_PWR2, HIGH); // Power VCC


wdt_reset();                   

delay(1000);

wdt_reset();                   

delay(1000);

wdt_reset();                   

BTSerial.println("AT");
delay(500);

wdt_reset();                   

BTSerial.println("AT+RMAAD");  // Delete previously paired device

delay(500);

wdt_reset();                  

BTSerial.println("AT+INIT");   // Initialize Bluetooth Module before Inquiry
delay(1000);

wdt_reset();                   

delay(1000);

wdt_reset();                  

BTSerial.println("AT+INQ");    // Inquire Nearest Receiver
// delay(11)   

// Here is where the "ok" creeps in too quickly sometimes
String BTName = BTSerial.readString(); // Read Inquired Data from Bluetooth 
                                          Module

String a = (BTName.substring(5, 9) + ","); // De construct and add commas to 
                                              String
String b = (BTName.substring(10, 11) + ",");
String c = BTName.substring(12, 17);

delay(1000);

wdt_reset();                 

String g = ("AT+BIND=");
String h = g + a + b + c;     // Construct String command
BTSerial.println(h);          // Bind the two Bluetooth Modules
delay(1000);

wdt_reset();                  

String i = ("AT+LINK=");
String j = i + a + b + c;     // Construct string command
BTSerial.println(j);          // Link the two Bluetooth Modules
delay(1000);

wdt_reset();                  

digitalWrite(HC_05_SETUPKEY, LOW);   // Cycle the Bluetooth Module Power
delay(10);
digitalWrite(HC_05_PWR1, LOW); // Power VCC
digitalWrite(HC_06_PWR2, LOW); // Power VCC

delay(1000);

wdt_reset();               

delay(1000);

wdt_reset();                

digitalWrite(HC_05_PWR1, HIGH); // Power VCC
digitalWrite(HC_06_PWR2, HIGH); // Power VCC

digitalWrite(SetLED, LOW);

// wdt_reset();             

} 
...