Библиотека Arduino Timer 1 управляет значением таймера
Я использую библиотеку Timer1 для генерации пульса. Но в моем коде в некоторых местах мне нужно изменить значения таймера. Может ли кто-нибудь предложить способы сделать это.
В приведенном ниже коде вместо 370000 мне нужно изменить значение после получения некоторых входных данных в условных циклах. Бывший. if (x==1) Значение таймера должно быть 370000, иначе 185000.
#include <TimerOne.h>
int count = 0;
int LED = 13;
void setup() {
pinMode(LED, OUTPUT);
Timer1.initialize(370000);
Serial.begin(9600);
}
void loop() {
Serial.print("Count Value: ");
Serial.println(count++);
}
2 ответа
▲ -1
Просто используйте переменную...
unsigned long val = 0;
void setup(){
if(something){
val = 370000;
}
else {
val = 185000;
}
Timer1.initialize(val);
}
,
@Delta_G
▲ 2
Если вы посмотрите на файл TimerOne.h, который является заголовочным файлом для библиотеки TimerOne, вы увидите в строке 55 метод
void setPeriod(unsigned long microseconds)
который можно использовать для установки периода таймера в любое время в вашей программе. Метод TimerOne.initialize()
также вызывает этот метод для установки периода таймера.
,
@chrisl
Смотрите также:
- Программирование Arduino Uno R3 для срабатывания реле каждые 24 часа
- TimerOne висит
- Как сделать очень долгую функцию delay(), несколько часов
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Разница между «time_t» и «DateTime»
- Получение BPM из данного кода
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Вызов метода
initialize
несколько раз кажется неправильным. В некоторых библиотеках это может иметь странные побочные эффекты. В случае Timer1, если вы вызоветеdetachInterrupt
, а затем измените период, используяinitialize
вместоsetPeriod
, прерывания начнутся снова, и будет вызван ваш ISR. Хотя я признаю, что это немного крайний случай., @GerbenКто сказал звонить несколько раз? Он вызывается только один раз в настройках. Есть ли в этом что-то большее, чем было в вопросе? Я думал, мы придумали способ изменить число 370000. Вопрос должен быть более конкретным. Если этот ответ является отрицательным для ответа именно на то, что было сказано в вопросе, то я отрицаю вопрос за его расплывчатость., @Delta_G
@Delta_G — вы можете вызывать функцию инициализации два раза в минуту с разными значениями, если хотите. Я построил часы, которые делают именно это, и работают уже более года без проблем. https://arduinoprosto.ru/q/68627/37523 +1 за ваш ответ., @VE7JRO
Я все еще говорю, что вопрос не просил делать это снова и снова. Вопрос просто задан, как это сделать один раз в настройке., @Delta_G
@Delta_G - вопрос не самый большой, но он говорит: «... в некоторых местах мне нужно изменить значения таймера». Мне все еще нравится твой ответ :), @VE7JRO
Хотя это и говорится, я решил, что это языковая проблема, поскольку опубликованный код ничего не показывает в цикле и показывает только одну вызываемую функцию Timer1. Если это не тот код, с которым ОП нуждался в помощи, то почему этот код был опубликован?, @Delta_G
@Delta_G правильно, я не публиковал здесь полный код. Позвольте мне уточнить. Я мигаю светодиодом/лампочками с помощью Arduino. В это время будет 370 мс и такое же время в выключенном состоянии. После измерения тока/нагрузки, если нагрузка находится в диапазоне, мне нужно запустить таймер с 370000. Если нет, таймер должен считать 185000. Итак, вот мой вопрос: как только я инициализирую таймер на 370000 в настройках, можно ли это изменить значение позже в коде. Потому что мне очень нужно изменить значение таймера. Надеюсь, это прояснит ситуацию и не прозвучит достаточно глупо, чтобы проголосовать против вопроса., @Hrishikesh Dixit
@Delta_G Также позвольте мне добавить кое-что к вопросу, что, как только я начинаю мигать светодиодами / лампочками с таймером, скажем, 370 мс. После запуска таймера, в таймере включения я проверяю нагрузку/ток путем опроса. Если нагрузка не подходит, я должен изменить значение с 370000 на 185000, в то время как таймер все еще работает с 370000., @Hrishikesh Dixit
Все это было бы проще без библиотеки таймеров, если это все, что вам нужно сделать. Просто используйте миллисекунды для определения времени., @Delta_G