| Ваш IP: 3.235.74.184 | Online(41) - гости: 16, боты: 25 | Загрузка сервера: 0.54 ::::::::::::

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

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

Часы с будильником имеют четыре кнопки управления, которые позволяют корректировать время, время будильника и настраивать яркость индикатора. Яркость индикатора и время будильника заносятся в энергонезависимую память. При срабатывании будильника из пьезоизлучателя раздается звуковой сигнал, длительность звукового сигнала 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(w==1){w=0;rtc.set(-1, mm, hh, -1, -1, -1, -1);}  
///////////////////////////////////// яркость индикатора  
  if(digitalRead(PB10)==HIGH&&digitalRead(PA7)==LOW){brig++;if(brig>4){brig=4;}tm.brig(brig);EEPROM.update(10, brig);}
  if(digitalRead(PB11)==HIGH&&digitalRead(PA7)==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 ( в настройках ) указал путь к папке где находится скетч и библиотеки указанные автором. Все работает

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

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

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

  • Усилитель мощности 6 Вт на TDA7245A

    Усилитель мощности 6 Вт на TDA7245A

    Усилитель мощности на TDA7245A с фиксированным усилением предназначен для использования в бытовой аудиотехнике. Микросхема снабжена функциями STAND-BY и тепловой защитой. Усилитель на базе TDA7245A обладает следующими техническими характеристиками: Номинальное напряжение питания 16,5В Напряжение питания 12…30В Ток покоя 17…25мА в зависимости от напряжения питания Выходная мощность при КНИ=10% 12Вт Выходная мощность …Подробнее...
  • TPS6108x: повышающий преобразователь с широким спектром применения

    Автор: Джефф Фалин Повышающие преобразователи напряжения TPS61080 и TPS61081 благодаря многочисленным интегрированным функциям и развитым схемам защиты можно применять в самых разнообразных областях, среди которых – промышленная автоматика, медицинская электроника, телекоммуникации. Особенно хорошо они приспособлены для питания светодиодных дисплеев и их подсветки. В статье инженера компании Texas Instruments подробно рассмотрены …Подробнее...
  • УНЧ на TDA1521

    УНЧ на TDA1521

    Напряжение питания ±7,5…21В Максимальный ток нагрузки 2,2А Выходная мощность при Uп=12В Rн=8Ом: КНИ = 0,5% — 6Вт КНИ = 10% — 8Вт Ток покоя 70мАПодробнее...
  • TDA7384A — 4 x 35Вт аудиоусилитель

    TDA7384A — 4 x 35Вт аудиоусилитель

    TDA7384A — четырехканальный усилитель мощности звуковой частоты, усилитель на базе TDA7384A относится к классу AB, с максимальной выходной мощностью до 4×35 Вт при нагрузке 4 Ом.  В усилителе имеется функция бесшумного выключения выходного сигнала Mute и переход в ждущий режим Stand-By. Усилитель обладает низким уровнем собственных шумов и малым коэффициентом …Подробнее...
  • УСИЛИТЕЛЬ НЧ НА ТРЕХ ТРАНЗИСТОРАХ

    УСИЛИТЕЛЬ НЧ НА ТРЕХ ТРАНЗИСТОРАХ

    На рис. показана схема простейшего усилителя НЧ, в котором можно использовать источник питания напряжением 4,5 или 9 В. При сопротивлении нагрузки 10 Ом и напряжении питания 4,5 В номинальная выходная мощность равна 70…80 мВт, а при повышении напряжения до 9 В 120… 150 мВт. В усилителе применены германиевые маломощные низкочастотные …Подробнее...