РАДИОСХЕМЫ



СТАРЫЙ ФОРУМ

ФОРУМ НА ЭЛВО

РАДИОФОРУМЫ


СХЕМЫ И СТАТЬИ
  • БЛОГИ
  • НОВОЕ
  • СХЕМЫ
  • РАЗНОЕ
  • ТЕОРИЯ
  • ТЕЛЕВИДЕО
  • СВЕТОДИОД
  • МЕДТЕХНИКА
  • БЫТТЕХНИКА
  • ИЗМЕРИТЕЛИ
  • СПРАВОЧНИК
  • ТЕХНОЛОГИИ
  • РЕМОНТ СХЕМ
  • МОБИЛЬНИКИ
  • КОМПЬЮТЕРЫ
  • НАЧИНАЮЩИМ
  • ЗАРЯДКИ И АКБ
  • СИГНАЛИЗАЦИИ
  • АУДИОТЕХНИКА
  • АВТОВЕЛОМОТО
  • БЛОКИ ПИТАНИЯ
  • РАДИОПРИЁМНИКИ
  • МЕТАЛЛОИСКАТЕЛИ
  • МИКРОКОНТРОЛЛЕР
  • РАДИОПЕРЕДАТЧИКИ

  • Курс по ускорению работы Мозга на 100%


    • Страница 1 из 1
    • 1
    Архив - только для чтения
    Сброс задержки перед началом задержки arduino
    Сб, 28.03.2020, 08:55 | Сообщение # 1        
    SaperEx
    аватар
      Постов: 26   ОК 
    Как можно вывернуться и сделать задержку, которая будет работать по принципу перезапуска при вызове задержки, до того, как она вызовет событие?

    Например дошло до 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 мс
    • Страница 1 из 1
    • 1
    Поиск:

    Внимание! Форум переехал на Tehnodium.ru



    © 2010-2022 "Форум Радиосхемы". All Rights Reserved  Почта  PDA