| Ваш IP: 3.235.75.174 | Online(57) - гости: 21, боты: 36 | Загрузка сервера: 0.97 ::::::::::::


Часы с будильником + TM1637 + STM32 (Arduino)

На базе отладочной платы STM32 (базе микроконтроллера STM32F103C8T6) и семисегментном четырех разрядном дисплее TM1637 можно собрать простые часы с будильником. В уст-ве используются часы реального времени DS3231 (DS1307).

Часы с будильником имеют четыре кнопки управления, которые позволяют корректировать время, время будильника и настраивать яркость индикатора. Яркость индикатора и время будильника заносятся в энергонезависимую память. При срабатывании будильника из пьезоизлучателя раздается звуковой сигнал, длительность звукового сигнала 1 минута, прервать который можно путем нажатия на любую кнопку.

Для коррекции времени и времени будильника необходимо нажать и удерживать кнопку коррекция времени или коррекция будильника и кнопками часы++ и минуты ++ установить нужное время (для точной установки секунд, установите минуты на 1 минуту больше, при смене минуты нажмите кнопку «Коррекция времени» для обнуления секунд ).

Часы реального времени DS3231 содержат датчик температуры, показания датчика температуры выводятся на индикатор каждые 10 секунд.

Перед заливкой скетча в STM32 Вам необходимо ознакомиться со следующей статьей — STM32 Arduino IDE

#include <Wire.h>
#include <STM32_TM1637.h>                // https://rcl-radio.ru/wp-content/uploads/2020/02/STM32_TM1637_V1_3.zip
#include <uRTCLib.h>                     // https://github.com/Naguissa/uRTCLib.git
#include <EEPROM.h>                      // https://rcl-radio.ru/wp-content/uploads/2019/12/Arduino_STM32-master.zip
   STM32_TM1637 tm(PB0,PB1);// CLK, DIO
   uRTCLib rtc(0x68);       
 
   // PB7 = SDA DS1307 (DS3231) 
   // PB6 = SCL DS1307 (DS3231)
   // PB0 = CLK TM1637
   // PB1 = DIO TM1637
   // PB5 = коррекция времени
   // PB10 = часы++, яркость++
   // PB11 = минуты++, яркость--
   // PA7 = коррекция будильника
   // PA1 = пьезоизлучатель
 
float h;
int i,hh,mm,brig,al_hh,al_mm;
byte w,alarm,w1;
 
void setup(){  
   Wire.begin();
   EEPROM.init(0x801F000,0x801F800,0x400);// 1024 byte
   brig = EEPROM.read(10);al_hh = EEPROM.read(11);al_mm = EEPROM.read(12);
  // rtc.set(30, 37, 23, 2, 17, 12, 19);
  // RTCLib::set(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
  pinMode(PB5,INPUT);pinMode(PB10,INPUT);pinMode(PB11,INPUT);pinMode(PA7,INPUT);
  pinMode(PA1, PWM);
  if(brig>4){brig=4;}tm.brig(brig);
}
 
void loop(){alarm=0;
////////////////////////////////////// вывод времени  
  if(digitalRead(PB5)==LOW&&alarm==0&&digitalRead(PA7)==LOW){
   hh=rtc.hour();mm=rtc.minute();
   rtc.refresh();// опрос времени
   h = rtc.hour()*100 + rtc.minute();tm.print_time(h, 0);delay(500);
   tm.print_time(h, 1);delay(500);i++;
//if(i==10){i=0;tm.print_float(rtc.temp()/100,0 ,0b1111000,0,0,0);delay(2000);}// вывод температуры DS3231 (t 27)
if(i==10){i=0;tm.print_float(rtc.temp(),0 ,0,0,0b01100011,0b00111001);delay(2000);}// вывод температуры DS3231 (27*C)
  }
///////////////////////////////////// коррекция времени - часы и минуты
  if(digitalRead(PB5)==HIGH&&digitalRead(PB10)==HIGH){w=1;hh++;if(hh>23){hh=0;}delay(300);tm.print_time(hh*100+mm, 1);}
  if(digitalRead(PB5)==HIGH&&digitalRead(PB11)==HIGH){w=1;mm++;if(mm>59){mm=0;}delay(300);tm.print_time(hh*100+mm, 1);}
  if(digitalRead(PB5)==HIGH&&digitalRead(PB10)==LOW&&digitalRead(PB11)==LOW){rtc.set(0, mm, hh, -1, -1, -1, -1);}
  if(w==1){w=0;rtc.set(0, mm, hh, -1, -1, -1, -1);}  
///////////////////////////////////// яркость индикатора  
  if(digitalRead(PB10)==HIGH&&digitalRead(PA7)==LOW&&digitalRead(PB5)==LOW){brig++;if(brig>4){brig=4;}tm.brig(brig);EEPROM.update(10, brig);}
  if(digitalRead(PB11)==HIGH&&digitalRead(PA7)==LOW&&digitalRead(PB5)==LOW){brig--;if(brig<0){brig=0;}tm.brig(brig);EEPROM.update(10, brig);}
///////////////////////////////////// будильник
  if(digitalRead(PA7)==HIGH&&digitalRead(PB10)==HIGH){w1=0;al_hh++;if(al_hh>23){al_hh=0;}delay(300);EEPROM.update(11, al_hh);}
  if(digitalRead(PA7)==HIGH&&digitalRead(PB11)==HIGH){w1=0;al_mm++;if(al_mm>59){al_mm=0;}delay(300);EEPROM.update(12, al_mm);}
  if(digitalRead(PA7)==HIGH){tm.print_time(al_hh*100+al_mm, 1);}
 
  if(hh*100+mm==al_hh*100+al_mm&&w1==0){alarm=1;}else{alarm=0;}
  if(alarm==1&&(digitalRead(PA7)==HIGH||digitalRead(PB5)==HIGH||digitalRead(PB10)==HIGH||digitalRead(PB11)==HIGH)){alarm=0;w1=1;}
  if(alarm==1){pwmWrite(PA1,35000);delay(200);pwmWrite(PA1,0);delay(100);}else{pwmWrite(PA1,0);}
  }// loop

Комментарии

  • rn3qkp:

    Вот что видно при повторе

    C:\Users\zigzag\Documents\Arduino\tm1637_stm32\tm1637_stm32.ino: In function ‘void loop()’:

    tm1637_stm32:38:41: error: ‘class STM32_TM1637’ has no member named ‘print_time’

    h = rtc.hour()*100 + rtc.minute();tm.print_time(h, 0);delay(500);

    ^

    tm1637_stm32:39:7: error: ‘class STM32_TM1637’ has no member named ‘print_time’

    tm.print_time(h, 1);delay(500);i++;

    ^

    tm1637_stm32:44:94: error: ‘class STM32_TM1637’ has no member named ‘print_time’

    if(digitalRead(PB5)==HIGH&&digitalRead(PB10)==HIGH){w=1;hh++;if(hh>23){hh=0;}delay(300);tm.print_time(hh*100+mm, 1);}

    ^

    tm1637_stm32:45:94: error: ‘class STM32_TM1637’ has no member named ‘print_time’

    if(digitalRead(PB5)==HIGH&&digitalRead(PB11)==HIGH){w=1;mm++;if(mm>59){mm=0;}delay(300);tm.print_time(hh*100+mm, 1);}

    ^

    tm1637_stm32:53:33: error: ‘class STM32_TM1637’ has no member named ‘print_time’

    if(digitalRead(PA7)==HIGH){tm.print_time(al_hh*100+al_mm, 1);}

    ^

    Несколько библиотек найдено для «Wire.h»
    Используется: C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\STM32F1\libraries\Wire
    Не используется: C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\STM32F1\libraries\WireSlave
    Несколько библиотек найдено для «STM32_TM1637.h»
    Используется: C:\Users\zigzag\Documents\Arduino\libraries\STM32_TM1637
    Не используется: C:\Program Files (x86)\Arduino\libraries\STM32_TM1637
    Несколько библиотек найдено для «uRTCLib.h»
    Используется: C:\Users\zigzag\Documents\Arduino\libraries\uRTCLib-master
    Не используется: C:\Program Files (x86)\Arduino\libraries\uRTCLib-master
    Несколько библиотек найдено для «EEPROM.h»
    Используется: C:\Program Files (x86)\Arduino\hardware\Arduino_STM32-master\STM32F1\libraries\EEPROM
    Не используется: C:\Users\zigzag\Documents\Arduino\libraries\EEPROM-master
    exit status 1
    ‘class STM32_TM1637’ has no member named ‘print_time’

  • liman28:

    нет, надо удалить STM32_TM1637

  • rn3qkp:

    Я решил эту проблему так.
    В папку с данным скетчем скопировал указанные библиотеки ,а в программе Arduino ide ( в настройках ) указал путь к папке где находится скетч и библиотеки указанные автором. Все работает

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Простейшее экономное охранное устройство

    Схема (см. рисунок) питается от источника +10 — +60 В. Ток покоя 0,2 мА при 60 В. Выходная мощность до 20 Вт. Шлейф может быть длиной 20 м. Устройство можно также использовать как мощный генератор, удалив гнезда XS1, XS2 и резистор R1. Транзисторы VT1 и VT2 следует установить на радиаторы …Подробнее...
  • Часы-будильник на КА1035ХЛ1

    К1035ХЛ1 — 24 вывод, выполнена в корпусе с торцевыми выводами под поверхностный монтаж. Управление D1 при помощи кнопок — КОРР — коррекция и пуск часов. МИН — установка минут, ЧАС — установка часов и БУД — режим установки будильника. S1 — отключает функцию будильника. источник питания выдает 2-а напряжения — …Подробнее...
  • Детектор скрытой проводки

    В качестве антенны используется отрезок провода или металлический стержень диаметром около 5 мм и длиной 70…90мм. Принцип работы На VT1 и VT3 собран НЧ мультивибратор. Его рабочая частота определяется в основном номиналами конденсаторов. В исходном состоянии, когда щуп антенны прибора удален на значительное расстояние от скрытой проводки, полевой транзистор VT2 …Подробнее...
  • LM4752 — УМЗЧ 2*11 Вт

    LM4752 — УМЗЧ 2*11 Вт

    LM4752TS — двух канальный усилитель мощности звуковой частоты. выходная мощность (номинальная) 11 Вт на канал при сопротивлении нагрузки 4 Ом и 7 Вт на канал при нагрузке 8 Ом. Схема усилителя содержит минимум внешних элементов, после сборки усилитель в настройке не нуждается. Технические параметры Напряжение питания от 9 В до 32 …Подробнее...
  • МАРКИРОВКА ЧИП-КОНДЕНСАТОРОВ

    Номинал пассивных компонентов для поверхностного монтажа маркируется по определенным стандартам и не соответствует напрямую цифрам, нанесенным на корпус. Статья знакомит с этими стандартами и поможет Вам избежать ошибок при замене чип-компонентов. Основой производства современных средств радиоэлектронной и вычислительной техники является технология поверхностного монтажа или SMT-технология (SMT — Surface Mount Technology). …Подробнее...