Таймер на Arduino и управление с пульта на 433 MHz

Таймер на Arduino и управление с пульта на 433 MHz Таймер, Arduino, Семисегментный индикатор, Длиннопост

Один мой приятель играет в хоккей и когда узнал, что я увлекаюсь программированием МК, попросил сделать ему и его команде таймер на шесть минут.

Задачи поставил следующие:

1. Управление дистанционно (чтобы не подъезжать к табло)

2. Звуковая индикация

3. Световая индикация

4. Возможность прибавлять/убавлять минуты/секунды, а также пауза и сброс таймера

Подобрал следующие компоненты

Ардуино Мини -1шт.

Порядка ста светодиодов красного свечения

Радиоканальные модули на 433 Мгц (приемник и передатчик)

Таймер на Arduino и управление с пульта на 433 MHz Таймер, Arduino, Семисегментный индикатор, Длиннопост

Реле на 12 Вольт

Звуковая сирена "Иволга"

Поскольку я всего лишь любитель в области программирования, то особо прошу не пинать)))

Представляю вам, дорогие пикабушники-радиолюбители, код этого изобретения.

Может кому понадобится еще. Если будут вопросы, обращайтесь. Всегда рад помочь

Собственно сам код:


#include <SevenSegmentDisplay.h> //Библоитека для работы с самыми обычными индикаторами

SevenSegmentDisplay<false, QuadriDigit<9,13,12,11> > ss(2,3,4,5,6,7,8,1); // значение false или true определяет полярность дисплея: общий катод или общий анод


/////////Переменные времени


unsigned m = 6; //минуты: то,что друг просил


unsigned s = 0; //секунды


unsigned t = 0; //общее значение времени


unsigned long preMillis1 = 0;


unsigned long preMillis2 = 0;


unsigned long preMillis3 = 0;


/////////Кнопки. Переменные



int dp = HIGH; //Выход точки в состояние HIGH


int out_relay = LOW; //Выход реле в состояние LOW


unsigned long c = 0;


void setup()


{

// сюда подключаются каналы приемника

pinMode(A0, INPUT); //Старт/Стоп


pinMode(A1, INPUT); //+


pinMode(A2, INPUT); //-


pinMode(A4, OUTPUT); //Выход на реле


pinMode(10, OUTPUT); //Выход на точку


}


void loop()


{/////////работа кнопок/////////////////////////////


if (digitalRead(A0)==HIGH) //Если кнопка нажата и удерживается, то


{


dp_blink(); //мигает точка и


if (millis() - preMillis1 > 1000)


{


preMillis1 = millis();


{


countdown(); //ведется отсчет


}


}



}


else


if (digitalRead(A0)==LOW) //Если кнопка отжата, то


{


digitalWrite (10,HIGH); //точка постоянно горит


}


/////////Прибавление/убавление минут///////////////


if (millis() - preMillis2 > 500) //Задержка полсекунды


{


preMillis2 = millis();


{


if(digitalRead(A1)==HIGH)


{


m++; //на прибавление


c=0; //сброс реле


}


if(digitalRead(A2)==HIGH)


{


m--; //или убавление


if (m == 0) //Если минуты равны 0, то


{


m=0; //присвоить минутам 0


c=0; //сброс реле


}


}


}


}


/////////вывод на индикатор//////////////////////


t = m*100+s;


if (t == 0)


{


relay(); //вызов функции реле


flash(); //вызов функции мигания индиктора


}


ss.print(t);


}


////////Управление реле///////////////////////


void relay()


{


c++;


if (c == 1) //Время работы реле


{


digitalWrite (A4, HIGH);


}


else


digitalWrite (A4, LOW);


}


/////////мигание индикатора: мигает 0:00


void flash()


{


digitalWrite(9, LOW);


digitalWrite(13,LOW);


digitalWrite(12,LOW);


digitalWrite(11,LOW);


digitalWrite(10,HIGH);


delay(250);


digitalWrite(9, HIGH);


digitalWrite(13,HIGH);


digitalWrite(12,HIGH);


digitalWrite(11,HIGH);


digitalWrite(10,HIGH);


delay(250);


}


/////////Отсчет/////////////////


void countdown()


{


if (s>0)


{


s--;


}


else if (s==0 && m>0)


{


s=59;


m--;


}


else if(s==0 && m==0)


{


t=0;


}


}


////////Мигание точки/////////////////////


void dp_blink()


{


if (millis() - preMillis3 > 500)


{


preMillis3 = millis();


if (dp == HIGH)


dp = LOW;


else


dp = HIGH;


digitalWrite(10, dp);


}


}

По ссылке найдете весь проект с библоитекой , а также файлы для Proteus v 7.7

https://cloud.mail.ru/public/L1wB/aYzdKNqxe

Arduino & Pi

1.4K постов20.6K подписчика

Добавить пост

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу