Каким кодом можно заменить pulsein?

Если вы хотите заменить функцию pulsein в Arduino, то вам понадобится написать собственную функцию, которая будет выполнять аналогичную функцию. Pulsein используется для измерения длительности импульса на определенном пине. Ниже приведен пример псевдокода, который показывает, как можно написать альтернативную функцию:

// Функция для измерения длительности импульса на пине
unsigned long myPulseIn(int pin, bool state, unsigned long timeout) {
  // Установка начальных значений
  unsigned long startTime = micros(); // Начальное время
  unsigned long duration = 0; // Длительность импульса

  // Ожидание начала импульса
  while (digitalRead(pin) != state) {
    // Проверка на истечение таймаута
    if (micros() - startTime >= timeout) {
      return 0; // Если таймаут истек, возвращаем 0
    }
  }

  // Измерение длительности импульса
  while (digitalRead(pin) == state) {
    // Проверка на истечение таймаута
    if (micros() - startTime >= timeout) {
      return 0; // Если таймаут истек, возвращаем 0
    }
    duration = micros() - startTime; // Рассчитываем длительность импульса
  }

  return duration; // Возвращаем длительность импульса
}

Выше приведенная функция myPulseIn принимает три параметра: pin (номер пина, на котором происходит измерение), state (ожидаемое состояние пина) и timeout (максимальное время ожидания импульса).

Функция начинает измерение, ожидая начала импульса с помощью цикла while. Если истекло максимальное время ожидания (timeout), функция возвращает 0.

Затем функция продолжает измерение, ожидая окончания импульса с помощью еще одного цикла while. Если истекло максимальное время ожидания (timeout), функция также возвращает 0.

Если импульс успешно измерен, функция возвращает длительность импульса в микросекундах.

Вы можете использовать эту функцию как замену pulsein в своем коде. Просто вызовите функцию myPulseIn с соответствующими параметрами вместо pulsein.