Время между импульсами

Может кто-то, пожалуйста, помочь с кодом?? Нужно посчитать время между всеми импульсами, которые образуются проведением вручную магнитной карты через магнитную головку. На выходе хочется получить список со временем между восходящим фронтом первого импульса и восходящим фронтом второго, между фронтом второго и третьего, третьего и четвертого и т.д. Данный код, мне кажется подходит только для меандров, а у меня импульсы дифференцируемы.

const int pin = A0; // пин, к которому подключен источник импульсов
const int numPulses = 800; // количество импульсов в секунду
const int numSamples = 1000; // количество отсчетов для создания списка промежутков времени
unsigned long pulseTimes[numSamples]; // список промежутков времени между импульсами

void setup() {
  Serial.begin(9600); // инициализация последовательного порта для вывода результатов
}

void loop() {
  int pulseCount = 0; // счетчик импульсов
  unsigned long lastPulseTime = 0; // время последнего импульса
  while (pulseCount < numSamples) {
    int pulse = analogRead(pin); // считываем значение с пина
    if (pulse > 512) { // если значение больше половины максимального, то это импульс
      unsigned long currentTime = micros(); // получаем текущее время в микросекундах
      if (lastPulseTime != 0) { // если это не первый импульс
        pulseTimes[pulseCount] = currentTime - lastPulseTime; // вычисляем промежуток времени между импульсами
        pulseCount++; // увеличиваем счетчик импульсов
      }
      lastPulseTime = currentTime; // сохраняем время последнего импульса
    }
  }
}

загруженное

Поставте компаратор на выходе, и получите строгие фронты и спады импульсов вашего сигнала.

тем более имеется встроенный

И что это значит?

А в пине ардуино его нет, видимо. Он магией фей цифровые сигналы принимает.

1 лайк

Компаратор тем удобен что можно порог срабатывания подрегулировать

На МК у компаратора тоже 2 входа и тоже можно регулировать.