Почему меняется значение переменной

Chernoslav
Offline
Зарегистрирован: 31.03.2020

Не могу понять, почему меняется значение переменной в коде:

FlashFlag = 2;

  if (FlashFlag == 3) // срабатывает при третьем проходе
  {
    brightness = temp;
    FlashFlag = 1;
Serial.println(temp); 
  }

  if (FlashFlag == 0)  // срабатывает при втором проходе
  {
    brightness = 1;
    FlashFlag = 3;
Serial.println(temp); 
  }

  if (FlashFlag == 2) // срабатывает при первом проходе
  { 
    temp = brightness;
    brightness = 255;
    FlashFlag = 0;
Serial.println(temp); 
  }

в мониторе порта появляются значения temp

22:07:47.093 -> 175
22:07:47.093 -> 255
22:07:47.194 -> 1

в то время, как temp не должно менять своё значение.

мне нужно запомнить текущее значение яркости ленты, включить на максимум, потом на минимум, потом вернуть обратно на ту яркость, какая была. а у меня переменная, которая должна помнить это значение, почему то его теряет.
почему это происходит? часа 2 уже сижу голову ломаю, не могу разобраться.

 
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

вы все врете!

в строке 19 temp меняется однозначно!

а вот чему на тот момент равна brightness для нас загадка.

Chernoslav
Offline
Зарегистрирован: 31.03.2020

в 19 строке temp присваивается значение brightness, оно равно 175 и я бы хотел рассчитывать, что оно таким и останется при втором и третьем проходе, после чего, значение temp обратно я присвою для brightness.
но в мониторе порта видно, что temp меняется, а не должно.
при этом, не выше в программе, ни ниже значение temp нигде больше не используется.

какой смысл мне вам врать, чтобы вы надо мной потроллили?

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Попробуйте добавить вывод Serial.println(FlashFlag); перед каждым Serial.println(temp);

Это может помочь вам проследить последовательность вызовов.

Chernoslav
Offline
Зарегистрирован: 31.03.2020

добавил. вызовы работают корректно, но это не объясняет, почему temp меняется 3 раза, когда должно присвоиться 1 раз и больше не изменяться.

логически я понимаю, что пишу правильно, но возможно не учитываю какие то особенности работы Ардуино или глюки.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

По приведенному куску трудно сказать как оно ДОЛЖНО работать.

У вас в первой строчке FlashFlag = 2;

Т.е. каждый раз в цикле FlashFlag = 2;

 

Chernoslav
Offline
Зарегистрирован: 31.03.2020

FlashFlag = 2 

выставляется выше по нажатию на сенсор и это не объясняет почему меняется temp.

b707
Offline
Зарегистрирован: 26.05.2017

весь код выложите

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я сёдня в тонусе, давайте..

из того что вы воложили/наложили 

FlashFlag = 2;

поэтттомууу условие в строке 17 будет выполнятся всегда и безукоснительно ))*&^%^

а затем, как и  пи..сал выше, в строке 19 temp примет значение brightness

его значение из вашего куска не понятно, что вы хотите черт возьми?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

я так думаю ща будет - это не тот скеч, это отладка, и че вы все такие тупые, не можете объяснить...

b707
Offline
Зарегистрирован: 26.05.2017

xDriver пишет:

я так думаю ща будет - это не тот скеч, это отладка, и че вы все такие тупые, не можете объяснить...

 зачем вообще отвечать что-то человеку, который выложил отрывок кода без начала и конца? - пусть выкладывает скетч полностью или пусть разбирается сам.

Chernoslav
Offline
Зарегистрирован: 31.03.2020

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

выше был объявлен массив, а в setup он инициализировался в цикле нулями.

компилятор ругался, что так делать не надо. почему, я не понял.

спасибо всем, кто откликнулся

b707
Offline
Зарегистрирован: 26.05.2017

Chernoslav пишет:

выше был объявлен массив, а в setup он инициализировался в цикле нулями.

компилятор ругался, что так делать не надо. почему, я не понял.

скорее всего выход за границы массива. Выложили бы полный код - разгадали бы вашу загадку.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

весь код выложите

Мужики, давайте вот с такого начинать и, пока не выполнено, не писать ничего!

Ну, чего мы как мартышки трём хрустальные шары, а потом узнаём, что "поциент в ресета аналогридом читает"?