Таймер допилка
- Войдите на сайт для отправки комментариев
Втр, 17/03/2020 - 19:51
День добрый господа формучане, да прибудет с вами сила) Собственно есть, готовый скетч таймера кухонного, казалось бы все просто, но нужно чуть допилить. Добавить кнопку - МИНУС( кнопка прибавления есть) и добавить кнопку ПАУЗА. Если кто поможет, отблагодарю чем смогу.
Сам код:
#include "TM1637.h" //библиотека дисплея
#define DISPLAY_CLK_PIN 3
#define DISPLAY_DIO_PIN 2
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
int8_t timeDisp[4];
//=========================
//const int Pin_tone = 5; // номер порта зуммера
//============================
int hour = 0; //пер.хранения часов
int minute = 0; //пер.хранения минут
int second = 0; //пер.хранения секунд
int halfsecond = 0; //пер Х.З., но очень нужна для мигания точек
int Update = 0; //пер.для хранения разрешения на обновление цифр на дисплее
//============================
#define tonePin 5 // пищалка
#define Btn_plus60_minute 7 //пин кнопки +60 минута
#define Btn_plus1_minute 8 //пин кнопки +1 минута
#define Btn_plus10_minute 9 //пин кнопки +10 минут
#define Btn_Sbros 10 //пин сброса таймера
#define ledPin 13 // сюда подключено питание дисплея
#define rele 4 // пин реле
//============================переменки таймера
unsigned long timeTimer = 0;
unsigned long startTimer = 0;
//============================
int timerFlag = 0; //флаг работы таймера
int duration = 0; //пер.
int i = 4; // Яркость дисплея (яркость 0-7)
//============================ display
void setup() {
display.set(0); //Яркость дисплея
display.init(); //Инициализация дисплея
digitalWrite(ledPin, HIGH);
displey();
pinMode(Btn_plus1_minute, INPUT_PULLUP);
pinMode(Btn_plus10_minute, INPUT_PULLUP);
pinMode(Btn_plus60_minute, INPUT_PULLUP);
pinMode(Btn_Sbros, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(rele, OUTPUT); // пин реле
}
/*обрабатываем в цыкле функцию knopki, а остальные функции обрабатываются по прерыванию
таймера Timer1 один раз в полсекунды*/
void loop() {
knopki(); //ф-ция обработки кнопок
if (Update == 1) {
displey(); //если отработала функция timer, то перезаписываем экран
}
Start();
//if (timerFlag == 1);{digitalWrite(rele, HIGH); }//реле вкл
// if (timerFlag == 0);{digitalWrite(rele, LOW);} //реле выкл
}
/*функция обработки кнопок*/
void knopki() {
if (digitalRead(Btn_plus1_minute) == LOW) { //если нажали кнопку "+1"
delay (500), duration = (duration + 1); timerFlag = 1; //то задержка 0,5 сек.//добавляем минуту//запускаем таймер
tone(5, 4000, 150); display.set(i);
digitalWrite(rele, HIGH); //вкл реле
}
if (digitalRead(Btn_plus10_minute) == LOW) { //если нажали кнопку "+10"
delay (500), duration = (duration + 10); timerFlag = 1;//то задержка 0,5 сек.//добавляем 10 минут//запускаем таймер
tone(5, 4300, 150); display.set(i);
digitalWrite(rele, HIGH);//вкл реле
}
if (digitalRead(Btn_plus60_minute) == LOW) { //если нажали кнопку "+60"
delay (500), duration = (duration + 60); timerFlag = 1;//то задержка 0,5 сек.//добавляем 60 минут//запускаем таймер
tone(5, 4600, 150); display.set(i);
digitalWrite(rele, HIGH);//вкл реле
}
if (digitalRead(Btn_Sbros) == LOW) { //если нажали "сброс"
tone(5, 3000, 200);
display.set(i);
display.set(0);
delay (10); //то задержка 0,01 сек.
digitalWrite(rele, LOW); //выкл реле если нажали "сброс"
timerFlag = 0; //останавливаем таймер
duration = 0; //И ОБНУЛЯЕМ ПЕРЕМЕННЫЕ
hour = 0; //И ОБНУЛЯЕМ ПЕРЕМЕННЫЕ
minute = 0; //И ОБНУЛЯЕМ ПЕРЕМЕННЫЕ
second = 0; //И ОБНУЛЯЕМ ПЕРЕМЕННЫЕ
halfsecond = 0; //И ОБНУЛЯЕМ ПЕРЕМЕННЫЕ
displey();
}
}
void kohec() { //По окончанию работы
timeDisp[0] = 16;
timeDisp[1] = 0; //таймера вкл. надпись OFF
timeDisp[2] = 15;
timeDisp[3] = 15;
Update = 0;
display.display(timeDisp);
}
void Start() {
timeTimer = (millis() - startTimer);
if (timeTimer > 500 && timerFlag == 1) {
timer();
startTimer = millis();
}
}
void timer() {
Update = 1;
if (timerFlag == 1) {
halfsecond ++;
if (halfsecond == 2) {
halfsecond = 0, second-- ;
}
if (second == 0) {
second = 60, duration--;
}
if (duration == -1) {
display.set(0);
second = 0;
duration = 0;
timerFlag = 0;
digitalWrite(rele, LOW); //выкл реле
displey();
kohec();
MUSIC();
}
}
}
void displey() {
hour = duration / 60;
minute = duration % 60;
if (duration >= 60) {
timeDisp[0] = hour / 10;
timeDisp[1] = hour % 10;
timeDisp[2] = minute / 10;
timeDisp[3] = minute % 10;
}
else if (duration < 60 && second < 60) {
timeDisp[0] = minute / 10;
timeDisp[1] = minute % 10;
timeDisp[2] = second / 10;
timeDisp[3] = second % 10;
}
else if (duration < 60 && second == 60) {
minute = duration % 60 + 1;
timeDisp[0] = minute / 10;
timeDisp[1] = minute % 10;
timeDisp[2] = 0;
timeDisp[3] = 0;
}
Update = 0;
display.display(timeDisp);
display.point(halfsecond == 1 ? POINT_ON : POINT_OFF);
}
void MUSIC() { //ну погоди 8 сек.
tone(tonePin, 329, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 1174, 260.6175);
delay(289.575);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 698, 130.30875);
delay(144.7875);
tone(tonePin, 523, 130.30875);
delay(144.7875);
tone(tonePin, 554, 1042.47);
delay(1158.3);
tone(tonePin, 523, 1042.47);
delay(1158.3);
tone(tonePin, 329, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 1174, 260.6175);
delay(289.575);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 698, 130.30875);
delay(144.7875);
tone(tonePin, 523, 130.30875);
delay(144.7875);
tone(tonePin, 659, 1042.47);
delay(1158.3);
tone(tonePin, 587, 1042.47);
delay(1158.3);
tone(tonePin, 329, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 1174, 260.6175);
delay(289.575);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 698, 130.30875);
delay(144.7875);
tone(tonePin, 523, 130.30875);
delay(144.7875);
tone(tonePin, 554, 1042.47);
delay(1158.3);
tone(tonePin, 523, 1042.47);
delay(1158.3);
tone(tonePin, 329, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 1174, 260.6175);
delay(289.575);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 1046, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 880, 260.6175);
delay(289.575);
tone(tonePin, 783, 130.30875);
delay(144.7875);
tone(tonePin, 698, 130.30875);
delay(144.7875);
tone(tonePin, 523, 130.30875);
delay(144.7875);
tone(tonePin, 659, 1042.47);
delay(1158.3);
tone(tonePin, 587, 1042.47);
delay(1158.3);
}
Допил делается для ребенка, не может он с наступающим таймером.
Я бы не с подпития за этот бред не взялся бы.
Но, возможно, матерями Терезами не оскуднела...
ой, где-то я такое уже видел :)
dozbot - вы сами-то не понимаете, что эти строчки - бредятина? :)
Да и задержки в полсекунды при нажатии кнопок не лучше...
есть ли смысл дорабатывать этот код?
Ребят если у кого есть простой вариант , пишите на dozbot(собака)bk.ru, и реквизиты кошельков или иного. Буду рад любым предложениям.