Программа счетчик

Я абсолютный новичок, и в последнее время у меня возникли некоторые проблемы с этой программой, которую я пытался выполнить. По сути, я хотел с помощью Arduino подсчитать 3 импульса от генератора и сохранить время этих 3 импульсов, но, как я уже сказал, я новичок, поэтому понятия не имею, как это сделать, я был бы признателен за вашу помощь.

, 👍1

Обсуждение

Делать то, что вы хотели бы делать хорошо, - это сложная тема, изучение которой может занять много времени. Какой код вы написали до сих пор в своих попытках? Пожалуйста, опубликуйте свои усилия (код) на данный момент. Существует множество подходов, многие из которых являются жизнеспособными, в зависимости от ширины и частоты импульсов, которые вы хотите измерить. Какова их длительность импульса, рабочий цикл и частота?, @Gabriel Staples

Что такое "время этих 3 импульсов"? Возможно, вы захотите лучше определить его и начать с более простой версии. Например, подсчитайте время между двумя "высокими" сигналами. Кроме того, насколько точной она должна быть вам нужна? Миллисекунды или микросекунды?, @Paul

Подсчет времени проще всего выполнить с помощью "millis ()" или "micros ()" (в Интернете есть множество руководств по ним). Хотя это не работает для высокой частоты. Пожалуйста, определите ваши точные требования. О какой частоте мы говорим? Как формируются импульсы? Нужно ли вам делать что-то еще, кроме этого?, @chrisl

возьмите карандаш и бумагу .... запишите, что бы вы сделали, если бы вам пришлось выполнять задачу самостоятельно ... представьте, что импульсы длятся несколько минут с интервалом в десятки минут .... запишите небольшими четкими шагами, что бы вы сделали... это становится "псевдокодом", который может быть преобразован в реальный код, @jsotola

* У меня были некоторые проблемы с этой программой, которую я пытался выполнить * - вы тогда написали программу? Пожалуйста, опубликуйте это, чтобы люди могли помочь вам с этим. (Отредактируйте свой вопрос, чтобы сделать это). Вы также можете найти полезным этот пост: [Как задать хороший вопрос для Arduino Stack Exchange](https://arduino.meta.stackexchange.com/questions/2523/how-to-ask-a-good-question-for-arduino-stack-exchange)., @Nick Gammon


2 ответа


Лучший ответ:

1

Хотя это, вероятно, потребует доработок для ваших нужд, это должно заставить вас смотреть на правильные вещи - миллиметровки, прерывания и т.д. Официальные ссылки на: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt / https://www.arduino.cc/reference/en/language/functions/time/millis /


#define pulsesToStore 3
#define interruptPin 2
volatile unsigned char index;
unsigned long storedTimes[pulsesToStore];

void restartStorage() {
 index = 0;
 attachInterrupt(digitalPinToInterrupt(interruptPin), storeTime, RISING);
}

void storeTime() {
 storedTimes[index] = millis();
 index = index + 1;
 if(index >= pulsesToStore) { //остановить хранение
  detachInterrupt(digitalPinToInterrupt(interruptPin));
 }
}

void setup() {
 pinMode(interruptPin, INPUT_PULLUP);
 restartStorage();
}

void loop() {
  // пока ничего не делает.  здесь вы могли бы что-то сделать с сохраненными импульсами, распечатать в последовательный формат и т.д.
}

,

Спасибо, я обязательно попробую, @BackDemoletor


1

Простой код

int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
long duration = pulseIn(pin, HIGH);
 Serial.println(duration);
//delay(100);
}

Предполагая, что вы упоминаете квадратную волну, этот код измеряет время, в течение которого импульс прямоугольной волны остается ВЫСОКИМ и выводится на последовательный монитор компьютера.

Вы должны отправить сигнал на цифровой вывод 7 (или ввести любой вывод, который вы не будете изменять код int pin = 7;) 5 В HIGH и 0 В LOW.

Единица измерения времени здесь - микросекунды. Если вы не хотите измерять низкий уровень, то pulseIn (pin, LOW);

Я взял пример с официального сайта Arduino, вы можете подробнее ознакомиться здесь

https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein /

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

Аналоговая волна слишком сложна.

,

Это могло бы помочь, но есть ли какой-либо другой способ, кроме использования функции блокировки?, @BackDemoletor