Вывод информации на 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 приводит к тому, что часы идут неправильно и двоеточие ведет себя некорректно
проблема не в понимании, а в том, что я могу вывести например время, но какой командой менять показ времени на показ температуры??
Это и называется "проблема в понимании". Обратитесь в раздел "Ищу исполнителя", оплатите и Вам сделают.
Проблема не в понимании, а в отсутствии понимания. И если нет понимания, то его точно надо купить, хотя бы на это устройство.