Библиотека 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++);
}

, 👍1


2 ответа


-1

Просто используйте переменную...

unsigned long val = 0;

void setup(){
  if(something){
    val = 370000;
  } 
  else {
    val = 185000;
  }
  Timer1.initialize(val);
}
,

Вызов метода 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


2

Если вы посмотрите на файл TimerOne.h, который является заголовочным файлом для библиотеки TimerOne, вы увидите в строке 55 метод

void setPeriod(unsigned long microseconds)

который можно использовать для установки периода таймера в любое время в вашей программе. Метод TimerOne.initialize() также вызывает этот метод для установки периода таймера.

,