Прошу помощи.
- Войдите на сайт для отправки комментариев
Сб, 14/10/2017 - 18:00
Здравствуйте. Помогите начинающему программисту.
Есть вот такой кусок кода
void loop() { /* Переход меню №2 */ if(digitalRead(vvod) == HIGH && drebezg_vvod == 0) { millis_vvod = millis(); drebezg_vvod = 1; } if(digitalRead(vvod) == HIGH && millis() - millis_vvod >= 10 && button_vvod == 0) { button_vvod = 1; millis_vvod = 0; } if(digitalRead(vvod) == HIGH && button_vvod == 1 && stop_vvod == 0) { vremya_vvod = millis(); stop_vvod = 1; } if(digitalRead(vvod) == HIGH && millis() - vremya_vvod >= 5000 && stop_vvod == 1) { drebezg_vvod = 0; button_vvod = 0; stop_vvod = 0; menu_2(); } /* Конец переход в меню №2 */ /* Обнуление переменных кнопки "НАЗАД" */ if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 1 && button_kn_nazad == 1) { millis_kn_nazad = millis(); drebezg_kn_nazad = 0; } if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 0 && button_kn_nazad == 1 &&millis() - millis_kn_nazad >= 10) { millis_kn_nazad = 0; button_kn_nazad = 0; } /* Конец обнуления переменных кнопки "НАЗАД" */ } void menu_2() { menu_2: /* Переход в меню "КАЛИБРОВКИ" */ if(digitalRead(vvod) == HIGH && lcd_blink == 4 && drebezg_vvod == 0) { millis_vvod = millis(); drebezg_vvod = 1; } if(digitalRead(vvod) == HIGH && lcd_blink == 4 && drebezg_vvod == 1 && millis() - millis_vvod >= 10) { drebezg_vvod = 0; millis_vvod = 0; lcd_ = 0; kalibrovki(); } /* Конец перехода в меню "КАЛИБРОВКИ" */ /* Переход в "МЕНЮ №1" */ if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 0 && button_kn_nazad == 0) { millis_kn_nazad = millis(); drebezg_kn_nazad = 1; } if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 1 && button_kn_nazad == 0 && millis() - millis_kn_nazad >= 10) { millis_kn_nazad = 0; button_kn_nazad = 1; } if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 1 && button_kn_nazad == 1) { lcd_ = 0; return; } if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 1 && button_kn_nazad == 1) { millis_kn_nazad = millis(); drebezg_kn_nazad = 0; } if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 0 && button_kn_nazad == 1 &&millis() - millis_kn_nazad >= 10) { millis_kn_nazad = 0; button_kn_nazad = 0; } /* Конец перехода в "МЕНЮ №1" */ goto menu_2; } /* Конец Меню №2 */ void kalibrovki() { kalibrovki: /* Переход в "МЕНЮ №2" */ if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 0 && button_kn_nazad == 0) { millis_kn_nazad = millis(); drebezg_kn_nazad = 1; } if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 1 && button_kn_nazad == 0 && millis() - millis_kn_nazad >= 10) { millis_kn_nazad = 0; button_kn_nazad = 1; } if(digitalRead(kn_nazad) == HIGH && drebezg_kn_nazad == 1 && button_kn_nazad == 1) { lcd_ = 0; return menu_2(); } if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 1 && button_kn_nazad == 1) { millis_kn_nazad = millis(); drebezg_kn_nazad = 0; } if(digitalRead(kn_nazad) == LOW && drebezg_kn_nazad == 0 && button_kn_nazad == 1 &&millis() - millis_kn_nazad >= 50) { millis_kn_nazad = 0; button_kn_nazad = 0; } /* Конец перехода в "МЕНЮ №2" */ goto kalibrovki; }
Проблемы у меня возникли с возвратом из МЕНЮ КАЛИБРОВКИ (void kalibrovki() ) в МЕНЮ №2 (menu_2). Меня выкидывает в начало программы ( void loop() ), и что мне делать я незнаю.
Меня выкидывает в начало программы ( void loop() ), и что мне делать я незнаю.
ничего не делать - так и должно быть.
Да... Но как-бы хочется возвращаться в предедущее меню а не вначало. Ведь для того чтоб перейти из меню №1 в меню №2 мне приходится держать кнопку ВВОД 5 сек.
Ведь для того чтоб перейти из меню №1 в меню №2 мне приходится держать кнопку ВВОД 5 сек.
а, кто обещал, что будет легко? - держи кнопку.
Клапауций 112, я знаю что Вы на этом форуме ДИНОЗАВР. Неужели нет решения моей проблемы?
Клапауций 112, я знаю что Вы на этом форуме ДИНОЗАВР. Неужели нет решения моей проблемы?
нет - ты обречён попадать в главный цикл всегда.
Пипец. Жаль.
А почему не сделать так. И вроде и главный цикл не покидаешь, и туда куда надо заходишь, а куда не надо не появляешься :))
А почему не сделать так. И вроде и главный цикл не покидаешь, и туда куда надо заходишь, а куда не надо не появляешься :))
Попробую поколдую. Но как я заметил у меня обнуляются переменные, которые должны обнуляться при отпускании кнопки НАЗАД. Получается я попадаю сначала в меню№2, а затем в меню№1.
А почему не сделать так. И вроде и главный цикл не покидаешь, и туда куда надо заходишь, а куда не надо не появляешься :))
Всё равно выкидывает в начало кода. Хоть бери и ставь для каждого меню свою кнопку.
Неужели нет решения моей проблемы?
Есть. Изучить язык на котором Вы пытаетеьс писать.
Например, в строке 45 у Вас написано "
void
menu_2()
", а в строке 115 написано "return
menu_2();
". Вы понимаете что это означает? Если понимаете, что, что по-Вашему? А если не понимаете, то нафига писали?Вы вваливаетесь в бесконечный рекурсию и рано или поздно всё кончается плохо.
И выбрасывает Вас вовсе в начало loop, Вас выбрасывает в setup (вернее, в перезагрузку). Поставьте там какую-нибудь печать в Сериал и убедитесь.
Неужели нет решения моей проблемы?
Есть. Изучить язык на котором Вы пытаетеьс писать.
Например, в строке 45 у Вас написано "
void
menu_2()
", а в строке 115 написано "return
menu_2();
". Вы понимаете что это означает? Если понимаете, что, что по-Вашему? А если не понимаете, то нафига писали?Вы вваливаетесь в бесконечный рекурсию и рано или поздно всё кончается плохо.
И выбрасывает Вас вовсе в начало loop, Вас выбрасывает в setup (вернее, в перезагрузку). Поставьте там какую-нибудь печать в Сериал и убедитесь.
Я в самом начале писал.
Ни фига себе!
Я Вам сказал в какой строке у Вас ошибка (прямо номер назвал) и в чём она состоит, сказал к чему это приводит ("программа вваливается в бесконечную рекурсию"), посоветовал почитать про язык и Вы считаете. что я Вам не помогаю?
Стесняюсь спросить, а какой именно помощи Вы тогда ждёте, если указание на строку с ошибкой для Вас не помощь? Чего Вы ждёте? Как Вам можно помочь?
Как Вам можно помочь?
его можно сбросить в пропасть с голодными тиграми. ¯\_(ツ)_/¯
Я Вам сказал в какой строке у Вас ошибка (прямо номер назвал) и в чём она состоит, сказал к чему это приводит ("программа вваливается в бесконечную рекурсию"), посоветовал почитать про язык
И чо? Благодарности ждал? А хто будет
минет делатьготовый код писать?Ну, да, разве что
минет делатьготовый код писать. Тут у меня действительно недоработка.В военных училищах, которые лейтенантиков выпускают, и тех - сразу в войска, есть поговорка: "Куда солдата ни целуй - у него везде жопа!". О том, что якобы"доброе" отношение к солдатне - никогда не будет оценено адекватно.
Вот и с новичками тоже самое....
Тут у меня действительно недоработка.
Ну, хорошо, хоть признал, а то некоторые как упрутся рогом.
Какое доброе отношение к новичкам. Вы что забыли "методику". Новичка сначало надо утопить. А вот те кто всплывут с тем и работать. Программирование и схемотехника это нервные дисциплины. И те кто не выдерживают наброс говен, с этой отрасли не смогут работать , даже если это хобби.
Уважаемый ЕвгенийП, я конечно извиняюсь за свои слова и благодарен вам за то что Вы указали на мои ошибки, но дело в том что у меня, тупо, нет времени читать о языке и ждал что мне не только укажут на мои ошибки и объяснят почему неправельно, а и покажут как правильно ну и повозможности объяснят что при этом происходит. Ну или указали где можно почи тать о языке.
Почитать о языке, пожалуйста:
1. Совсем для чайников
2. Для нормального освоения - 1
3. Для нормального освоения - 2
Т.е. сделают за Вас и объяснят почему сделано так, а не иначе. Нет проблем, но только Вы братились не в томт раздел форума. Делают правильно и объясняют в другом разделе. Запостите свой запрос там и сразу укажите, что нужно сделать и подробно объяснить. Вам предложат вполне бюджетную цену и сделают. Здесь, в этом разделе, показывают ошибки, объясняют смысл ошибок, но за человека не пишут - здесь помогают тому, кто пишет сам и у кого есть время учиться свмому. У Вас ведь такого времени нет, как я понял
Собственно, понятно, что у Вас нет времени решить СВОЮ проблему. Непонятно только почему Вы считаете, что у кого-то другого есть время решать ВАШУ проблему.
А вот в том разделе у людей время есть, ибо там помогают на коммерческой основе. Не пугайтесь, судя по отдельным разговорам, которые я там читаю, цены вполне бюджетные.
Почитать о языке, пожалуйста:
1. Совсем для чайников
2. Для нормального освоения - 1
3. Для нормального освоения - 2
Большое спасибо. Буду, повозможности, штудировать предоставленное вами чтиво, потому как дюже хочется всё сделать самому.