Помогите исправить функцию
- Войдите на сайт для отправки комментариев
Чт, 20/06/2019 - 14:47
Здраствуйте. Клавиши управления задают значения переменным, но проблема в том, что значение которое доходит до 0 перескакивает снова на большее, а вот от большого до 0 это уже не происходит, в чем проблема? Если код для обеих клавиш написан одинаково. благодарю за помощь.
if(POMP_mode_SET){ // Если нажата кнопка UP if(digitalRead(PIN_button_UP)){ while(digitalRead(PIN_button_UP)){delay(50);} // ждём пока мы не отпустим кнопку UP switch (POMP_mode_SET){ // инкремент (увеличение) устанавливаемого значения case 1: set_value((first_hour==0?23:first_hour+1), -1, -1, -1, -1, -1); break; case 2: set_value(-1, (first_minutes==0?59:first_minutes+1), -1, -1, -1, -1); break; case 3: set_value(-1, -1, (end_hour==0?23:end_hour+1), -1, -1, -1); break; case 4: set_value(-1, -1, -1, (end_minutes==0?59:end_minutes+1), -1, -1); break; case 5: set_value(-1, -1, -1, -1, (rain_hours1==0?23:rain_hours1+1), -1); break; case 6: set_value(-1, -1, -1, -1, -1, (rain_hours2==0?23:rain_hours2+1) ); break; } } // Если нажата кнопка DOWN if(digitalRead(PIN_button_DOWN)){ while(digitalRead(PIN_button_DOWN)){delay(50);} // ждём пока мы её не отпустим switch (POMP_mode_SET){ // декремент (уменьшение) устанавливаемого значения case 1: set_value((first_hour==0?23:first_hour-1), -1, -1, -1, -1, -1); break; case 2: set_value(-1, (first_minutes==0?59:first_minutes-1), -1, -1, -1, -1); break; case 3: set_value(-1, -1, (end_hour==0?23:end_hour-1), -1, -1, -1); break; case 4: set_value(-1, -1, -1, (end_minutes==0?59:end_minutes-1), -1, -1); break; case 5: set_value(-1, -1, -1, -1, (rain_hours1==0?23:rain_hours1-1), -1); break; case 6: set_value(-1, -1, -1, -1, -1, (rain_hours2==0?23:rain_hours2-1) ); break; } } // Если нажата кнопка SET if(digitalRead(PIN_button_SET)){ while(digitalRead(PIN_button_SET)){ // ждём пока мы её не отпустим delay(10); if(i<85){i++;}else{ } } if(i<85){ // если кнопка SET удерживалась меньше 2 секунд if(VAR_mode_SHOW==3){ POMP_mode_SET++; // переходим к следующему устанавливаемому параметру if(VAR_mode_SHOW==3 && POMP_mode_SET>6){POMP_mode_SET=1;} } }else{ // если кнопка SET удерживалась дольше 2 секунд, то требуется выйти из режима установки даты/времени POMP_mode_SET=0;// выходим из режима установки даты/времени settings = true; } } } void set_value (int i1, int i2, int i3, int i4, int i5, int i6){ // if(i1<=23 && i1>=0){first_hour=i1;} if(i2<=59 && i2>=0){first_minutes=i2;} if(i3<=23 && i3>=0){end_hour=i3;} if(i4<=59 && i4>=0){end_minutes=i4;} if(i5<=23 && i5>=0){rain_hours1=i5;} if(i6<=23 && i6>=0){rain_hours2=i6;} }
проблема в том, что значение которое доходит до 0 перескакивает снова на большее, а вот от большого до 0 это уже не происходит,
Значение ЧЕГО? Какой переменной? Вы нам ребус предлагаете?
Значение ЧЕГО? Какой переменной? Вы нам ребус предлагаете?
Почему ребус? Значение это простые цифры которые задаются клавишами вверх, вниз. А переменных там несколько first_hour, first_minutes, end_hour...и т.д. которые и приобретают эти значения при переключении вверх вниз. А уже дальше в коде эти значения я использую для других целей, хотя это сейчас не имеет значения. Но я зашел в тупик и прошу вашей помощи. Когда значение переменной клавишами сбрасываю к 0, для удобства перескакивает, в случае first_hour сразу на 23. с другой же стороны, если поднять до 23 уже на 0 не переходит. Помогите разобраться в ошибке.. Ну не получается изменить код( Спасибо
Здравствуйте. Проблема в том, что у вас код для обоих клавиш написан практически одинаково. Вам нужно переосмыслить логику при нажатии кнопки вверх и кнопки вниз и сравнить с тем, что есть сейчас.
Как Вы понимаете условие в строке #6?
Здравствуйте. Проблема в том, что у вас код для обоих клавиш написан практически одинаково. Вам нужно переосмыслить логику при нажатии кнопки вверх и кнопки вниз и сравнить с тем, что есть сейчас.
Думал об этом и скорее всего так и сделаю, спасибо. Но это не один switch, в программе их много. То есть, кнопки вверх, вниз в различных режимах выполняют свои функции + - но для разных событий. И переписывать придется много, все таки интересно почему не работает, если в одну сторону перебрасывает, а в другую нет. Ладно буду решать другим путем. Спасибо.
В строках 6-11 условия переключения неправильно заданы. Должны быть противоположны строкам 18-23.
Как Вы понимаете условие в строке #6?
своего рода проверка, где-то когда-то подсмотрел, иногда использую. либо так show_page=show_page==1?2:1;
А что, не стоит?
В строках 6-11 условия переключения неправильно заданы. Должны быть противоположны строкам 18-23.
Помогайте, как их нужно исправлять? Мои проверки> границ сбрасывают значение в 0, но дальше не хочет с 0 ++
Как Вы понимаете условие в строке #6?
своего рода проверка, где-то когда-то подсмотрел, иногда использую. либо так show_page=show_page==1?2:1;
А что, не стоит?
Проверка чего? Просто напишите русским словами, как оно действует (в вашем понимании).
У вас поднимается значение до 24 или 60. Почему вы сравниваете с 0? Должны установить 0, а устанавливаете 23 или 59.
У вас поднимается значение до 24 или 60. Почему вы сравниваете с 0? Должны установить 0, а устанавливаете 23 или 59.
Ааа, и так просто? намек понял. Все исправил) работает. Спасибо)
Проверка чего? Просто напишите русским словами, как оно действует (в вашем понимании).
я не могу развернуто вам ответить так до конца действительно не понимал принцип. Но кажется сейчас все стоит на своем месте. и вас благодарю.