Программа счетчик
Я абсолютный новичок, и в последнее время у меня возникли некоторые проблемы с этой программой, которую я пытался выполнить. По сути, я хотел с помощью Arduino подсчитать 3 импульса от генератора и сохранить время этих 3 импульсов, но, как я уже сказал, я новичок, поэтому понятия не имею, как это сделать, я был бы признателен за вашу помощь.
@BackDemoletor, 👍1
Обсуждение2 ответа
Лучший ответ:
Хотя это, вероятно, потребует доработок для ваших нужд, это должно заставить вас смотреть на правильные вещи - миллиметровки, прерывания и т.д. Официальные ссылки на: 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
Простой код
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
- Функция random() вообще не случайна
- Условие «если» проблема/вопрос
- Почему моя кнопка всегда возвращается HIGH?
- Arduino Sleep для экономии заряда батареи - Как подключить его к существующему скетчу
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
Делать то, что вы хотели бы делать хорошо, - это сложная тема, изучение которой может занять много времени. Какой код вы написали до сих пор в своих попытках? Пожалуйста, опубликуйте свои усилия (код) на данный момент. Существует множество подходов, многие из которых являются жизнеспособными, в зависимости от ширины и частоты импульсов, которые вы хотите измерить. Какова их длительность импульса, рабочий цикл и частота?, @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