Например TDA7294

Форум РадиоКот • Просмотр темы - Нужна помощь с функцией
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 12, 2025 15:09:07

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Нужна помощь с функцией
СообщениеДобавлено: Вс сен 10, 2023 13:54:43 
Первый раз сказал Мяу!

Зарегистрирован: Вт авг 15, 2023 06:46:22
Сообщений: 24
Рейтинг сообщения: 0
Доброго времени друзья! Подскажите как вынести код в отдельную функцию и вызывать ее по названию. На пример:
Код:
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()



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Вс сен 10, 2023 20:04:28 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4593
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Приведённый Вами код уже состоит из нескольких функций.
Какой конкретно код хотите вынести в отдельную функцию ? И зачем ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Пн сен 11, 2023 10:01:23 
Открыл глаза

Зарегистрирован: Пт ноя 11, 2016 09:17:49
Сообщений: 66
Рейтинг сообщения: 0
Доброго времени друзья! Подскажите как вынести код в отдельную функцию и вызывать ее по названию. На пример: if (событие) {та самая функция}

goto уберите, а вместо while(){} и break используйте например;
Функцию вызова чтения клавиатуры что то типа такого можно, для инвертирования светика
Код:
switch(key() ){
case 0:  LED1_TOGGLE;break;
case 1:  LED2_TOGGLE;break;
.........
}


Но это не то что надо, вопрос поставлен так что непонятно что надо вообще.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Пн сен 11, 2023 12:16:51 
Первый раз сказал Мяу!

Зарегистрирован: Вт авг 15, 2023 06:46:22
Сообщений: 24
Рейтинг сообщения: 0
Приведённый Вами код уже состоит из нескольких функций.
Какой конкретно код хотите вынести в отдельную функцию ? И зачем ?

Все что в loop вынести в отдельную функцию, как передавать в эту функцию нажатия кнопок?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Пн сен 11, 2023 13:09:02 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4593
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
rss-999 писал(а):
Все что в loop вынести в отдельную функцию
loop - это уже отдельная функция.
rss-999 писал(а):
как передавать в эту функцию нажатия кнопок?
В какую "эту" ? И что значит передать "нажатие кнопок" ? В функцию можно передавать переменные, в виде параметров. Физические явление передать туда невозможно.

Вы уверены, что понимаете свои вопросы ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Пн сен 11, 2023 16:08:50 
Мудрый кот

Карма: 25
Рейтинг сообщений: 485
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1785
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
И попробуйте на C/C++ с label не писать код. Попробуйте напр. с флагами, break и т. д., немного измените логику и все будет готово.


Последний раз редактировалось veso74 Пн сен 11, 2023 16:21:13, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Пн сен 11, 2023 16:17:04 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1493
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15285
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
У rss-999 уже штуки три подобных темы...
А тут еще помимо прочего с логической ошибкой - попробуй определи, сколько и каких кнопок нажато в данный момент.
Это же не позиционное сканирование, а аналоговый набор...
Посему если среди случайной комбинации попалась "истинная" кнопа - выявить невозможно будет.
8)
Об "некорректностях", кочующих из темы в тему, уже говорить надоело...
:sleep:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Вт сен 12, 2023 07:11:37 
Первый раз сказал Мяу!

Зарегистрирован: Вт авг 15, 2023 06:46:22
Сообщений: 24
Рейтинг сообщения: 0
Разобрался как сделать, работает. Всем спасибо.
Остался вопрос, иногда считывается 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()


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Вт сен 12, 2023 16:14:01 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Код:
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.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нужна помощь с функцией
СообщениеДобавлено: Вт сен 12, 2023 21:04:51 
Держит паяльник хвостом

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 923
Рейтинг сообщения: 0
Разобрался как сделать, работает. Всем спасибо.
Остался вопрос, иногда считывается 2-3 нажатия вместо 1, как это исправить.
[/code]

Вот с этого надо было начинать...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y