Вывод информации на 7 сегментный индикатор
- Войдите на сайт для отправки комментариев
Пт, 25/05/2018 - 10:06
Хочу реализовать градусник и часы. Необходимо, чтобы дисплей выводил часы, а через 5 секунд информацию о температуре. Подскажите что сделать в коде.
#include <TimerOne.h>
#include <TM1637.h>
#define ON 1
#define OFF 0
#define B 3950 // B-коэффициент
#define SERIAL_R 10000 // сопротивление последовательного резистора, 102 кОм
#define THERMISTOR_R 10000 // номинальное сопротивления термистора, 100 кОм
#define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм)
const byte tempPin = A0;
#define CLK 6//pins definitions for TM1637 and can be changed to other ports
#define DIO 7
TM1637 tm1637(CLK,DIO);
#define PIN1 9
#define PIN2 10
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
int8_t TempDisp[]= {0x00,0x00,0x00,0x63};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 11;
void setup() {
tm1637.set();
tm1637.init();
Timer1.initialize(500000);//timing for 500ms
Timer1.attachInterrupt(TimingISR);//declare the interrupt serve routine:TimingISR
pinMode (PIN1, INPUT_PULLUP);
pinMode (PIN2, INPUT_PULLUP);
}
void loop() {
if(Update == ON)
{
TimeUpdate();
tm1637.display(TimeDisp);
}
}
void TimingISR()
{
halfsecond ++;
Update = ON;
if(halfsecond == 2){
second ++;
if(second == 60)
{
minute ++;
if(minute == 60)
{
hour ++;
if(hour == 24)hour = 0;
minute = 0;
}
second = 0;
}
halfsecond = 0;
}
int but1 = digitalRead(PIN1);
if (but1==0){
minute++;
second=0;
}
if (minute==60){
minute=0;
}
int but2= digitalRead (PIN2);
if (but2==0){
hour++;
}
if (hour==24){
hour=0;
}
// Serial.println(second);
ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
if(ClockPoint)tm1637.point(POINT_ON);
else tm1637.point(POINT_OFF);
TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10;
Update = OFF;
}
//градусник
void Termo (){
int t = analogRead( tempPin );
float tr = 1023.0 / t - 1;
tr = SERIAL_R / tr;
float temp;
temp = tr / THERMISTOR_R; // (R/Ro)
temp = log(temp); // ln(R/Ro)
temp /= B; // 1/B * ln(R/Ro)
temp += 1.0 / (NOMINAL_T + 273.15); // + (1/To)
temp = 1.0 / temp; // Invert
temp -= 273.15;
int zpt=temp*10;
if ( zpt<0){
zpt=-zpt;
}
int ty=temp;
if ( ty<0){
ty=-ty;
}
if (temp<0) {
tm1637.displayByte(0,0x40);}
else{
tm1637.displayByte(0,0x00);}
tm1637.display(1,ty/10);
tm1637.display(2,ty%10);
tm1637.display(3,0x63);
}
ну этот код ты не сам же писал?
1. Разобраться в коде и понять как он устроен;
2. Дописать (изменить) его так, "чтобы дисплей выводил часы, а через 5 секунд информацию о температуре"
Начинать надо обязательно с п.1, тогда п.2 никаких затруднений не вызовет.
Код отчасти сам отчасти, проблема не в понимании, а в том, что я могу вывести например время, но какой командой менять показ времени на показ температуры?? delay приводит к тому, что часы идут неправильно и двоеточие ведет себя некорректно
проблема не в понимании, а в том, что я могу вывести например время, но какой командой менять показ времени на показ температуры??
Это и называется "проблема в понимании". Обратитесь в раздел "Ищу исполнителя", оплатите и Вам сделают.
Проблема не в понимании, а в отсутствии понимания. И если нет понимания, то его точно надо купить, хотя бы на это устройство.