Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Цифровые часы на TM1637 с настройкой времени и будильником — прототип на Arduino Nano

Компоненты и материалы

О проекте

Прототип механизма настройки времени и будильника для будущих проектов цифровых часов. Надеюсь, будет полезно. Предложения по улучшению приветствуются!

Полный видео-туториал доступен на канале автора. Поддержать проект можно через Patreon или PayPal.

Функционал

Код (Arduino)

// Mario's Ideas
// TM1637 Digital Clock with Setup and Alarm Functionality
#include 
#include 
#include 

// RTC module declaration: CLK, DAT, RST
virtuabotixRTC myRTC(A1, A2, A3);

int minutes, hours;
int Alarm_minutes = 5;
int Alarm_hours = 18;
uint8_t Blank[] = {0x0};
int POSITION = 0;
int digits[4];
int interval = 0;

#define AlarmBtn 9
#define Buzzer 13
#define Led 8

boolean Alarm_set = false;
boolean Alarm_in_progress = false;
boolean Setup_on = false;

#define CLK 4
#define DIO 5
TM1637Display clock(CLK, DIO);

void setup() {
  attachInterrupt(digitalPinToInterrupt(2), Press_A_Button, RISING);
  attachInterrupt(digitalPinToInterrupt(3), Press_B_Button, RISING);
  pinMode(AlarmBtn, INPUT);
  pinMode(Buzzer, OUTPUT);
  pinMode(Led, OUTPUT);
  digitalWrite(Buzzer, LOW);
  clock.setBrightness(0x0f);
  Serial.begin(9600);
}

void Press_A_Button() {
  if (interval > 3) {
    if (!Setup_on) {
      Setup_on = true;
      if (Alarm_set) {
        digits[0] = Alarm_hours / 10;
        digits[1] = Alarm_hours % 10;
        digits[2] = Alarm_minutes / 10;
        digits[3] = Alarm_minutes % 10;
      } else {
        digits[0] = myRTC.hours / 10;
        digits[1] = myRTC.hours % 10;
        digits[2] = myRTC.minutes / 10;
        digits[3] = myRTC.minutes % 10;
      }
    } else {
      POSITION++;
      if (POSITION == 4) {
        if (Alarm_set) {
          Alarm_minutes = digits[3] + digits[2] * 10;
          Alarm_hours = digits[1] + digits[0] * 10;
        } else {
          myRTC.setDS1302Time(0, digits[3] + digits[2] * 10, digits[1] + digits[0] * 10,
                              myRTC.dayofweek, myRTC.dayofmonth, myRTC.month, myRTC.year);
        }
        POSITION = 0;
        Setup_on = false;
      }
    }
    interval = 0;
  }
}

void Press_B_Button() {
  if (interval > 3 && Setup_on) {
    digits[POSITION]++;
    if (POSITION == 0 && digits[POSITION] == 3) digits[POSITION] = 0;
    if (POSITION != 0 && digits[POSITION] == 10) digits[POSITION] = 0;
    interval = 0;
  }
}

void loop() {
  // Обработка кнопки будильника (долгое нажатие)
  if (digitalRead(AlarmBtn) == HIGH && !Alarm_set) {
    if (interval > 30) { digitalWrite(Led, HIGH); Alarm_set = true; delay(300); }
  } else if (digitalRead(AlarmBtn) == HIGH && Alarm_set) {
    if (interval > 30) { Alarm_set = false; Alarm_in_progress = false; digitalWrite(Led, LOW); delay(300); }
  }

  myRTC.updateTime();

  if (Setup_on) {
    // Мигание текущего разряда
    clock.showNumberDec(digits[0], false, 1, 0);
    clock.showNumberDec(digits[1], false, 1, 1);
    clock.showNumberDec(digits[2], false, 1, 2);
    clock.showNumberDec(digits[3], false, 1, 3);
    delay(200);
    clock.setSegments(Blank, 1, POSITION);
    delay(200);
  } else {
    // Проверка будильника
    if (myRTC.minutes == Alarm_minutes && myRTC.hours == Alarm_hours && Alarm_set && !Setup_on) {
      Alarm_in_progress = true;
    }
    if (Alarm_in_progress) {
      digitalWrite(Buzzer, HIGH); delay(1000);
      digitalWrite(Buzzer, LOW); delay(1000);
    }
    // Обновление дисплея при смене минут
    if (myRTC.minutes != minutes) {
      clock.showNumberDecEx((myRTC.hours / 10 * 1000) + (myRTC.hours % 10) * 100 +
                            (myRTC.minutes / 10 * 10) + (myRTC.minutes % 10), 0x80 >> 1, true);
      minutes = myRTC.minutes;
      hours = myRTC.hours;
    }
  }
  if (interval < 200) interval++;
}

Схема подключения

Цифровые часы на TM1637 с настройкой времени и будильником — прототип на Arduino Nano

Производственный процесс

  1. Аналоговые и цифровые датчики: типы, применение и практические примеры
  2. Создание headless сигнализации утечки воды на Raspberry Pi 2 с Adafruit T‑Cobbler Plus
  3. Создание робота на Raspberry Pi и Python: полное руководство
  4. Fiix и IDC: как цифровая трансформация повышает надежность производства
  5. Как акустическая эмиссия спасла пищевого производителя от крупного простоя
  6. 8 проверенных способов сократить затраты на обслуживание и увеличить выручку с цифровым ПО
  7. Интеграция термопары с Arduino Portenta H7 через MAX6675
  8. Ускорение цифровой трансформации: Edge-to-Cloud IoT платформа Cisco & IBM
  9. Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код
  10. Понимание функциональности и инноваций подшипников в современном машиностроении