Объект Arduino Serial использует прерывания для отправки данных через UART.
Это помогает максимально сократить время, затрачиваемое на функцию println.
По существу, объект Serial не отправляет все данные, отправленные в функцию «println», прежде чем вернуть управление функции «loop».Из-за этого, когда вы запускаете свой код, буфер последовательной передачи заполняется.
Поэтому, когда ваш код фактически входит в условие if, некоторые данные из буфера последовательной передачи не достигли вашего монитора последовательного интерфейса.
Функция 'exit' приостанавливает всю активность Arduino.Поэтому, если в буфере передачи объекта Serial есть какие-либо данные, они не передаются.
В вашем коде функция abs работает правильно.Просто некоторые числа в буфере объекта Serial не передаются, и вы чувствуете, что что-то не так.Вам нужно будет очистить буфер передачи объектов Serial перед вызовом функции 'exit', чтобы увидеть желаемые результаты.
Внесите следующие изменения в условие if, и все данные будут правильно напечатаны доПриложение запускает функцию выхода.
if(abs(li-d)<0.2)
{
Serial.println('h');
Serial.flush();
exit(0);
}
Надеюсь, это поможет.