Таймер по сигналу.

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

Всем доброго.

Есть такая задача: Имеем три кнопки(1, 2, 3) и одно реле. Каждое нажатие на кнопку  "1" добавляет 1 минуту, этим задаем время. Реле включается. Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается. Нажатием кнопки "3" делаем сбром времени в 0:00. Реле выключается по достижении времени 0:00 либо при сбросе времени(что одно и то же.) Время соответственно выводится на экран.

Интересует, как организовать обратный отсчет?

X-Dron
Offline
Зарегистрирован: 24.01.2015

Тима пишет:

Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается.

При следующем нажатии на 2 отсчет с максимального значения, или с того на котором остановились?

Тима
Тима аватар
Offline
Зарегистрирован: 11.04.2013

С того, на котором остановился.

X-Dron
Offline
Зарегистрирован: 24.01.2015

Что-нибудь типа такого

01#include <DI.h>         //подключаем библиотеку DI - обработка дискретного входа из набора библиотек от X-Dron 
02#include <Timer_P.h>    //подключаем библиотеку Timer_P - работа с таямерами из набора библиотек от X-Dron
03 
04#define Condition_PIN 2     //PIN кнопки условия работы таймера
05#define Reset_PIN 3         //PIN кнопки сброса таймера
06#define Set_PIN 4           //PIN кнопки установки таймера
07#define Relay_PIN 7         //PIN реле
08 
09Timer_P Timer;               //создание и инициализация объекта Timer_Test класса Timer_P
10// Создание объектов типа "Дистретный вход" они посажены описанные выше пины. Фильтр антидребезга 10мс.
11DI Condition_IN(Condition_PIN, 10);             
12DI Reset_IN(Reset_PIN, 10);
13DI Set_IN(Set_PIN, 10);
14boolean Set_IN_Old;
15long Dur;
16 
17void setup() {
18  //Режимы выходов
19  pinMode(Relay_PIN, OUTPUT);
20  //делать pinMode для входов не нужно. Они инициализируются при создании объекта класса DI
21  //при работе со входами используется INPUT_PULLUP-режим. Значения входов нормализовываются во время обработки класса.
22  //замкнутая кнопка - логическая 1.
23  Serial.begin(9600);
24}
25 
26void loop() {
27  // Обновляем значение дискретных входов
28  // Производится их считывание с пинов и фильтрация через внутреннюю переменную класса.
29  Condition_IN.DI_Refresh();
30  Reset_IN.DI_Refresh();
31  Set_IN.DI_Refresh();
32 
33  //Запускаем таймер по фильтрованной кнопке запуска таймера.
34  //Сброс выполнения таймера по фильтрованной кнопке сброса таймера.
35  //Режим работы таймера - Mode = 1 extended pulse
36  digitalWrite(Relay_PIN, Timer.Timer(Condition_IN.DI_Read(), Reset_IN.DI_Read(), 0, Dur));
37   
38  //Получаем значение отсрочки срабатывания таймера
39  long T_Remains = Timer.GetRemains();
40  Serial.println(T_Remains);
41  if (Set_IN.DI_Read() && !Set_IN_Old) Dur = Dur + 60000;
42  if (Reset_IN.DI_Read()) Dur = 0;
43  Set_IN_Old = Set_IN.DI_Read();
44}

Библиотека  здесь

https://github.com/X-Dron/X-Dron_lib/archive/master.zip

Это для схемы со стягивающим резистором

X-Dron
Offline
Зарегистрирован: 24.01.2015

Тима пишет:

С того, на котором остановился.

тогда не подходит