простые интересные РАДИОСХЕМЫ сделанные своими руками


» СХЕМЫ И СТАТЬИ

» Гость

Мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизируйтесь!





Отметить прочитанными   -   Поиск   -   Правила   -   Новые сообщения

  • Страница 1 из 1
  • 1
Модератор форума: Электродыч, Sam, ВIOS  
Форум радиолюбителей » СХЕМЫ » МИКРОСХЕМЫ » Сброс задержки перед началом задержки arduino
Сброс задержки перед началом задержки arduino
Сб, 28.03.2020, 09:55 | Сообщение # 1        
SaperEx
аватар
  Постов: 26  Offline ОК 
Как можно вывернуться и сделать задержку, которая будет работать по принципу перезапуска при вызове задержки, до того, как она вызовет событие?

Например дошло до delay, пошел таймер отсчитывать 500мс, а тут прилетает следующее срабатывание delay, и она должна сбросить свой таймер и начать отсчитывать заного, а если delay был вызван и последующего срабатывания delay нету, то она должна дойти до 500мс и вызвать положенное ей событие

Так полагаю нужно обычный таймер вложить в тот таймер который уже есть или же можно как то обойтись другим методом?

Суть кода:
Читать каждые 50мс напряжение u1, если значение превысило то сразу записать 0, если же напряжение упало, то через 500мс записать 1, если во время того как идет отсчет 500мс, появится опять высокое напряжение, то сделать сброс счетчика на 500мс

Код

#include <MsTimer2.h>

#define MEASURE_PERIOD 500 // время периода измерения
#define R1  17.8  // сопротивление резистора R1
#define R2  5.5 // сопротивление резистора R2

const int vg    =   2;

int timeCount;  // счетчик времени
float u1;   // измеренные напряжения
float u2;   // измеренные напряжения
int onof;

void  timerInterupt() {
  timeCount++;
}

void setup() {
  Serial.begin(9600);  // инициализируем порт, скорость 9600
  MsTimer2::set(1, timerInterupt); // прерывания по таймеру, период 1 мс
  MsTimer2::start();              // разрешение прерывания
  pinMode(vg,OUTPUT);
}

void loop() {

  if ( timeCount >= MEASURE_PERIOD ) {
    timeCount= 0;

    // чтение кода канала
    u1=  ((float)analogRead(A0)) * 5. / 1024. / R2 * (R1 + R2);

if (u1 > 7.35)
{digitalWrite(vg,LOW);
onof=1;}

else
//delay(500);
{digitalWrite(vg,HIGH);
onof=0;}

// отладка, вывод значений в COM порт
Serial.print("V");
Serial.print(onof, 2);
Serial.print("-");
Serial.print(u1, 2);
Serial.print("T");
  }
}

// обработка прерывания 1 мс
Форум радиолюбителей » СХЕМЫ » МИКРОСХЕМЫ » Сброс задержки перед началом задержки arduino
  • Страница 1 из 1
  • 1
Поиск:

Кто есть кто на форуме радиолюбителей: Администратор Модераторы Друзья Проверенные Новички
Группа вконтакте Канал ютуб Группа в фэйсбук © 2010-2021 "Радиосхемы" Все права защищены Почта Моб.версия