Таймер по сигналу.
- Войдите на сайт для отправки комментариев
Сб, 14/03/2015 - 22:54
Всем доброго.
Есть такая задача: Имеем три кнопки(1, 2, 3) и одно реле. Каждое нажатие на кнопку "1" добавляет 1 минуту, этим задаем время. Реле включается. Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается. Нажатием кнопки "3" делаем сбром времени в 0:00. Реле выключается по достижении времени 0:00 либо при сбросе времени(что одно и то же.) Время соответственно выводится на экран.
Интересует, как организовать обратный отсчет?
Пока удерживаем кнопку "2" заданное время отсчитывается в обратном порядке, отпускаем - отсчет останавливается.
При следующем нажатии на 2 отсчет с максимального значения, или с того на котором остановились?
С того, на котором остановился.
Что-нибудь типа такого
#include <DI.h> //подключаем библиотеку DI - обработка дискретного входа из набора библиотек от X-Dron #include <Timer_P.h> //подключаем библиотеку Timer_P - работа с таямерами из набора библиотек от X-Dron #define Condition_PIN 2 //PIN кнопки условия работы таймера #define Reset_PIN 3 //PIN кнопки сброса таймера #define Set_PIN 4 //PIN кнопки установки таймера #define Relay_PIN 7 //PIN реле Timer_P Timer; //создание и инициализация объекта Timer_Test класса Timer_P // Создание объектов типа "Дистретный вход" они посажены описанные выше пины. Фильтр антидребезга 10мс. DI Condition_IN(Condition_PIN, 10); DI Reset_IN(Reset_PIN, 10); DI Set_IN(Set_PIN, 10); boolean Set_IN_Old; long Dur; void setup() { //Режимы выходов pinMode(Relay_PIN, OUTPUT); //делать pinMode для входов не нужно. Они инициализируются при создании объекта класса DI //при работе со входами используется INPUT_PULLUP-режим. Значения входов нормализовываются во время обработки класса. //замкнутая кнопка - логическая 1. Serial.begin(9600); } void loop() { // Обновляем значение дискретных входов // Производится их считывание с пинов и фильтрация через внутреннюю переменную класса. Condition_IN.DI_Refresh(); Reset_IN.DI_Refresh(); Set_IN.DI_Refresh(); //Запускаем таймер по фильтрованной кнопке запуска таймера. //Сброс выполнения таймера по фильтрованной кнопке сброса таймера. //Режим работы таймера - Mode = 1 extended pulse digitalWrite(Relay_PIN, Timer.Timer(Condition_IN.DI_Read(), Reset_IN.DI_Read(), 0, Dur)); //Получаем значение отсрочки срабатывания таймера long T_Remains = Timer.GetRemains(); Serial.println(T_Remains); if (Set_IN.DI_Read() && !Set_IN_Old) Dur = Dur + 60000; if (Reset_IN.DI_Read()) Dur = 0; Set_IN_Old = Set_IN.DI_Read(); }Библиотека здесь
https://github.com/X-Dron/X-Dron_lib/archive/master.zip
Это для схемы со стягивающим резистором
С того, на котором остановился.
тогда не подходит