Игра соедени правильно

Thunder
Offline
Зарегистрирован: 27.04.2022

Доброго времени суток господа.
У меня возникла идея создать игру соедени правильно на ардуино, и если со стороны програмирования все довольно просто, то как эту схему собрать я искренне не понимаю
Есть условно 5 проводов, и тебе нужно соеденить ими соответствующие вохды и выходы, и если тф соеденил их правильно, то загорается зеленый диод если нет то красный.

Thunder
Offline
Зарегистрирован: 27.04.2022

Нужно как то выдавать разный сигнал с цифровых входов, и это проверять, но как это сделать я к сожалению не понимаю

KindMan
Offline
Зарегистрирован: 19.12.2018

Так это и есть программа, а не железо. Вы сказали, что проблем нет.
10 портов берёте, 5 на вход, 5 на выход. По очереди подаёте сигнал на выход, и смотрите пришел ли он на нужный вход.

Thunder
Offline
Зарегистрирован: 27.04.2022

А, ага, так и знал что где то я тупой. Спасибо огроное:3

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

тут главное просволочкой выход на выход не подключить, а то выйдет из ардуины магический белый дым за счет которого она работает

Thunder
Offline
Зарегистрирован: 27.04.2022

А как тогда лучше это сделать?

rkit
Offline
Зарегистрирован: 23.11.2016

ua6em пишет:

тут главное просволочкой выход на выход не подключить, а то выйдет из ардуины магический белый дым за счет которого она работает

Не выйдет, если код написать правильно. А с этим проблем нет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

rkit пишет:

ua6em пишет:

тут главное просволочкой выход на выход не подключить, а то выйдет из ардуины магический белый дым за счет которого она работает

Не выйдет, если код написать правильно. А с этим проблем нет.

это если правильно написать, тогда да, подсказываю - одномоментно только один пин может принимать состояние OUTPUT

Thunder
Offline
Зарегистрирован: 27.04.2022

Тоесть если я через цикл буду включать пин на output то проблем не возникнет и утечеб бедого дыма не будет?

Green
Offline
Зарегистрирован: 01.10.2015

Писал такую поделку для квеста:
- 10 проводов
- могут быть соединены по 2, по 3
- некоторые могут не соединяться
- соединения должны быть в определённой последовательности
- при правильном соединении всего - одно действие, иначе другое.
Не такая уж и простая головоломка.)

svm
Offline
Зарегистрирован: 06.11.2016

Thunder пишет:
Тоесть если я через цикл буду включать пин на output то проблем не возникнет и утечеб бедого дыма не будет?

Это в теории. А шаловливые рученки могут проводок на землю или питание подключить, а хуже всего статика. Конечно сразу белый дым может и не выйти, но без защиты от статики устройство долго не проживет.

b707
Offline
Зарегистрирован: 26.05.2017

svm пишет:

Это в теории. А шаловливые рученки могут проводок на землю или питание подключить, а хуже всего статика. Конечно сразу белый дым может и не выйти, но без защиты от статики устройство долго не проживет.

если к "правильному коду" добавить "правильную схему" (самое простое - резисторы 1К на все входы и выходы) - то шансы выжить у контроллера существенно вырастут :)

Green
Offline
Зарегистрирован: 01.10.2015

Питание отсутствует, земля проверяется. Обошлось без резисторов, но с ними проще, согласен.
Хотя и резисторы могут не спасти, если всё в кучу.)

Thunder
Offline
Зарегистрирован: 27.04.2022

Если обобщить, то на выход включать всегда один пин, желательно повесить резисторы, желательно наверное еще будет все в симуляторе проверить

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Но самое главное то, что когда эта "игра" будет собрана и отлажена, в процессе эксплуатации "вдруг" выяснится, что играть в нее совсем не интересно.

 

PS. Кстати, "земля" и "питание" самой схемы не должны иметь выхода наружу, т.е. не должны быть доступны играющему. А к тем контактам, которые для играющего подписаны "земля" и "питание" также должны быть подключены информационные ноги контроллера (не имеющие прямой гальванической связи с реальными "землей" и "питанием").

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

Но самое главное то, что когда эта "игра" будет собрана и отлажена, в процессе эксплуатации "вдруг" выяснится, что играть в нее совсем не интересно.

вводим варианты, штук 20 )))

Thunder
Offline
Зарегистрирован: 27.04.2022

+ можно сделать возможность менть пины местами, для разнообразия

Morroc
Offline
Зарегистрирован: 24.10.2016

Зачем пины то местами менять ? Надо варианты соединений программно менять, а их можно нафигачить заранее и выбирать на основании... тут сами фантазию включайте - штрихкод на бумажке с задачами (считываем оптопарами на отражение), дырки в ней  (считываем оптопарами на просчет), бесконтактная карточка (сейчас разных транспортных одноразовых дофига - они тоже подходят к считывателям). Я эту хрень в общем виде себе представляю как набор вопросов и ответов, которые надо правильно соединить, если что то хитрее, то хз.

Thunder
Offline
Зарегистрирован: 27.04.2022

Ну кстати как варик

b707
Offline
Зарегистрирован: 26.05.2017

Morroc пишет:

Я эту хрень в общем виде себе представляю как набор вопросов и ответов, которые надо правильно соединить, если что то хитрее, то хз.

это для ЕГЭ :)

Morroc
Offline
Зарегистрирован: 24.10.2016

Да :)

Thunder
Offline
Зарегистрирован: 27.04.2022

Так господа, если я подключаю ардуино к питанию и не соеденив проводов у меня на входах выдает положительный сигнал а в симуляторе все норм, можно ли считать что белый пар вышел?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Thunder пишет:
Так господа, если я подключаю ардуино к питанию и не соеденив проводов у меня на входах выдает положительный сигнал а в симуляторе все норм, можно ли считать что белый пар вышел?

код покажи

Thunder
Offline
Зарегистрирован: 27.04.2022
#include <Adafruit_NeoPixel.h>
 
#define LED_COUNT 6
 
#define LED_PIN 5
 
int out_p[5] = {7, 8, 9, 10, 11};
int in_p[5] = {19, 18, 17, 16, 15};
 
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(LED_COUNT, 6, NEO_RGB + NEO_KHZ800);
 
 
void setup() {
 
strip.begin(); //Инициализируем ленту.
  strip2.begin();
 
  for (int i = 0; i<5; i++){
    pinMode(out_p[i], OUTPUT);
    pinMode(in_p[i], INPUT);
  }
  Serial.begin(9600);
 
}
 
 
 
void loop() {
  
  bool point = true;
//проверка на подключение
  for (int i = 0; i<5; i++){
    digitalWrite(out_p[i], HIGH);
    
    Serial.print(in_p[i]);
    Serial.print(" = ");
    Serial.println(digitalRead(in_p[i]));
    
    int ch = digitalRead(in_p[i]);
    delay(50);
    if ( ch == 0 || point == false)
      point = false;
    digitalWrite(out_p[i], LOW);
  }
//вывод результата
  if (point == false){
    for (int i = 0; i < LED_COUNT; i++){
  strip2.setPixelColor(i, strip2.Color(0, 200, 0));
      strip2.show();
 
    }
  }
  else{
    for (int i = 0; i < LED_COUNT; i++){
strip.setPixelColor(i, strip.Color(0,200, 0));
      strip.show();
     
}
  }
}
 
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

херню понаписал, да и вставил код неправильно

Thunder
Offline
Зарегистрирован: 27.04.2022

Вплане?

rkit
Offline
Зарегистрирован: 23.11.2016

Thunder пишет:
желательно наверное еще будет все в симуляторе проверить

Нет в природе симуляторов, проверяющих максимальные параметры.

Thunder
Offline
Зарегистрирован: 27.04.2022

Так, опытным путем было выяснено что ардуинка все таки скончалась, программа тоже была подкоректированна, однако хотелось бы услвшать советы по коду. Всем спасибо за помощь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
Morroc
Offline
Зарегистрирован: 24.10.2016

pinMode(out_p[i], OUTPUT) в момент проверки на единственную ногу и сразу после проверки pinMode(out_p[i], INPUT), на всякий случай перед проверкой поставить небольшой delay(1)

почему проверяем только вход i ? он же может быть соединен с любым выходом ?

(по ленте не смотрел)

 

не так написал - выход i может быть соединен с любым входом, надо проверять все входы чтобы было ясно, что соединение выполнено, но неправильно

rkit пишет:

Нет в природе симуляторов, проверяющих максимальные параметры.

вот и я про тоже, а ведь могли бы сделать ) впрочем спалить ардуину не работая с напряжениями >5 вольт непросто, выходы с 0 и 1 недостаточно соединить, во всяком случае мои от этого не портились

Green
Offline
Зарегистрирован: 01.10.2015

Thunder пишет:
Так, опытным путем было выяснено что ардуинка все таки скончалась...

Это не может не радовать.) Всегда считаю, что через деньги оно лучше доходит.

Thunder
Offline
Зарегистрирован: 27.04.2022

Хах, замкнуло ее немножко по другому поводу, но опыт есть опыт:)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Thunder пишет:
Так, опытным путем было выяснено что ардуинка все таки скончалась...

Это не может не радовать.) Всегда считаю, что через деньги оно лучше доходит.

да не, у нас говорили - не доходит через голову дойдёт через ноги и...бегом на 5 километров...)))

rkit
Offline
Зарегистрирован: 23.11.2016

Morroc пишет:

а ведь могли бы сделать

пойди да сделай, раз такой умный