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> // http://rcl-radio.ru/wp-content/uploads/2018/07/max6675.zip #include <TM1637.h> // http://rcl-radio.ru/wp-content/uploads/2019/10/TM1637-1.zip #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip #include <EEPROM.h> #include <MsTimer2.h> // http://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;}
Подскажите, в скетче с температурой ошибка в компиляции: print.init(D4056A);//D4056A is the type of the module
скетч с часами работает отлично, даже изменил на DS1307.
И самый верхний пример не проходит компиляция.
У меня компиляция проходит без ошибок, что-то с библиотекой, попробуйте переустановить библиотеку.