Добра! Написал програмку индикации часов на 3-х светодиодах, методом последовательной передачи, поразрядно, миганиями. Это простой таймер времени дня поэтому секунды не отображаются, минуты только десятки и получается что первый диод, день недели,второй час, третий десятки минут (сколько моргнет каждый тому и равно значение. Пока отображал часы все было идеально, стоило добавить еще пару значений-температуру и влажность и программа перестала нормально отображать время, как я только не бился. Сейчас добился того что все значения отображаются, но время почему то в 5 раз быстрее мигает, ничего не могу понять, спасайте.
листинг функции print_temp
5 0 1 0 3 4 0 0 34
4 1 1 2272 3 4 0 0 34
1 1 1 2272 3 4 0 0 34
5 1 1 2272 3 4 0 0 34
4 2 1 2549 3 4 0 0 34
1 2 1 2549 3 4 0 0 34
5 2 1 2549 3 4 0 0 34
4 3 1 2828 3 4 0 0 34
1 3 1 2828 3 4 0 0 34
5 3 1 2828 3 4 0 0 34
4 4 1 3107 3 4 0 0 34
1 4 1 3107 3 4 0 0 34
5 4 1 3107 3 4 0 0 34
4 5 1 3386 3 4 0 0 34
1 5 1 3386 3 4 0 0 34
5 5 1 3386 3 4 0 0 34
4 6 1 3666 3 4 0 0 34
1 6 1 3666 3 4 0 0 34
5 6 1 3666 3 4 0 0 34
1 7 1 3944 3 4 0 0 34
5 7 1 3944 3 4 0 0 34
1 8 1 4197 3 4 0 0 34
5 8 1 4197 3 4 0 0 34
3 9 1 4471 3 4 0 0 34
1 9 1 4471 3 4 0 0 34
5 9 1 4471 3 4 0 0 34
3 10 1 4750 3 4 0 0 34
1 10 1 4750 3 4 0 0 34
5 10 1 4750 3 4 0 0 34
3 11 1 5031 3 4 0 0 34
1 11 1 5031 3 4 0 0 34
5 11 1 5031 3 4 0 0 34
3 12 1 5313 3 4 0 0 34
1 12 1 5313 3 4 0 0 34
5 12 1 5313 3 4 0 0 34
3 13 1 5596 3 4 0 0 34
1 13 1 5596 3 4 0 0 34
5 13 1 5596 3 4 0 0 34
3 14 1 5879 3 4 0 0 34
1 14 1 5879 3 4 0 0 34
5 14 1 5879 3 4 0 0 34
3 15 1 6160 3 4 0 0 34
1 15 1 6160 3 4 0 0 34
5 15 1 6160 3 4 0 0 34
3 16 1 6443 3 4 0 0 34
1 16 1 6443 3 4 0 0 34
5 16 1 6443 3 4 0 0 34
1 17 1 6746 3 4 0 0 34
5 17 1 6746 3 4 0 0 34
1 18 1 6999 3 4 0 0 34
5 18 1 6999 3 4 0 0 34
1 19 1 7251 3 4 0 0 34
5 19 1 7251 3 4 0 0 34
1 20 1 7504 3 4 0 0 34
5 20 1 7504 3 4 0 0 34
1 21 1 7756 3 4 0 0 34
5 21 1 7756 3 4 0 0 34
1 22 1 8008 3 4 0 0 34
5 22 1 8008 3 4 0 0 34
1 23 1 8260 3 4 0 0 34
5 23 1 8260 3 4 0 0 34
5 24 2 8513 3 4 0 0 34
5 0 2 8513 2 1 2 0 34
4 1 2 8543 2 1 2 0 34
1 1 2 8543 2 1 2 0 34
5 1 2 8543 2 1 2 0 34
4 2 2 8640 2 1 2 0 34
1 2 2 8640 2 1 2 0 34
5 2 2 8640 2 1 2 0 34
4 3 2 8737 2 1 2 0 34
1 3 2 8737 2 1 2 0 34
5 3 2 8737 2 1 2 0 34
4 4 2 8834 2 1 2 0 34
1 4 2 8834 2 1 2 0 34
5 4 2 8834 2 1 2 0 34
4 5 2 8930 2 1 2 0 34
1 5 2 8930 2 1 2 0 34
5 5 2 8930 2 1 2 0 34
1 6 2 9026 2 1 2 0 34
5 6 2 9026 2 1 2 0 34
1 7 2 9091 2 1 2 0 34
5 7 2 9091 2 1 2 0 34
3 8 2 9155 2 1 2 0 34
1 8 2 9155 2 1 2 0 34
5 8 2 9155 2 1 2 0 34
3 9 2 9253 2 1 2 0 34
1 9 2 9253 2 1 2 0 34
5 9 2 9253 2 1 2 0 34
3 10 2 9349 2 1 2 0 34
1 10 2 9349 2 1 2 0 34
5 10 2 9349 2 1 2 0 34
1 11 2 9449 2 1 2 0 34
5 11 2 9449 2 1 2 0 34
1 12 2 9516 2 1 2 0 34
5 12 2 9516 2 1 2 0 34
2 13 2 9582 2 1 2 0 34
1 13 2 9582 2 1 2 0 34
5 13 2 9582 2 1 2 0 34
2 14 2 9682 2 1 2 0 34
1 14 2 9682 2 1 2 0 34
5 14 2 9682 2 1 2 0 34
2 15 2 9782 2 1 2 0 34
1 15 2 9782 2 1 2 0 34
5 15 2 9782 2 1 2 0 34
2 16 2 9881 2 1 2 0 34
1 16 2 9881 2 1 2 0 34
5 16 2 9881 2 1 2 0 34
2 17 2 9982 2 1 2 0 34
1 17 2 9982 2 1 2 0 34
5 17 2 9982 2 1 2 0 34
1 18 2 10081 2 1 2 0 34
5 18 2 10081 2 1 2 0 34
1 19 2 10150 2 1 2 0 34
5 19 2 10150 2 1 2 0 34
1 20 2 10218 2 1 2 0 34
5 20 2 10218 2 1 2 0 34
1 21 2 10287 2 1 2 0 34
5 21 2 10287 2 1 2 0 34
1 22 2 10356 2 1 2 0 34
5 22 2 10356 2 1 2 0 34
5 23 3 10424 2 1 2 0 34
5 0 3 10424 0 2 5 25 34
1 1 3 10731 0 2 5 25 34
5 1 3 10731 0 2 5 25 34
1 2 3 10984 0 2 5 25 34
5 2 3 10984 0 2 5 25 34
3 3 3 11236 0 2 5 25 34
1 3 3 11236 0 2 5 25 34
5 3 3 11236 0 2 5 25 34
3 4 3 11522 0 2 5 25 34
1 4 3 11522 0 2 5 25 34
5 4 3 11522 0 2 5 25 34
3 5 3 11808 0 2 5 25 34
1 5 3 11808 0 2 5 25 34
5 5 3 11808 0 2 5 25 34
3 6 3 12093 0 2 5 25 34
1 6 3 12093 0 2 5 25 34
5 6 3 12093 0 2 5 25 34
1 7 3 12378 0 2 5 25 34
5 7 3 12378 0 2 5 25 34
1 8 3 12631 0 2 5 25 34
5 8 3 12631 0 2 5 25 34
2 9 3 12904 0 2 5 25 34
1 9 3 12904 0 2 5 25 34
5 9 3 12904 0 2 5 25 34
2 10 3 13190 0 2 5 25 34
1 10 3 13190 0 2 5 25 34
5 10 3 13190 0 2 5 25 34
2 11 3 13478 0 2 5 25 34
1 11 3 13478 0 2 5 25 34
5 11 3 13478 0 2 5 25 34
2 12 3 13766 0 2 5 25 34
1 12 3 13766 0 2 5 25 34
5 12 3 13766 0 2 5 25 34
2 13 3 14054 0 2 5 25 34
1 13 3 14054 0 2 5 25 34
5 13 3 14054 0 2 5 25 34
2 14 3 14343 0 2 5 25 34
1 14 3 14343 0 2 5 25 34
5 14 3 14343 0 2 5 25 34
2 15 3 14632 0 2 5 25 34
1 15 3 14632 0 2 5 25 34
5 15 3 14632 0 2 5 25 34
2 16 3 14942 0 2 5 25 34
1 16 3 14942 0 2 5 25 34
5 16 3 14942 0 2 5 25 34
2 17 3 15230 0 2 5 25 34
1 17 3 15230 0 2 5 25 34
5 17 3 15230 0 2 5 25 34
Код: Выделить всё
#include "DHT.h"
#define DHTPIN A2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Соединить pin 1 (слева) для подачи +5V pin 2 DHTPIN пин13
// pin 4 (справа) на землю через 10K resistor на pin 2 (data)
volatile int diod_status=1, diod_odin, diod_dva, diod_tri;
int humidity, temp;
byte secunda_clock, minuta_clock, chas_clock, day_clock=1, diod_pin=3, diod_light;
byte schet_miganiya, vibor_info=1;
byte minuta_clock_diod, chas_clock_diod, day_clock_diod;
byte funk;
byte day_flag; //указывает выходной 1 или будний день 0
unsigned long time_old, miganie_old, period_info, chastota_miganiya=500;
int sch;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
pinMode(3,OUTPUT); //минуты
pinMode(4,OUTPUT); //часы
pinMode(5,OUTPUT); //Дни
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT); //diode
pinMode(10,OUTPUT); //diode
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
dht.begin();
test_dio(); delay(1500); indikaciya_no(); digitalWrite(diod_pin+3, 0);
}
void test_dio() {for (int i=0; i<4; i++) digitalWrite(diod_pin+i, 1);}
/**********************Функция расчета времени***************************/
void time () { funk=1; print_temp ();
if (millis ()-time_old>=10000) { time_old+=10000; secunda_clock+=10;}
if (secunda_clock==60) {secunda_clock-=60; minuta_clock++; }
if (minuta_clock==60) { minuta_clock-=60; chas_clock++;}
if (chas_clock==24) { chas_clock-=24; day_clock++; }
if (day_clock>=8) day_clock-=7;
if (day_clock%7==0||day_clock%7==6) day_flag=1; else day_flag=0;
if (chas_clock>12) chas_clock_diod=2*(chas_clock-12); else chas_clock_diod=chas_clock*2;
minuta_clock_diod=(minuta_clock-minuta_clock%10)/5; //десятки минут 5=10/2
}
/**********************Функция индикации на 3 диода любой цифро информации***************************/
void diod_minut () {digitalWrite(diod_pin, diod_light); funk=2; print_temp ();}
void diod_chasov() {digitalWrite(diod_pin+1, diod_light); funk=3; print_temp ();}
void diod_day () {digitalWrite(diod_pin+2, diod_light); funk=4; print_temp ();}
/************Функция для индикации строго по интервалу и расчета перехода на следующий диод***********/
void logika_indikasii () { funk=5; print_temp ();
if ((millis ()-miganie_old)>=chastota_miganiya)
{ diod_status*=-1; diod_light=(diod_status+1)/2; schet_miganiya++; miganie_old=millis ()+chastota_miganiya;
if (schet_miganiya<=diod_odin+2) {if(schet_miganiya<=diod_odin) diod_day(); else indikaciya_no ();}
if (schet_miganiya>(diod_odin+2)&& schet_miganiya<=(diod_odin+diod_dva+4))
{if(schet_miganiya<=(diod_odin+diod_dva+2)) diod_chasov(); else indikaciya_no ();}
if (schet_miganiya>(diod_odin+diod_dva+4))
{if(schet_miganiya<=(diod_odin+diod_dva+diod_tri+4)) diod_minut(); else indikaciya_no ();}
if(schet_miganiya>=(diod_odin+diod_dva+diod_tri+10)) {vibor_info++; print_temp ();schet_miganiya=0;} }
//if(vibor_info==2){ Serial.print(schet_miganiya); Serial.print(" "); }
}
/**********************Функция погасания 3-х диодов***********************************************/
void indikaciya_no () { for (int i=0; i<3; i++) digitalWrite(diod_pin+i, 0); }
/*******************измеряем влажность и разбиваем на единицы, десятки**************************/
void diod_humidity() { humidity = dht.readHumidity();
diod_odin=(humidity-humidity%10)/5; diod_dva=2*(humidity%10); diod_tri=0;
logika_indikasii();} // занчения умножены на 2 потому что индицируется 0 потом 1
/*******************измеряем температуру и разбиваем на единицы, десятки**************************/
void diod_temperature() { temp = dht.readTemperature();
diod_odin=0; diod_dva=(temp-temp%10)/5; diod_tri=2*(temp%10);
logika_indikasii(); } // занчения умножены на 2 потому что индицируется 0 потом 1
//здесь записал какие то значения чтобы не ждать пока набегут секунды, минуты часы, дни
void diod_day_chas_min () { diod_odin=8; diod_dva=4; diod_tri=6; // занчения кратны 2 потому что индицируется 0 потом 1
logika_indikasii();}
/***выбираем индицируемое значение, переменная меняется в логике индикации по окончании индации значений 3-х диодов + 5секунд**/
void raschet_period_info () {
if(vibor_info==5) vibor_info=1;
if(vibor_info==1 ) {diod_humidity(); }
if(vibor_info==2 ) {diod_day_chas_min(); }
if(vibor_info==3 ) {diod_temperature(); }
if(vibor_info==4 ) {diod_day_chas_min(); }
}
/************функция вывода переменных для отслеживания процесса******************/
void print_temp () {
Serial.println(); Serial.print(funk); Serial.print(" "); Serial.print(schet_miganiya); Serial.print(" ");
Serial.print(vibor_info); Serial.print(" "); Serial.print(miganie_old); Serial.print(" ");
Serial.print(diod_odin/2); Serial.print(" ");
Serial.print(diod_dva/2); Serial.print(" ");
Serial.print(diod_tri/2); Serial.print(" "); Serial.print(temp); Serial.print(" ");
Serial.print(humidity); }
void loop() {
time();
raschet_period_info();
}Спойлер
1 0 1 0 0 0 0 0 05 0 1 0 3 4 0 0 34
4 1 1 2272 3 4 0 0 34
1 1 1 2272 3 4 0 0 34
5 1 1 2272 3 4 0 0 34
4 2 1 2549 3 4 0 0 34
1 2 1 2549 3 4 0 0 34
5 2 1 2549 3 4 0 0 34
4 3 1 2828 3 4 0 0 34
1 3 1 2828 3 4 0 0 34
5 3 1 2828 3 4 0 0 34
4 4 1 3107 3 4 0 0 34
1 4 1 3107 3 4 0 0 34
5 4 1 3107 3 4 0 0 34
4 5 1 3386 3 4 0 0 34
1 5 1 3386 3 4 0 0 34
5 5 1 3386 3 4 0 0 34
4 6 1 3666 3 4 0 0 34
1 6 1 3666 3 4 0 0 34
5 6 1 3666 3 4 0 0 34
1 7 1 3944 3 4 0 0 34
5 7 1 3944 3 4 0 0 34
1 8 1 4197 3 4 0 0 34
5 8 1 4197 3 4 0 0 34
3 9 1 4471 3 4 0 0 34
1 9 1 4471 3 4 0 0 34
5 9 1 4471 3 4 0 0 34
3 10 1 4750 3 4 0 0 34
1 10 1 4750 3 4 0 0 34
5 10 1 4750 3 4 0 0 34
3 11 1 5031 3 4 0 0 34
1 11 1 5031 3 4 0 0 34
5 11 1 5031 3 4 0 0 34
3 12 1 5313 3 4 0 0 34
1 12 1 5313 3 4 0 0 34
5 12 1 5313 3 4 0 0 34
3 13 1 5596 3 4 0 0 34
1 13 1 5596 3 4 0 0 34
5 13 1 5596 3 4 0 0 34
3 14 1 5879 3 4 0 0 34
1 14 1 5879 3 4 0 0 34
5 14 1 5879 3 4 0 0 34
3 15 1 6160 3 4 0 0 34
1 15 1 6160 3 4 0 0 34
5 15 1 6160 3 4 0 0 34
3 16 1 6443 3 4 0 0 34
1 16 1 6443 3 4 0 0 34
5 16 1 6443 3 4 0 0 34
1 17 1 6746 3 4 0 0 34
5 17 1 6746 3 4 0 0 34
1 18 1 6999 3 4 0 0 34
5 18 1 6999 3 4 0 0 34
1 19 1 7251 3 4 0 0 34
5 19 1 7251 3 4 0 0 34
1 20 1 7504 3 4 0 0 34
5 20 1 7504 3 4 0 0 34
1 21 1 7756 3 4 0 0 34
5 21 1 7756 3 4 0 0 34
1 22 1 8008 3 4 0 0 34
5 22 1 8008 3 4 0 0 34
1 23 1 8260 3 4 0 0 34
5 23 1 8260 3 4 0 0 34
5 24 2 8513 3 4 0 0 34
5 0 2 8513 2 1 2 0 34
4 1 2 8543 2 1 2 0 34
1 1 2 8543 2 1 2 0 34
5 1 2 8543 2 1 2 0 34
4 2 2 8640 2 1 2 0 34
1 2 2 8640 2 1 2 0 34
5 2 2 8640 2 1 2 0 34
4 3 2 8737 2 1 2 0 34
1 3 2 8737 2 1 2 0 34
5 3 2 8737 2 1 2 0 34
4 4 2 8834 2 1 2 0 34
1 4 2 8834 2 1 2 0 34
5 4 2 8834 2 1 2 0 34
4 5 2 8930 2 1 2 0 34
1 5 2 8930 2 1 2 0 34
5 5 2 8930 2 1 2 0 34
1 6 2 9026 2 1 2 0 34
5 6 2 9026 2 1 2 0 34
1 7 2 9091 2 1 2 0 34
5 7 2 9091 2 1 2 0 34
3 8 2 9155 2 1 2 0 34
1 8 2 9155 2 1 2 0 34
5 8 2 9155 2 1 2 0 34
3 9 2 9253 2 1 2 0 34
1 9 2 9253 2 1 2 0 34
5 9 2 9253 2 1 2 0 34
3 10 2 9349 2 1 2 0 34
1 10 2 9349 2 1 2 0 34
5 10 2 9349 2 1 2 0 34
1 11 2 9449 2 1 2 0 34
5 11 2 9449 2 1 2 0 34
1 12 2 9516 2 1 2 0 34
5 12 2 9516 2 1 2 0 34
2 13 2 9582 2 1 2 0 34
1 13 2 9582 2 1 2 0 34
5 13 2 9582 2 1 2 0 34
2 14 2 9682 2 1 2 0 34
1 14 2 9682 2 1 2 0 34
5 14 2 9682 2 1 2 0 34
2 15 2 9782 2 1 2 0 34
1 15 2 9782 2 1 2 0 34
5 15 2 9782 2 1 2 0 34
2 16 2 9881 2 1 2 0 34
1 16 2 9881 2 1 2 0 34
5 16 2 9881 2 1 2 0 34
2 17 2 9982 2 1 2 0 34
1 17 2 9982 2 1 2 0 34
5 17 2 9982 2 1 2 0 34
1 18 2 10081 2 1 2 0 34
5 18 2 10081 2 1 2 0 34
1 19 2 10150 2 1 2 0 34
5 19 2 10150 2 1 2 0 34
1 20 2 10218 2 1 2 0 34
5 20 2 10218 2 1 2 0 34
1 21 2 10287 2 1 2 0 34
5 21 2 10287 2 1 2 0 34
1 22 2 10356 2 1 2 0 34
5 22 2 10356 2 1 2 0 34
5 23 3 10424 2 1 2 0 34
5 0 3 10424 0 2 5 25 34
1 1 3 10731 0 2 5 25 34
5 1 3 10731 0 2 5 25 34
1 2 3 10984 0 2 5 25 34
5 2 3 10984 0 2 5 25 34
3 3 3 11236 0 2 5 25 34
1 3 3 11236 0 2 5 25 34
5 3 3 11236 0 2 5 25 34
3 4 3 11522 0 2 5 25 34
1 4 3 11522 0 2 5 25 34
5 4 3 11522 0 2 5 25 34
3 5 3 11808 0 2 5 25 34
1 5 3 11808 0 2 5 25 34
5 5 3 11808 0 2 5 25 34
3 6 3 12093 0 2 5 25 34
1 6 3 12093 0 2 5 25 34
5 6 3 12093 0 2 5 25 34
1 7 3 12378 0 2 5 25 34
5 7 3 12378 0 2 5 25 34
1 8 3 12631 0 2 5 25 34
5 8 3 12631 0 2 5 25 34
2 9 3 12904 0 2 5 25 34
1 9 3 12904 0 2 5 25 34
5 9 3 12904 0 2 5 25 34
2 10 3 13190 0 2 5 25 34
1 10 3 13190 0 2 5 25 34
5 10 3 13190 0 2 5 25 34
2 11 3 13478 0 2 5 25 34
1 11 3 13478 0 2 5 25 34
5 11 3 13478 0 2 5 25 34
2 12 3 13766 0 2 5 25 34
1 12 3 13766 0 2 5 25 34
5 12 3 13766 0 2 5 25 34
2 13 3 14054 0 2 5 25 34
1 13 3 14054 0 2 5 25 34
5 13 3 14054 0 2 5 25 34
2 14 3 14343 0 2 5 25 34
1 14 3 14343 0 2 5 25 34
5 14 3 14343 0 2 5 25 34
2 15 3 14632 0 2 5 25 34
1 15 3 14632 0 2 5 25 34
5 15 3 14632 0 2 5 25 34
2 16 3 14942 0 2 5 25 34
1 16 3 14942 0 2 5 25 34
5 16 3 14942 0 2 5 25 34
2 17 3 15230 0 2 5 25 34
1 17 3 15230 0 2 5 25 34
5 17 3 15230 0 2 5 25 34