Как читать данные аналогового датчика с помощью разных таймеров в Arduino
У меня есть три аналоговых датчика, таких как напряжение, температура и давление. Мне нужно измерять напряжение и температуру каждые 10 мс, и мне нужно измерять только давление каждые 30 мс с помощью таймеров в Arduino.
Как я могу это сделать?
@Pritha, 👍-1
Обсуждение1 ответ
Пусть это поможет в качестве отправной точки! Не проверено
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
}
unsigned long previousMillis1;
unsigned long previousMillis2;
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis1 >= 10) {
int val1 = analogRead(A0);
int val2 = analogRead(A1);
Serial.print("Values from A0 and A1: ");
Serial.print(val1);
Serial.print(" ");
Serial.println(val2);
previousMillis1 = currentMillis;
}
if (currentMillis - previousMillis2 >= 30) {
int val3 = analogRead(A2);
Serial.print("Value from A2: ");
Serial.println(val3);
previousMillis2 = currentMillis;
}
}
Спасибо за вашу любезную помощь, мистер Карлос Коста, но мне нужно использовать таймер 1 или 2. Без использования миллисекунд я должен прочитать данные датчика., @Pritha
Предположительно, это школьный проект. Разрешено ли вам использовать готовые библиотеки или вы должны использовать прямую настройку аппаратных регистров таймера? Какой Ардуино вы используете? В любом случае, техническое описание микроконтроллера — хорошее (но тяжелое) начало., @6v6gt
- Получение BPM из данного кода
- Насколько точно Arduino отсчитывает время?
- Проблемы с передачей данных через RF24
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Как сделать очень долгую функцию delay(), несколько часов
- Разница между «time_t» и «DateTime»
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
см. пример BlinkWithoutDelay в меню примеров Arduino IDE., @Juraj
Вы видели эту библиотеку? https://www.avdweb.nl/arduino/timing/virtualdelay, @VE7JRO
пожалуйста, добавьте свой код в свой пост, @jsotola
Для этого вам нужен только один таймер, который срабатывает каждые 10 мс. Затем считывайте давление только каждый третий раз. Или вы можете просто использовать
millis()илиmicros()в зависимости от остальной части вашего кода. Пожалуйста, поделитесь этим кодом и объясните, что он должен делать, @chrislначните с BlinkWithoutDelay, как упоминал @Juraj ... не удаляйте никакую часть кода ... добавьте переменную счетчика и установите ее на ноль ... перейдите к той части программы, где обновляется светодиод ... добавьте функция измерения напряжения и температуры... если счетчик = 0, то измерить давление... приращение счетчика... если счетчик = 3, то установить счетчик на ноль... когда все заработает то изменить переменную задержки с 500 до 10, @jsotola
«…с помощью таймеров в Arduino». У вас есть несколько вариантов в зависимости от того, насколько глубоко вам нужно зайти в этом упражнении, перечисленные здесь в порядке возрастания сложности. (1) Простая запись времени начала события и проверка того, не истек ли его временной интервал, как в уже упомянутом скетче «мигание без задержки». (2) использование готовых библиотек таймеров, которые могут вызывать указанные пользователем функции через определенные промежутки времени и т. д. и (3) прямая настройка аппаратных таймеров для запуска процедур обслуживания прерываний, прямого управления контактами gpio и т. д., @6v6gt