Таймер по сигналу.
- Войдите на сайт для отправки комментариев
Сб, 14/03/2015 - 22:54
Всем доброго.
Есть такая задача: Имеем три кнопки(1, 2, 3) и одно реле. Каждое нажатие на кнопку "1" добавляет 1 минуту, этим задаем время. Реле включается. Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается. Нажатием кнопки "3" делаем сбром времени в 0:00. Реле выключается по достижении времени 0:00 либо при сбросе времени(что одно и то же.) Время соответственно выводится на экран.
Интересует, как организовать обратный отсчет?
Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается.
При следующем нажатии на 2 отсчет с максимального значения, или с того на котором остановились?
С того, на котором остановился.
Что-нибудь типа такого
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
09
Timer_P Timer;
//создание и инициализация объекта Timer_Test класса Timer_P
10
// Создание объектов типа "Дистретный вход" они посажены описанные выше пины. Фильтр антидребезга 10мс.
11
DI Condition_IN(Condition_PIN, 10);
12
DI Reset_IN(Reset_PIN, 10);
13
DI Set_IN(Set_PIN, 10);
14
boolean Set_IN_Old;
15
long
Dur;
16
17
void
setup
() {
18
//Режимы выходов
19
pinMode(Relay_PIN, OUTPUT);
20
//делать pinMode для входов не нужно. Они инициализируются при создании объекта класса DI
21
//при работе со входами используется INPUT_PULLUP-режим. Значения входов нормализовываются во время обработки класса.
22
//замкнутая кнопка - логическая 1.
23
Serial
.begin(9600);
24
}
25
26
void
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
Это для схемы со стягивающим резистором
С того, на котором остановился.
тогда не подходит