Files
GPS_RTC_Clock/Serial_AdjustBaud.h
135 3f97f3f02a WIP
попытка дебажить PPS/SQW.
работа на SWSerial (8,9) вывод в консоль Serial и на LCD
2024-07-27 12:36:14 +03:00

56 lines
2.0 KiB
C

/**
* Serial_AdjustBaud
*
* Функция для вычисления и возврата скорости передачи данных (baud rate) на основе полученного входного пина.
*
* @param recpin входной пин для определения скорости передачи данных
*
* @return рассчитанная скорость передачи данных на основе измеренной ширины нулевого бита
*/
long detRate(int recpin) {
long baud, x, rate = 10000;
pinMode(recpin, INPUT); // make sure serial in is a input pin
digitalWrite (recpin, HIGH); // pull up enabled just for noise protection
delay(100);
// Цикл для измерения ширины нулевого бита
for (int i = 0; i < 15; i++){
// Ожидание начала низкого бита
while(digitalRead(recpin) == 1) {}
x = pulseIn(recpin, LOW); // Измерение ширины следующего нулевого бита
rate = x < rate ? x : rate; // Обновление минимальной ширины нулевого бита
}
// Определение скорости передачи данных на основе измеренной ширины нулевого бита
if (rate < 12)
baud = 115200;
else if (rate < 20)
baud = 57600;
else if (rate < 29)
baud = 38400;
else if (rate < 40)
baud = 28800;
else if (rate < 60)
baud = 19200;
else if (rate < 80)
baud = 14400;
else if (rate < 150)
baud = 9600;
else if (rate < 300)
baud = 4800;
else if (rate < 600)
baud = 2400;
else if (rate < 1200)
baud = 1200;
else if (rate < 2400)
baud = 600;
else if (rate < 4800)
baud = 300;
else
baud = 0;
return baud; // Возврат рассчитанной скорости передачи данных
}