Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
- const int ledPins[] = {5,6,9,10}; // пины, к которым подключены светодиоды
- const int buttonPin = 12; // пин подключения кнопки установки таймера
- const int resetPin = 11; // пин подключения кнопки сброса таймера
- const int buzzerPin = 7; // пин подключения пищалки
- long timer = -1; // таймер, в минутах
- int alarm = 0; // сколько раз пропищал сигнал срабатывания таймера
- unsigned int count = 0; // "количество нажатий" кнопки. Если держать кнопку 5+ секунд,
- // count станет больше 5 и время таймера начнёт увиличиваться
- // на 5 минут, вместо 1 минуты
- unsigned long previousMillis = 0;
- unsigned long currentMillis = 0;
- long interval = 1000; // интервал в милисекундах (минута = 60000)
- void setup() {
- // обозначаем пины светодиодов и пищалки как ВЫХОД, а пину кнопок как ВХОД
- for (int i=0; i<4; i++) {
- pinMode(ledPins[i], OUTPUT);
- }
- pinMode(buzzerPin, OUTPUT);
- pinMode(buttonPin, INPUT);
- pinMode(resetPin, INPUT);
- lcd.init(); // инициализируем экран
- lcd.backlight(); // включаем подсветку экрана
- lcd.setCursor(0,0); // устанавливаем курсор в первый символ первой строки
- lcd.print("Kitchen timer"); // выводим на экран надпись
- lcd.setCursor(5,1); // устанавливаем курсор в пятый символ второй строки
- lcd.print("v. 3.0"); // выводим на экран надпись
- delay(3000); // ждём 3 секунды
- lcd.clear(); // очищаем экран
- }
- void loop() {
- currentMillis = millis();
- if (digitalRead(resetPin) == 0) { // если кнопка сброса нажата
- lcd.clear();
- timer = -1;
- lcd.setCursor(0,0);
- lcd.print("Timer is off");
- delay(3000); // пауза 3 секунды
- lcd.noBacklight(); // отключаем подсветку экрана
- }
- // если нажата кнопка установки таймера и удерживается дольше, чем interval
- if (digitalRead(buttonPin) == 0 && currentMillis - previousMillis >= interval) {
- if (count == 0) { // если начали устанавливать таймер
- lcd.clear(); // очищаем экран
- }
- lcd.backlight();
- lcd.setCursor(0,0);
- lcd.print("Timer: ");
- if (count >= 5) { // count увеличивается на 1 каждую секунду, поэтому,
- // если кнопку настройки нажата дольше 5 секунд, начинаем
- // увеличивать таймер на 5 минут за раз
- timer = timer + 5;
- } else if (timer == -1) { // если это первоначальная настройка, то, чтобы исключить лишнее
- // срабатывание сигнала, перескакиваем через 0
- timer = timer + 2;
- } else { // иначе увеличиваем значение таймера на 1 минуту
- timer++;
- }
- count++;
- previousMillis = currentMillis;
- lcd.print(timer); // выводим на экран значение таймера
- lcd.print(" min ");
- /* lcd.setCursor(0,1);
- lcd.print("count: ");
- lcd.print(count);
- */
- }
- // если кнопка настройки не нажата и таймер установлен, то
- if (digitalRead(buttonPin) == 1 && timer > 0) {
- count = 0;
- // если прошло чётное количество секунд с начала отсчёта таймера,
- // то мигаем на экране звёздочкой, чтобы видеть работу таймера
- if ((((millis() - previousMillis)/1000)%60)%2 == 0) {
- lcd.setCursor(15,1);
- lcd.print("*");
- } else {
- lcd.setCursor(15,1);
- lcd.print(" ");
- }
- // если с начала отсчёта прошла минута, то уменьшаем значение таймера на 1
- if ((((millis() - previousMillis)/1000)/60)%60 == 1) {
- timer = timer - 1;
- previousMillis = currentMillis;
- }
- lcd.setCursor(0,0);
- lcd.print("Timer: ");
- lcd.print(timer);
- lcd.print(" min ");
- lcd.setCursor(0,1);
- lcd.print("Tick-Tock!");
- }
- // если кнопка установки не нажата и раньше таймер не устанавливался,
- // выводим предложение нажать кнопку для настройки таймера
- else if (digitalRead(buttonPin) == 1 && previousMillis == 0) {
- lcd.setCursor(0,0);
- lcd.print("Press button 1");
- lcd.setCursor(0,1);
- lcd.print("to set timer");
- }
- if (timer == 0) { // если таймер закончился
- while (alarm < 5) { // 5 раз сверкаем и пищим
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(" ALARM!!! ");
- for (int i=0; i<4; i++) {
- digitalWrite(ledPins[i], HIGH);
- }
- tone(buzzerPin, 800, 500);
- delay(1000);
- for (int i=0; i<4; i++) {
- digitalWrite(ledPins[i], LOW);
- }
- alarm++;
- }
- noTone(buzzerPin);
- lcd.setCursor(0,0);
- lcd.print(" Bon appetit :)");
- alarm = 0;
- timer = -1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement