прошу помощи в отлавливании ошибки[зарыто]

Тема в разделе "Флудилка", создана пользователем CYITEP_BAC9I, 13 июл 2017.

  1. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    всем добрый вечер. в фрагменте кода набора времени для таймера столкнулся с непонятной ошибкой

    Код (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 отнималась а не прибавлялась единица. В чем ошибка так и не понял(. Заранее спасибо следопытам и всевидящим)
     
  2. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    почему такой способ. мне так проще в дальнейшем обрабатывать цифры. но если, ни кто, не сможет причину найти. то придется прибегнуть к традиционному способу, минуты /60 а мне этого не хочется.(
     
  3. mcureenab

    mcureenab Гуру

    Типы пнременных это секрет?
     
    CYITEP_BAC9I нравится это.
  4. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    Код (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ч теперь перелопачиваю
     
    Последнее редактирование: 14 июл 2017