всем добрый вечер. в фрагменте кода набора времени для таймера столкнулся с непонятной ошибкой Код (C++): if(Mode_switch_TEMP ==1) { static unsigned long NAZATIE_5 = millis(); if( digitalRead(Step_up) == HIGH && Step_up_F == 0 ) //если нажали кнопку шаг вверх Set_time_5 +1 { Serial.println("Step_up"); Step_up_F = 1; Set_time_5++; digitalWrite(Led_Start, 1); } if( digitalRead(Step_up) == HIGH &&( millis() - NAZATIE_5) >=1000 && (millis()- Auto_click )>=300) //если задержали нажатие автоматически добавляем +1 каждые 300 мск { Downtime =millis(); Auto_click =millis(); Set_time_5++; } if (digitalRead(Step_up) == LOW && Step_up_F == 1 ) { NAZATIE_5 = millis(); Downtime =millis(); Step_up_F = 0; digitalWrite(Led_Start, 0); } if( digitalRead(Step_down) == HIGH && Step_down_F == 0) { Serial.println("Step_down----"); Step_down_F = 1; digitalWrite(Led_Start, 1); } if (digitalRead(Step_down) == LOW && Step_down_F == 1 ) { Downtime =millis(); Step_down_F = 0; Set_time_5 = Set_time_5 -1 ; digitalWrite(Led_Start, 0); } //------------------------------------------------------------------------------------------------- if (Chas_5 >0 && Set_time_5 <0) { Chas_5 = Chas_5 - 1;//Chas_5 Set_time_5 =59; } if (Set_time_5>59) //вычисляем часы { Chas_5++; Set_time_5 =0;// в часе 60 минут } if (Set_time_5<10) // если минут меньше 10 { time5_desjtki= 0; // первая цифра 0 time5_edinicy= Set_time_5; // вторая цифра минуты } if ( Set_time_5>=10) // если минут больше или равно 10 { time5_desjtki= Set_time_5/10; // первая цифра - делим на 10 time5_edinicy= Set_time_5%10; // вторая цифра - остаток } disp.display(0,NumTab[20]); disp.display(1,NumTab[( Chas_5 )]); disp.display(2,NumTab[( time5_desjtki)]); disp.display(3,NumTab[(time5_edinicy)]); Serial.println("Set_time_5"); Serial.println(Set_time_5); Serial.println("Chas_5"); Serial.println(Chas_5); } кнопками Step_up и Step_down идет набор времени. так вот в принципе это не сильно важно но, когда происходит уменьшение времени меньше 1 часа , допустим 1 час 00 минут. сдела так что при следующем нажатии Step_down разряд часов убавляется на 1 , минутам присваивается 59. но вот и фигушки. вместо этого переменная Chas_5 прибавляется 1 и Set_time_5 никак не становится 59. уже все до дыр просмотрел. очевидно лажанул где то. просьба, если кому то бросится в глаза эта ошибка, помогите ее исправить. или что бы не искать, то как переправить эту часть Код (C++): if (Chas_5 >0 && Set_time_5 <0) { Chas_5 = Chas_5 - 1;//Chas_5 Set_time_5 =59; } чтобы от переменной Chas_5 отнималась а не прибавлялась единица. В чем ошибка так и не понял(. Заранее спасибо следопытам и всевидящим)
почему такой способ. мне так проще в дальнейшем обрабатывать цифры. но если, ни кто, не сможет причину найти. то придется прибегнуть к традиционному способу, минуты /60 а мне этого не хочется.(
Код (C++): int Set_time_5 =0; int Chas_5=0; byte time5_desjtki=0; byte time5_edinicy=0; переполнения не должно быть. отрицательного значения то же не может принять. все переменные проверил по всей простыне скетча. Нигде не пересекаются и не переназначаются. Видно где то чисто синтаксическая ошbбка, но не вижу ее в упор. тем более условие Код (C++): if (Chas_5 >0 && Set_time_5 <0) выполняется. А почему идет сложение вмесnо вычитания хз. вообще как скетч вышел за 80% памяти ардуины, начались глюки самого компилятора. если в начале он спокойно реагировал на такое объявление Код (C++): byte time5_desjtki, time5_edinicy=0; то теперь ругается на перекрестное обращение, пришлось все в столбец каждую переменную записывать. Тему в принципе можно зарыть. Т.к не смог найти ошибку и переделываю алгоритм рассчета на мин/60. весь скеnч теперь перелопачиваю