| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Нужна помощь с функцией https://radiokot.ru/forum/viewtopic.php?f=66&t=189903 |
Страница 1 из 1 |
| Автор: | rss-999 [ Вс сен 10, 2023 13:54:43 ] |
| Заголовок сообщения: | Нужна помощь с функцией |
Доброго времени друзья! Подскажите как вынести код в отдельную функцию и вызывать ее по названию. На пример: Код: if (событие) {та самая функция} Краткое описание кода: по рандому зажечь светодиод, если соответствующая ему кнопка нажата, потушить. Вот сам код: Код: int key() {
int val = analogRead(5); if (val < 50) return 3; else if (val < 513) return 4; else if (val < 683) return 5; else if (val < 768) return 6; else if (val < 819) return 7; else if (val < 853) return 8; else if (val < 878) return 9; else if (val < 896) return 10; else if (val < 910) return 11; else if (val < 922) return 12; else if (val < 931) return 13; else if (val < 939) return 14; else return 0; } int p, r, c; long randNumber; void setup() { Serial.begin(9600); //pinMode(A5, INPUT_PULLUP); for (p = 3; p < 15; p++) { pinMode(p, OUTPUT); digitalWrite(p, LOW); } } void loop() { label: randNumber = random(3, 14); if (r == randNumber) { goto label; } r = randNumber; digitalWrite(randNumber, HIGH); // включает светодиод for (c = 0; c < 22222; c++) { // цикл-таймер if (randNumber == key()) { digitalWrite(randNumber, LOW); Serial.print("button"); Serial.print(":"); Serial.println(key()); delay(100); goto label; } else if (key() != 0 && randNumber != key()) { Serial.print("!button"); Serial.print(":"); Serial.println(key()); digitalWrite(randNumber, LOW); delay(100); goto label; } //else if } //for } //void loop() |
|
| Автор: | Аlex [ Вс сен 10, 2023 20:04:28 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Приведённый Вами код уже состоит из нескольких функций. Какой конкретно код хотите вынести в отдельную функцию ? И зачем ? |
|
| Автор: | ELECTROS [ Пн сен 11, 2023 10:01:23 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Доброго времени друзья! Подскажите как вынести код в отдельную функцию и вызывать ее по названию. На пример: if (событие) {та самая функция} goto уберите, а вместо while(){} и break используйте например; Функцию вызова чтения клавиатуры что то типа такого можно, для инвертирования светика Код: switch(key() ){ case 0: LED1_TOGGLE;break; case 1: LED2_TOGGLE;break; ......... } Но это не то что надо, вопрос поставлен так что непонятно что надо вообще. |
|
| Автор: | rss-999 [ Пн сен 11, 2023 12:16:51 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Приведённый Вами код уже состоит из нескольких функций. Какой конкретно код хотите вынести в отдельную функцию ? И зачем ? Все что в loop вынести в отдельную функцию, как передавать в эту функцию нажатия кнопок? |
|
| Автор: | Аlex [ Пн сен 11, 2023 13:09:02 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
rss-999 писал(а): Все что в loop вынести в отдельную функцию loop - это уже отдельная функция.rss-999 писал(а): как передавать в эту функцию нажатия кнопок? В какую "эту" ? И что значит передать "нажатие кнопок" ? В функцию можно передавать переменные, в виде параметров. Физические явление передать туда невозможно.Вы уверены, что понимаете свои вопросы ? |
|
| Автор: | veso74 [ Пн сен 11, 2023 16:08:50 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
И попробуйте на C/C++ с label не писать код. Попробуйте напр. с флагами, break и т. д., немного измените логику и все будет готово. |
|
| Автор: | BOB51 [ Пн сен 11, 2023 16:17:04 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
У rss-999 уже штуки три подобных темы... А тут еще помимо прочего с логической ошибкой - попробуй определи, сколько и каких кнопок нажато в данный момент. Это же не позиционное сканирование, а аналоговый набор... Посему если среди случайной комбинации попалась "истинная" кнопа - выявить невозможно будет. Об "некорректностях", кочующих из темы в тему, уже говорить надоело...
|
|
| Автор: | rss-999 [ Вт сен 12, 2023 07:11:37 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Разобрался как сделать, работает. Всем спасибо. Остался вопрос, иногда считывается 2-3 нажатия вместо 1, как это исправить. Вот код если кому интересно Код: int key() {
int val = analogRead(5); if (val < 50) return 3; else if (val < 513) return 4; else if (val < 683) return 5; else if (val < 768) return 6; else if (val < 819) return 7; else if (val < 853) return 8; else if (val < 878) return 9; else if (val < 896) return 10; else if (val < 910) return 11; else if (val < 922) return 12; else if (val < 931) return 13; else if (val < 939) return 14; else return 0; } //int key() int abc() { int r, c; long randNumber; label: randNumber = random(3, 14); if (r == randNumber) {goto label;} r = randNumber; digitalWrite(randNumber, HIGH); // включает светодиод for (c = 0; c < 22222; c++) { // цикл-таймер if (randNumber == key()) { digitalWrite(randNumber, LOW); delay(100); continue; } else if (key() != 0 && randNumber != key()) { digitalWrite(randNumber, LOW); delay(100); continue; } //else if } //for } //int abc() void setup() { Serial.begin(9600); randomSeed(analogRead(17)); for (int p = 3; p < 15; p++) { pinMode(p, OUTPUT); digitalWrite(p, LOW); } } void loop() { abc(); } //void loop() |
|
| Автор: | Martian [ Вт сен 12, 2023 16:14:01 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Код: for (c = 0; c < 22222; c++) { // цикл-таймер if (randNumber == key()) { digitalWrite(randNumber, LOW); delay(100); continue; } else if (key() != 0 && randNumber != key()) { digitalWrite(randNumber, LOW); delay(100); continue; } //else if } //for если continue; убрать, что будет? если if (randNumber == key()) не сработало, надо ли потом проверять randNumber != key(), каковы шансы, что что-то изменилось и ещё раз проверить надо? Если в обоих вариантах одно и тоже, нужны ли оба? Код: int abc() { int r, c; long randNumber; label: randNumber = random(3, 14); if (r == randNumber) {goto label;} r = randNumber; Вы уверены, что переменная, так объявленная внутри функции, сохранит своё значение при следующем вызове? Прочитайте про static. |
|
| Автор: | linkov1959 [ Вт сен 12, 2023 21:04:51 ] |
| Заголовок сообщения: | Re: Нужна помощь с функцией |
Разобрался как сделать, работает. Всем спасибо. Остался вопрос, иногда считывается 2-3 нажатия вместо 1, как это исправить. [/code] Вот с этого надо было начинать... |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


