Плавное увеличение частоты выполнения

235
19 декабря 2017, 18:30

Пишу код на ардуино, раз в 1 мс подаю ток на нужный мне пин пусть это делает функция pin()

function pin(){
  digitalWrite(x,HIGH); delay(1); digitalWrite(x,LOW); 
}
bool fade = true;
byte PAUSE_FADE = 255;
long lastFade = 0;
function show(bool fade0 = false){
   if(fade0) fade = fade0;
   if(fade){
      if ((millis() - lastFade) > PAUSE_FADE){
         lastFade = millis();
         PAUSE_FADE--;
         pin();
         if(PAUSE_FADE == 0) {
           fade = false;
           PAUSE_FADE = 255;
         }
      }else delay(1);
   }else pin();
}

Необходимо записать в глобальную переменную данные для активности Fade(плавной подачи импульса).

Долгий delay() использовать нельзя.

Задача в том чтобы при изменении какого то значения я мог вызвать функцию show(true) с параметром true один раз, то в дальнейшем импульсы подавались реже чем раз в 1мс (появлялись пропуски) и с течением времени плавное увеличение частоты выполнения функции pin(); , но тем неменее функция show() без параметров вызывается в цикле программы.

Answer 1

Нужно использовать прерывание по таймеру.

Задаём квант приращения. Например, 1 мс. Удобно, если он будет равен времени высокого уровня на пине.

Задаём минимальное и максимальное время между импульсами.

Задаём флаг состояния: 0 - ничего не делать, 1 - увеличивать время, -1 - уменьшать.

Устанавливаем время срабатывания таймера, равное кванту приращения.

Разрешаем прерывания.

В обработчике прерывания от таймера проверяем состояние и либо увеличиваем, либо уменьшаем время, либо ничего не делаем. И переводим пин в высокий или низкий уровень, в зависимости от того, в каком он состоянии сейчас (это вместо вызова функции pin()).

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

READ ALSO
Вывод/передача String на экране Android

Вывод/передача String на экране Android

Добрый деньЯ начинаю осваивать Android Api и хочу вывести строку на экране телефона через консоль ПК, связанные через USB

232
Picasso в Android Java

Picasso в Android Java

Всем саламВ приложения для загрузки и вывода изображений использую picasso

236
Вытянуть данные из Firebase

Вытянуть данные из Firebase

занёс в базу три строки, помогите вытянуть их таким методом из базы в три textView

205
unreachable statement

unreachable statement

В методе Main в цикле While есть вызывается класс proverkaВ этом классе есть break, который выводит нас из цикла, если возвращается true

201