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