| Ваш IP: 3.238.4.24 | Online(43) - гости: 23, боты: 20 | Загрузка сервера: 2.11 ::::::::::::

4-х разрядный семисегментный дисплей на базе драйвера TM1637 (Arduino)

4-х разрядный семисегментный дисплей на базе драйвера TM1637 с десятичными точками в разрядах, очень прост в использовании, библиотека Arduino TM1637.zip позволяет выводить на дисплей цифры и десятичные точки, а так же ряд символов. Так же имеется возможность менять яркость свечения сегментов.

Подключение дисплея к плате Arduino очень простое:

  • VCC to Arduino 5v
  • GND to Arduino GND
  • CLK к произвольному цифровому контакту Arduino, описанному в скетче
  • DIO к произвольному цифровому выходу Arduino, описанному в скетче

Вывод чисел

#include <TM1637.h>
 TM1637 print(3,2); //CLK,DIO
 
float i1 = 0.123,i2 = -1.25;
 
void setup(){
  print.set(7);//0...7 - яркость
  print.init(D4056A);//D4056A is the type of the module
}
 
void loop(){
  print.display(i1);
  delay(2000);
  print.display(i2);
  delay(2000);
}

Вывод чисел и символов

В этом примере показан вывод символов (список доступных указаны в скетче под номерами) и символов с цифрами.

#include <TM1637.h>
 TM1637 print(3,2); //CLK,DIO
 
int8_t arr0[] = {5, 14, 17, 10};// SEGA
int8_t arr1[] = { 2, 3, 4}; // int 324
 
void setup(){
  print.set(5);//0...7 - яркость
}
 
void loop(){
  print.point(false);
  print.display(arr0);
  delay(2000);
 
/* A 0x77 = 10, b 0x7c = 11, C 0x39 = 12, d 0x5e = 13, E 0x79 = 14, F 0x71 = 15,"-" 0x40 = 16, G 0x3d = 17, H 0x76 = 18, h 0x74 = 19, 
   i 0x04 = 20, J 0x1e = 21 ,L 0x38 = 22, l 0x18 = 23, M 0x37 = 24, n 0x54 = 25, P 0x73 = 26, r 0x50 = 27, t 0x78 = 28,
   U 0x3e = 29, u 0x1c = 30, Y 0x6E = 31, o верхнее 0x5c = 32, o нижнее 0x63 = 33 */
 
  print.point(false);
  print.display(0, 16);// минус
 
  print.point(false);
  print.display(1, arr1[0]);
 
  print.point(true);
  print.display(2, arr1[1]);
 
  print.point(false);
  print.display(3, arr1[2]);
  delay(2000);
}

Далее показан пример практического применения дисплея, на дисплей выводятся показания времени с модуля DS1302. Десятичная мигающая точка используется как индикатор такта секунд.

#include <iarduino_RTC.h>
#include <TM1637.h>
  iarduino_RTC time(RTC_DS1302, 6, 7, 8); // RST, CLK, DAT
  TM1637 print(3,2); //CLK,DIO
 
  unsigned long times;
 
void setup(){
  time.begin();
  print.set(5);//0...7 - яркость
   // time.settime(0,30,18,24,10,19,4); // Записываем время в модуль: сек, мин, час, дата, месяц, год (2019 = 19), день недели (пон = 1). 
}
 
void loop(){
  time.gettime();
 
  print.point(false);
  print.display(0,time.Hours / 10);
 
  if(millis()-times<500){print.point(true);}
  if(millis()-times>1000){times=millis();}
 
  print.display(1, time.Hours % 10);
 
  print.point(false);
  print.display(2, time.minutes / 10);
 
  print.point(false);
  print.display(3, time.minutes % 10);
 
}

В следующем примере на дисплей выводим показания цифрового датчика температуры DS18B20.

#include <OneWire.h>          
#include <DallasTemperature.h>
#include <TM1637.h>
 
  TM1637 print(3,2); //CLK,DIO
  OneWire oneWire(A0);// вход датчика 18b20
  DallasTemperature temp(&oneWire);
 
 float t1;
 
void setup(){
  print.init(D4056A);//D4056A is the type of the module
  temp.begin(); temp.setResolution(12);//12 бит  
  print.set(5);//0...7 - яркость
}
 
void loop(){
  temp.requestTemperatures();// опрос 18b20
  t1 = temp.getTempCByIndex(0); // снятие показаний 18b20
 
  print.display(t1);
}

В следующем примере скетча реализован терморегулятор на микросхеме MAX6675 (модуль), которая предназначена для работы с термопарами типа К(ХА) в диапазоне температур от 0 до 1000ºС, регулировка температуры осуществляется в этом же диапазоне, дополнительно добавлена возможность регулировки гистерезиса. Значения регулировки температуры и гистерезиса хранятся в энергонезависимой памяти.

Регулировка осуществляет при помощи энкодера, при нажатии на кнопку энкодера происходит переход к параметрам регулятора (регулировка температуры, гистерезис). К выходу D13 платы Arduino подключается модуль реле для управления нагревателем.

#include <max6675.h> // https://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip
#include <TM1637.h> // https://rcl-radio.ru/wp-content/uploads/2019/10/TM1637-1.zip
#include <Encoder.h> // https://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>  
#include <MsTimer2.h> // https://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
 TM1637 print(7,6); //CLK,DIO
 MAX6675 thermocouple(4,3,2);// CLK, CS, SO
 Encoder myEnc(9, 8);// DT, CLK
 
int t,t_sum,i,t_iz,t_reg,menu,zn,w,x,gis; 
byte a[3];
unsigned long time,oldPosition  = -999,newPosition;    
 
void setup() {
  print.set(1);//0...7 - яркость
  pinMode(10,INPUT);// КНОПКА SW энкодера
  pinMode(13,OUTPUT);// выход для управления нагрузкой
  MsTimer2::set(3, to_Timer);MsTimer2::start(); 
  t_reg = EEPROM.read(0)*256+EEPROM.read(1);gis = EEPROM.read(2);
}
 
void loop() {
  ////////////// управлние //////////////////////////////////////////////////////////////
  if(digitalRead(10)==LOW){menu++;if(menu>0){delay(200);}time=millis();w=1;if(menu>2){menu=0;};}
  if (newPosition != oldPosition&&menu==1){oldPosition = newPosition;
     t_reg=t_reg+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(t_reg>999||t_reg<0){t_reg=0;}}
  if (newPosition != oldPosition&&menu==2){oldPosition = newPosition;
     gis=gis+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;if(gis>10||gis<0){gis=0;}}     
  ////////////// измерение /////////////////////////////////////////////////////////////
  if(menu==0){myEnc.write(0);t=thermocouple.readCelsius();delay(200);
  t_sum=t_sum+t;
  if(i==5){t_iz = t_sum/5;t_sum=0;i=0;}i++;
  }
  ////////////// вывод на дисплей //////////////////////////////////////////////////////
  switch(menu){
    case 0:zn = 28;x=t_iz;break;
    case 1:zn = 27;x=t_reg;break;
    case 2:zn = 17;x=gis;break;}
 
  a[0]=x/100%10;
  a[1]=x/10%10;
  a[2]=x%10%10;
 
  print.point(false);
  print.display(0, zn);
  print.display(1, a[0]);
  print.display(2, a[1]);
  print.display(3, a[2]);
 ///////////// память ///////////////////////////////////////////////////////////////////
if(millis()-time>10000 && w==1){
     EEPROM.update(0,highByte(t_reg));EEPROM.update(1,lowByte(t_reg));EEPROM.update(2,gis);
     menu=0;w=0;} 
 //////////// управление реле //////////////////////////////////////////////////////////
  if(t_reg >= t_iz + gis){digitalWrite(13,HIGH);}
  if(t_reg <= t_iz - gis){digitalWrite(13,LOW);}
 
}
 
void to_Timer(){newPosition = myEnc.read()/4;}

Комментарии

  • andrys:

    Подскажите, в скетче с температурой ошибка в компиляции: print.init(D4056A);//D4056A is the type of the module

    скетч с часами работает отлично, даже изменил на DS1307.

    И самый верхний пример не проходит компиляция.

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

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

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

  • TFT-дисплей SPI 320×240 (Arduino)

    TFT-дисплей SPI 320×240 (Arduino)

    Цветной TFT-дисплей SPI 320×240 используется для отображения текста и графических элементов: иконок, картинок, графиков, кадров анимации. Основные характеристики дисплея: Наименование: TFT01-22SP Контроллер: ILI9341C Диагональ: 3,2 дюйма Напряжение питание: 5 В Напряжение сигналов: 3,3 В Разрешение: 240 x 320 (RGB) Для работы с данными дисплеями отлично подойдет библиотека UTFT. Библиотека достаточно …Подробнее...
  • HI-FI УМЗЧ

    HI-FI УМЗЧ

    Характеристики: Номинальная выходная мощность — 24 Вт Диапазон звуковых частот при неравномерности 2дБ -20…22000Гц КНИ не более — 0,008%!!! Номинальное Uвх — 1В Rвх-7,5кОм Имеется защита от КЗ в нагрузке. Низкий КНИ достигнут благодаря введению глубокой ООС. Все детали кроме выходных транзисторов и БП монтируются на печатной плате. L1 наматывается …Подробнее...
  • Двухполярный источник питания 9 В от одной батареи

    Такой источник питания необходим для питания переносной РЭА, содержащей, например, операционные усилители. ИМС MAX1044 представляет собой конвертор напряжения с переносом заряда от конденсатора С1 к конденсатору С2 . В процессе работы MAX1044 вначале подключает «+» вывод С1 к питающему напряжению, а его «-» вывод — к общему проводу («Electronics Design», …Подробнее...
  • Индикатор уровня сигнала (Arduino)

    Индикатор уровня сигнала (Arduino)

    На рисунке показана схема линейного индикатора уровня сигнала, уст-во основано на Arduino Nano, индикатор LCD 1602. Индикатор способен отображать 30 уровней входного сигнала, входной сигнал не должен превышать 1.1 В, так как вход АЦП имеет внутреннее опорное напряжение 1.1 В. При большом уровне входного сигнала используйте делитель напряжения. #include <LiquidCrystal.h> …Подробнее...
  • Цифровой селектор входных сигналов на мультиплексорах КМОП структуры

    Число положений — 4 Максимальная амплитуда коммутирующего сигнала 7,5В Полоса частот 20…40000Гц Коэф. гармоник (20…20000Гц) — 0,1% Напряжение питания 15В Двоичный код сигнала, управляющего мультиплексором DD1, снимается с выходов RS триггеров на DD3.1-DD3.4. В зависимости от кода на входах А1 А2 микросхемы DD1 к ее выходу(вывод3) подключается один из входов. …Подробнее...