
Сообщение от
SoftFelix
А можно туда сразу добавить второй цикл синхронизации, как ПЦшном исходнике? В идеале на основе моего последнего кода.
Правильно ли я понял, что нужно
1) отправить 512 пустых байт
2) прочитать 3 байта
3) повторно отправить 512 пустых байт
4) еще раз считать 3 байта
?
Если так, что можно выделить часть кода в отдельную функцию и вызывать ее дважды:
Код:
bool SYNC_1986_handshake()
{
while (Serial.available()) Serial.read();
for (int i = 0; i < 512; i++) {
Serial.write(0);
}
Serial.flush();
const int NumBytesToReceive = 3; // количество байт которые ждем в ответ
int numBytesReceived = 0; // здесь храним количество принятых байт
for(int istep = 0; istep < 5; ++istep) // делаем несколько попыток считать ответ
{
while (Serial.available() && numBytesReceived < NumBytesToReceive) // читаем все что уже есть во входном буфере
{
char receivedByte = Serial.read(); // можно сохранить это где нибудь чтобы проверить значение
++numBytesReceived; // храним количество принятых байт
}
if (numBytesReceived == NumBytesToReceive) // получили все что нужно
{
return true; // возвращаем успех
}
delay(10);
}
return false; // возвращаем неудачу
}
void SYNC_1986()
{
Serial.end();
Serial.begin(9600);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Try to Sync...");
lcd.setCursor(5, 1);
bool isSuccess = SYNC_1986_handshake();
if (isSuccess) // выполняем второй шаг только если предыдущий был успешен
{
isSuccess = SYNC_1986_handshake();
}
if (isSuccess) {
lcd.print("Succes!");
} else {
lcd.print("Failed!");
delay(1000);
menu = 3; //опять вернулись к файлу прошивки
root = SD.open(name_folder + "/");
SD_card(root);
root.close();
}
}

Сообщение от
SoftFelix
Тогда тут можно и byte использовать?
Вообще в Си нет такого типа. На ардуино это тайпдеф (то есть синоним) char.