/** * 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; // Возврат рассчитанной скорости передачи данных }