Простой таймер
- Войдите на сайт для отправки комментариев
Вс, 27/12/2015 - 17:48
Доброго времени суток!!!
Я новичок в ваших рядах, поэтому не судите строго...
Рашил выложить пост потому, как проделал большую работу(для новичка конечно). Долго пытался разобраться с таймероми и никак не мог победить т.к. слишком сложная терминалогия, короче потихоньку разобрался с простейшим. Итак:
Задачу которую я поставил для себя:
Включать, выключать исполнительное уст-во на время, через заданный интервал. (не использую delay, по понятным причинам)
В роли устойства конечно светодиод подключенный к выводу 13)))
В ролях:
1. Arduino Nano
2. Авторский бредборд
3. Светодиод + разистор
4. Перемычки

unsigned long time;//переменная хранение текущих данных в милисекундах
unsigned long t; //переменная хранения промежуточных данных в милисекундах
unsigned long s; //переменная хранения кол-ва секунд с начала старта
unsigned long a; //переменная хранения промежуточных данных в секундах
unsigned long ON1; //переменная для установки времени включения после старта в секундах
unsigned long OFF1;//переменная для установки времени выключения после включения
int flag1; //переменная хранения значения текущего состояния вкл. или выкл.("flag1" = "1" или "flag1" = "0" соответсвенно)
int Out1 = 13; //переименование пин13, как "Out1"
void setup()
{
pinMode(Out1, OUTPUT); //Устанавливаем "Out1", как выход (для подключения усполнительного уст-ва)
Serial.begin(9600); //Устанавливаем скорость последовательного порта
t = time; //Уравниваем значение "t" и "time" т.е "0" при старте
s = 0; //Устанавливаем "s" = "0", для начала отсчета
a = s; //Уравниваем значение "a" и "s"
ON1 = 10; //устанавливаем значение включения "Out1" в секундах с начала старта
OFF1 = 5; //устанавливаем значение выключения "Out1" в секундах с начала включения
flag1 = 0; //устанавливаем значение "flag1" = "0", для начального "Out1", как выключенно
}
//идем перекурить и продолжим
void tim() //создаем функцию "tim" для обработки таймера
{
time = millis(); //переменная "time" = "milles"(в милесикундах)
if(time >= (t + 1000)) //если значение "time" станет больше или ровно "(t + 1000)"(в реальности это случиться, через 1000 милисекунд)
{s++, t=time, prin(), inta();} //то: 1). Значение "s" увеличется на 1. 2). "t" уровняется с "time". 3). Запуститься функция "prin". 4). Запуститься функция "inta".
}
void inta() //создаем функцию "inta" для обработки интервала вкл. и выкл. "Out1"
{
if (s == (a + ON1) && flag1 == 0) //если значение "s" сравнивается с "(a + ON1)" и значение "flag1" = "0"(в реальности это произойдет через 10 секунд после старта)
{a = s, flag1=1;} //то "a" уравниваем с "s" и "flag1" устанавливаем в "1"
if (s == (a + OFF1) && flag1 == 1) //если значение "s" сравнивается с "(a + OFF1)" и значение "flag1" = "1"(в реальности это произойдет через 5 секунд после установки "flag1" в "1")
{a = s, flag1=0;} //то "a" уравниваем с "s" и "flag1" устанавливаем в "0"
} //дальше все будет происходить циклично
void prin() //создаем функцию prin для вывода данных на экран компьютера, для диагностики происходящего
{
Serial.println(s); //Отправляем на экран значение переменной "s"
Serial.println(a); //Отправляем на экран значение переменной "a"
}
void loop() //Теперь наслаждаемся результатом
{
tim(); //Запускаем функцию "tim"
if(flag1 == 1) //если значение "flag1" = "1"(в реальности это произойдет через 10секунд после старта)
{digitalWrite(Out1,HIGH);} //то Out1 включаем
if(flag1 == 0) //если значение "flag1" = "0"(в реальности это произойдет через 5секунд после включения Out1)
{digitalWrite(Out1,LOW);} //то Out1 выключаем
}
не использую delay, по понятным причинам
Причины как раз и не понятны.
У Вас нет ничего такого "критичного". И кнопки никакие Вы не опрашиваете. Если только для саморазвития, дальнейшего апгрейда устройства, то да. А так с delay это уместилось бы в несколько строк.
Это конечно Вы правы, но и правы в том, что я заморочился этим не для того, чтобы диодом моргать))) делал я устройства и значительно сложней по железу и вот там, как раз delay мешается...в разработке стенд для проверки форсунок. Там тебе и кнопки и дисплей 16х2 и включение на время и ШИМ и обратная связь по датчику давления...
И написал я этот пост потому, как сам долго искал, что то подобное...
Как Вам бредборд авторский?
Как Вам бредборд авторский?
Впечатляет, есть где развернуться :)