Таймер допилка
- Войдите на сайт для отправки комментариев
Втр, 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, и реквизиты кошельков или иного. Буду рад любым предложениям.