Оглавление:
- Шаг 1. Материалы и инструменты
- Шаг 2: разрежьте светодиодную ленту на полоски меньшего размера
- Шаг 3: припаиваем экран вместе
- Шаг 4: пайка основной электроники
- Шаг 5: Контроллер
- Шаг 6: рубашка
- Шаг 7: Программирование
- Шаг 8: Готовый продукт
Видео: Игра в понг с гибким экраном на рубашке: 8 шагов (с картинками)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Это мой костюм на Хэллоуин 2013 года. Над ним работали около года, и на его создание ушло немало человеко-часов. Экран 14 на 15 пикселей, так что разрешение довольно низкое, но он все же может делать некоторые забавные вещи. Он физически гибкий во всех направлениях, хотя его нельзя сложить без повреждений. У него есть контроллер, состоящий из одной кнопки и ползунка, подключенный к pro mega через USB. Чтобы поддерживать его в рабочем состоянии в течение длительного времени, в нем используются две чудовищные батареи емкостью 2200 мАч, соединенные последовательно для получения необходимого напряжения, а затем регулятор на 5 вольт, чтобы сделать его пригодным для использования. Вся электроника помещена в карманы на внутренней стороне рубашки, чтобы их можно было снять, и рубашку можно было постирать. Он играет в функциональную игру в понг. Сначала он украшает слова «PONG PLAY» красивыми синими буквами с использованием модифицированной версии шрифта Tom Thumb (можно найти на https://robey.lag.net/2010/01/23/tiny-monospace-font.html). Через пять секунд можно дать возможность нажать кнопку, чтобы продолжить, или не нажимать кнопку и оставить после себя совершенно хорошие впечатления. Когда вы нажимаете кнопку, игра начинается. Красная ракетка справа - это компьютерная ракетка, а зеленая ракетка справа - это ракетка игрока, которая управляется ползунком для перемещения вверх и вниз. Мяч подпрыгивает, когда каждая из сторон пытается набрать очко. Игрок может ударить по мячу краем своей ракетки, чтобы ускорить его (приятная особенность), в то время как компьютер не может этого сделать, и вместо этого застревает, двигаясь немного медленнее, чем мяч. Когда точка набирается, пиксель меняется на белый на индикаторе стороны подсчета очков. Он считается в двоичном формате снизу. где зеленый или красный - ноль, а белый - 1. 21 - это результат выигрыша (или проигрыша в зависимости от того, кто наберет 21 очко), и поэтому, когда ракетка игрока показывает 10101, отображается текст «ВЫ ВЫИГРЫВАЕТЕ». И снова в модифицированном Tom Thumb. То же самое происходит, но вместо этого отображается сообщение «ВЫ ТЕРЯЕТЕ». После выигрыша или проигрыша игра возобновляется до точки сразу после Pong Play. Для полного перезапуска нажимается кнопка перезапуска на «Magic Box», также известная как коробка со всей электроникой, кроме экрана.
Шаг 1. Материалы и инструменты
Вещи, отмеченные *, являются необязательными, но рекомендуются И так в произвольном порядке… Материалы: 4 ярда Adafruit Neopixle 60 пикселей на метр полоса 1 футболка * 1 пара подтяжек 1/2 ярда ткани будет более чем достаточно (без предпочтительнее эластичное плетение) 6-футовый штекер USB A - штекер USB B 1 Разъем USB A, розетка 3 2-контактные гнездовые разъемы JST 4 2-контактные штекерные провода JST Зарядное устройство 2 батареи на 6600 мАч 1 Кнопка аркадного стиля 1 arduino pro-mega 1 разъем FTDI 1 гнездовой разъем USB B с коммутационной платой 1 переключатель включения / выключения (тумблер) 1 переключатель сброса (тумблерный или мгновенный) 1 ползунковый потенциометр * 1 ползунковая ручка 1 пара разъемов высокого усилителя * 1 проектный кейс 1 регулятор напряжения 5 В 3+ А небольшой немного пластика немного припаять немного проволоки немного нитки * немного горячего клея * немного эластичного какое-то время (может быть, немного больше, чем «немного») некоторая настойчивость (вам, вероятно, понадобится совсем немного этого на самом деле) какая-то термоусадочная трубка или изолента немного суперклея немного железа на основу Инструменты * Руки помощи Обычная рука s (или кто-либо, имеющий к ним доступ) Паяльник * Пистолет для горячего клея Dremel или Зубило для наждачной бумаги Устройства для зачистки проводов Кусачки для степлера Пистолет Отвертка Пильные штифты Швейная машина Ножницы для ткани
Шаг 2: разрежьте светодиодную ленту на полоски меньшего размера
Используйте предпочитаемый вами режущий инструмент и разрежьте полоску на 14 сегментов, каждый по 15 пикселей в длину. Разрежьте только между медными дорожками, помеченными как «DO», «DIN», «+ 5V» и «GND». Если она уже пропаяна поверх меди, их просто прорезают насквозь. Постарайтесь не надрезать оголенную медь слишком сильно, но если вы надрежете ее немного, ничего страшного. После того, как все 14 полосок будут отрезаны, отрежьте немного резины с каждого конца, чтобы убрать ее с пути для пайки полос.
Шаг 3: припаиваем экран вместе
Возьмите провод и разрежьте его на сегменты длиной около 3,5 дюймов (9 см). В моем случае у меня есть три разных цвета, чтобы упростить прямую пайку, но один цвет будет работать нормально. Вам понадобится около 40 таких маленьких ребят, но на всякий случай отрежьте еще парочку. Как только вы закончите разрезать провод, зачистите и залудите концы (если у вас есть опыт пайки, вы можете перейти к следующему абзацу), то есть после того, как вы удалите немного пластика, нанесите припой на концы каждого провода. Не нагревайте припой и пытайтесь перейти к проводу, нагрейте паяльником снизу меди и положите припой сверху. Наберитесь терпения и дождитесь, пока горячая проволока расплавит припой. Заманчиво прижать паяльник к припою, чтобы он заработал (мое нетерпение и я точно знаю, что вы чувствуете), но припой тоже не прилипает. Проделайте то же самое с оголенными медными дорожками на каждом конце участков полосы. Если припой уже есть, не беспокойтесь. Для полосы вы можете создать небольшой холмик, чтобы потом было легче. Работая с полосой, делайте это быстро и старайтесь не тратить много времени на нагревание полосы. Делайте только то, что вам нужно сделать, чтобы расплавить припой на след. Припаяйте провод на каждой дорожке к концу первой полосы (первая полоса с проводами и разъемом, припаяйте ее к оголенному концу). Если вы посмотрите на полоску, вы увидите маленькие стрелки, идущие до конца, к которому вы припаяли провод. Возьмите другую полоску, чтобы стрелки указывали в противоположном направлении, и припаяйте провод, идущий от дорожки GND к дорожке GND другого, + 5V к + 5V и так далее. Повторите это, убедившись, что стрелки меняют направление после каждого участка, так что если вы будете следовать за ними, он будет зигзагом вверх и вниз, и чтобы его можно было растянуть до длинной полосы в конце. После того, как все 14 полосок будут припаяны, разложите их и выровняйте так, чтобы светодиоды образовали сетку. Затем соберите их вместе, используя метод, который можно удалить позже, не повредив полоску. Я использовал скотч. Он достаточно липкий, чтобы держать все вместе, но не настолько липкий, чтобы оставлять следы. Я не рекомендую ничего постоянного, например, скобы или клейкую ленту. После того, как все будет скреплено, припаяйте провод от полосы на дне + 5 В к ближайшей к ней. Повторяйте до тех пор, пока на всем дне не пройдут отводы питания до упора. Это сделано для того, чтобы экран не тускнел по мере продвижения линии светодиодов.
Шаг 4: пайка основной электроники
Припаяйте коммутационную плату USB B (BOB) к разъему USB B. Припаяйте соответствующие провода к разъему USB A. Я советую посмотреть распиновку разъема на этом веб-сайте https://image.pinout.net/pinout_USB_files/pc_usb_connectors_pinout.png. Не беспокойтесь о том, куда припаять другие концы проводов на разъеме USB A прямо сейчас; это будет рассмотрено на шаге контроллера. Отрежьте разъем для передачи данных от полосы, гнездовой соединитель, а не штекерный соединитель (гнездовой соединитель берется с другого конца). Припаяйте штекерные разъемы JST к концам батареи так, чтобы красный переходил к красному, а черный - к черному. Расплавьте термоусадочную трубку на оголенные провода (надвигайте их перед пайкой), чтобы они не закорачивались или не использовали что-то еще, например, изоленту или горячий клей. Припаяйте несколько проводов ко всем женским разъемам JST. Убедитесь, что у вас есть вилка, чтобы штифты не смещались. Соблюдайте полярность и убедитесь, что провода совпадают с штыревыми разъемами. Припаяйте провода к одному высоковольтному разъему (но не к паре) еще раз, убедившись, что все цвета совпадают и что они соединены вместе, чтобы предотвратить смещение контактов. Припаяйте гнездовой разъем / провод в сборе так, чтобы они были подключены последовательно, а не параллельно, чтобы напряжение превысило пороговое значение для регулятора мощности. Итак, припаяйте положительный провод к отрицательному проводу другой сборки, так что теперь у нас есть один непаянный положительный провод и один отрицательный непаянный провод, а два припаянных провода припаяны к разным разъемам. Возьмите отрицательный провод и сохраните его, чтобы припаять его к отрицательному проводу в другом месте. Теперь возьмите положительный провод и припаяйте его к переключателю. Если имеется три или более контактов (или более одного способа включения), припаяйте его к среднему контакту. Обратите внимание, что «средний штифт» физически не может быть посередине. Способ определить это - найти контакт, который, когда переключатель включен в любом состоянии, всегда будет подключен к другому контакту. Если такой контакт отсутствует, значит, у вас есть особый переключатель; просто подключите его к любому контакту и убедитесь, что следующий провод, припаянный к переключателю, будет подключен к этому проводу хотя бы в одном включенном состоянии. Теперь припаяйте положительный провод на входе регулятора напряжения к противоположному концу переключателя, как описано выше. Припаяйте положительное напряжение к положительному концу непаянного сильноточного разъема. Возьмите отрицательный провод впуска и припаяйте его к отрицательному концу сильноточного разъема. Теперь мы собираемся припаять питание параллельно Arduino и удлинителю. Теперь возьмите выходные провода регулятора напряжения и припаяйте два куска провода к положительному и отрицательному концам, чтобы они вышли в форме буквы Y. Припаяйте двухконтактный разъем к положительному и отрицательному проводам сборки светодиодной ленты. Неважно, какой тип разъема вы используете, это может быть JST или, в моем случае, какой-то силовой / аудиокабель или что-то в этом роде (я не уверен и прошу прощения за то, что у меня нет изображений). Припаяйте один из положительных проводов питания к положительному концу противоположного разъема для световой полосы, а один из отрицательных проводов - к другому контакту разъема. Сделайте то же самое, но для сборки разъема / провода JST с наружной резьбой. При этом не забывайте изолировать паяные соединения, чтобы избежать коротких замыканий. Теперь о том, что делать с разъемом USB B. Припаяйте положительный провод к отверстию 5 В на Arduino Pro Mega. Возьмите заземляющий провод и припаяйте его к отверстию GND. Возьмите D + и припаяйте его к цифровому контакту (или, в данном случае, отверстию) 40. Припаяйте D- к аналоговому контакту 15. Припаяйте конец разъема для передачи данных розетки, который соединяется с вилкой разъема светодиодной ленты, с контактом данных 6 и выводом заземляющий провод к контакту GND. Малярная лента или скотч отлично подходят для закрепления проводов на плате, чтобы они не выпадали, когда она переворачивается для пайки. Теперь возьмите кнопку мгновенного действия и припаяйте провод от одного конца к контакту VCC (или любому выходному контакту напряжения), а другой конец - к контакту RESET.
Шаг 5: Контроллер
Во-первых, нужно выбрать правильную форму для начала. Все зависит от того, как вы хотите структурировать контроллер. Я хотел больше плоского контроллера, поэтому я получил кусок доски размером 3 1/2 на 3/4 дюйма. расположите детали так, чтобы с ними было удобно работать. Используйте французскую кривую, циркуль, треугольник и прямую кромку, чтобы обозначить, куда должны идти все части. Вырежьте основной контур любым режущим инструментом. Лучше всего подойдет запрещающая пила, но я использовал копировальную пилу, которая отлично работала. Отшлифуйте края, чтобы они плавно переходили, затем зашлифуйте углы, чтобы было удобнее. Просверлите отверстие для переключателя, затем отшлифуйте, зарежьте долотом и / или дремелем любую часть на дне, которая ему подходит. Старайтесь ничего не делать с верхом и шлифуйте только то, что вам нужно, чтобы его можно было вставить, скручивая, наклоняя или что-то еще, чтобы заставить его войти. Как только он будет вставлен, прикрепите его пластиковой гайкой и прикрепите выключатель. Просверлите область для ручки потенциометра, чтобы она могла пройти, и вырежьте область, чтобы она могла погрузиться и полностью поместиться. Просверлите несколько отверстий, чтобы винт мог его удержать. Согните маленькие части разъема USB A, чтобы его общая ширина немного увеличилась (см. Рисунки). Вырежьте часть разъема, постепенно проверяя, подходит ли разъем. Приклейте разъем к разъему. Возьмите небольшой кусок пластика и вырежьте из него форму, которая будет подходить к соединителю (смотрите рисунки), а затем прикрепите скобами к дереву. Отрежьте все, что может мешать. Вкрутите потенциометр и прикрепите ручку. Припаяйте положительный провод к одному из концов потенциометра (не к регулируемой части), а отрицательный провод к противоположному концу. Припаяйте штифт D к регулируемому штифту на горшке. Припаяйте провод от штифта на горшке с плюсовым проводом к одному из штырей на кнопке. Припаяйте D + к другому контакту кнопки. Обрежьте запасной провод и заизолируйте те части, которые в нем нуждаются.
Шаг 6: рубашка
Найдите удобную рубашку, которая пропускает свет. Я выбрала эту простую белую футболку. На самом деле не имеет значения цвет или стиль, пока видно, что свет проникает изнутри. Однако я не рекомендую графику на лицевой стороне. Разложите все на рубашке, чтобы решить, где вы хотите, и используйте стираемый инструмент для маркировки, чтобы нарисовать это. У меня (имеется в виду некоторых людей, которых я знаю) есть карандаш, предназначенный для маркировки тканей, который легко стирается. Измерьте размер батарей, корпуса контроллера и экрана и вырежьте соответствующие листы бумаги. Затем приколите бумагу к куску неэластичной ткани. Для этого хорошо подходит плетение. Затем вырежьте прямоугольник, оставив примерно четверть дюйма для шва по всему периметру. Затем, используя лист бумаги в качестве направляющей, прогладьте складки на ткани. Теперь бумагу можно удалить. На той части кармана, которая будет сверху, сложите его три раза. Прогладьте и заколите булавками, чтобы она оставалась на месте. Прошейте вид до середины сгиба. Теперь возьмите угол и сложите его так, чтобы несшитые края, перпендикулярные друг другу, были параллельны, и прострочите по проглаженной складке, ближайшей к углу (рисунки действительно помогают). Проделайте то же самое с другим углом. Если случайно у вас будет тумблер, выходящий из кармана, пришейте отверстие для пуговицы в основании кармана, где он касается. Затем сделайте отверстие для пуговицы и вырежьте среднюю часть. Я не могу дать подробных инструкций, потому что у меня был классный инструмент для изготовления отверстий для пуговиц. Только убедитесь, что вы проделали отверстия до того, как пришить карман. Возьмите булавки и проткните ими рубашку по углам отметок для кармана. Возьмите карман и прикрепите каждый угол булавкой (на внутренней стороне рубашки), оставив четверть дюйма для шва, и прикрепите его булавками к рубашке. После того, как карман был приколот. вынуть булавки, не удерживающие карман, и пришить карман к рубашке. Повторите для всех карманов. Для большого кармана для экрана оставьте отверстие для проводов внизу кармана. Чтобы сделать отверстие в рубашке, отметьте место, возьмите утюг на подкладке (более блестящей частью на ткани) и прогладьте. Затем для небольшого отверстия (как то, что я использовал для тумблера) сделайте отверстие для кнопки. Для большего отверстия наметьте контур и используйте зигзагообразную строчку вдоль линии (или кривой, или чего-то еще) и вырежьте среднюю часть. Если вы хотите, вы можете использовать подтяжки, чтобы удерживать вес карманов, два зажима удерживают карманы спереди и задний зажим на брюках. У меня также есть небольшой рукав из ткани, пришитый поверх частей подтяжек, которые будут касаться моей кожи. Две рубашки могут стать слишком горячими, поэтому я отказалась и использовала небольшой тканевый рукав.
Шаг 7: Программирование
А вот и код. Есть несколько частей, которые хорошо прокомментированы, но подавляющее большинство - нет. Если у вас есть вопросы по различным частям, вы можете либо дать мне номер строки (с #include в качестве первой строки), либо предоставить мне копию строки (строк) и функции, в которой она находится (например, loop () или compMovePaddle ()) и я сделаю все возможное, чтобы объяснить вам это, а затем добавлю комментарий к коду, объясняющий это. #include #define PIN 6 // говорит, какие выводы используются для игры int buttonPin = 40; // диктует счет, хранящийся в двунаправленном массиве, потому что он лучше int playerScore [5] = {0, 0, 0, 0, 0}; int compScore [5] = {0, 0, 0, 0, 0}; // определяет направление мяча int bvd = 0; // 0 - вниз, 1 - вверх int bhd = 0; // 0 - вправо, 1 - влево // // определяет положение мяча int bvp = 8; int bhp = 6; // проверяет, находится ли мяч в быстром режиме boolean fast = false; // проверяет, является ли это счетом. логическое cIsPoint = false; логическое pIsPoint = false; // положение лопастей int cPaddle = 0; int pPaddle = 0; long previousMillis = 0; long previousMillisForComp = 0; // устанавливаем время задержки для быстро и медленно движущегося мяча. "Int" в normInt, а fastInt - для интервала int normInt = 50; int fastInt = 10; // используется для проверки на выигрыш. 1 - победа игрока, -1 - компьютерная победа, а 0 - еще ничего не произошло int win = 0; // чтобы избавиться от ошибки. используется в операторе addOne и больше нигде. int, который = 0; // Вещь, отображаемая перед запуском, -1 - это escape int pongPlay = {1, 2, 3, 4, 10, 11, 12, 13, 16, 18, 20, 27, 29, 33, 34, 41, 42, 61, 62, 63, 70, 71, 72, 76, 85, 86, 88, 91, 92, 94, 100, 101, 102, 103, 131, 132, 136, 139, 144, 145, 146, 147, 148, 161, 162, 166, 175, 183, 185, 192, 194, 195, 196, 197, 198, 199, 204, 205, 206, 207, 208, -1}; // если вы выиграли int youWin = {1, 2, 3, 4, 5, 16, 17, 18, 19, 20, 27, 33, 34, 39, 46, 47, 48, 49, 54, 55, 56, 57, 58, 77, 78, 79, 84, 88, 91, 92, 93, 94, 95, 99, 103, 106, 110, 114, 118, 130, 131, 132, 144, 145, 146, 147, 151, 162, 163, 168, 169, 170, 177, 181, 192, 193, 204, 205, 206, 207, -1}; // если вы проиграете int youLose = {1, 3, 5, 16, 17, 18, 19, 20, 24, 26, 28, 31, 32, 32, 33, 34, 35, 39, 46, 47, 48, 49, 62, 65, 77, 78, 79, 84, 86, 88, 91, 94, 99, 103, 106, 110, 122, 123, 124, 130, 131, 132, 144, 148, 152, 153, 154, 162, 163, 168, 169, 170, 181, 192, 193, 204, 205, 206, 207, 208, -1}; // настраиваем светодиодную полосу Adafruit_NeoPixel strip = Adafruit_NeoPixel (210, PIN, NEO_RGB + NEO_KHZ800); // настройка, не поворачивает контакт 40 для ввода, начинает полосу, отображает // сообщение и показывает его. void setup () {pinMode (buttonPin, ВВОД); strip.begin (); for (int i = 0; pongPlay > 0; i ++) {strip.setPixelColor (pongPlay , strip. Color (0, 0, 255)); } strip.show (); задержка (5000); while (digitalRead (buttonPin) == LOW) {// Это ловушка! (пока кнопка не будет нажата.)}} void loop () {clearScreen (); // рисует лопасти, чтобы показать счет для (int i = 0; i <5; i ++) {if (playerScore == 1) {strip.setPixelColor (204-i, strip. Color (255, 255, 255)); } else if ((playerScore == 0)) {strip.setPixelColor (204-i, strip. Color (0, 255, 0)); } если (compScore == 1) {strip.setPixelColor (5 + i, strip. Color (255, 255, 255)); } else if ((compScore == 0)) {strip.setPixelColor (5 + i, strip. Color (255, 0, 0)); }} // рисует мяч в исходной позиции strip.setPixelColor (98, strip. Color (255, 255, 255)); strip.show (); // решает, идет ли мяч вверх или вниз while (pIsPoint == false && cIsPoint == false) {clearScreen (); беззнаковый длинный currentMillis = millis (); // назначает положение ракетки игрока pPaddle = checkPaddlePos (); // проверяет следующую позицию checkNext (); // перемещение мяча if (fast == false) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis; moveBall (); }} else if (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis; moveBall (); }} // рисуем мяч if (bhp% 2! = 0) {strip.setPixelColor (bhp * 15 + 14-bvp, strip. Color (255, 255, 255)); } else if (bhp% 2 == 0) {strip.setPixelColor (bhp * 15 + bvp, strip. Color (255, 255, 255)); } // движение ракетки компьютера compMovePaddle (); // рисуем ракетки drawPaddles (); // на самом деле все поставили.strip.show (); // проверка, была ли набрана точка if (pIsPoint == true) {which = 0; bhd = 0; добавить один(); перерыв; } иначе, если (cIsPoint == true) {which = 1; bhd = 1; добавить один(); перерыв; }} если (победа == 1) {clearScreen (); for (int i = 0; youWin > 0; i ++) {strip.setPixelColor (youWin , strip. Color (255, 0, 0)); strip.show (); } задержка (5000); для (int я = 0; я <5; я ++) {playerScore [я] = 0; compScore = 0; } выигрыш = 0; } иначе, если (победа == -1) {clearScreen (); for (int i = 0; youLose > 0; i ++) {strip.setPixelColor (youLose , strip. Color (0, 255, 0)); strip.show (); } задержка (5000); для (int я = 0; я <5; я ++) {playerScore [я] = 0; compScore = 0; } выигрыш = 0; } pIsPoint = false; cIsPoint = false; bvp = 8; л.с. = 6; bvd = random (0, 2); // 0 - нет, 1 - быстро = false; } // ИИ для игры void compMovePaddle () {unsigned long currentMillis = millis (); если (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis; если (bvp> = 13 && 10-cPaddle 0) {cPaddle--; } иначе, если (bvp = 0 && cPaddle <10) {cPaddle ++; } else if (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--; } else if (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++; }}} // перемещает мяч void moveBall () {if (bhd == 0) {bhp--; } иначе, если (bhd == 1) {bhp ++; } если (bvd == 0) {bvp--; } иначе, если (bvd == 1) {bvp ++; }} // добавляет единицу в массив. Если whichOne равен 0, он добавляет к счету игрока. Если это 1, он добавляет к компьютерам void addOne () {if (which == 0) {// если это счет игрока // Добавить. Это самый простой способ, который я знаю. for (int i = 0; i <5; i ++) {// цикл if (playerScore == 0) {// если это значение равно нулю playerScore = 1; // сделать 1 break; // затем уходим} else {// если это 1 playerScore = 0; // обнуляем и цикл}}} else if (which == 1) {for (int i = 0; i <5; i ++) {если (compScore == 0) {compScore = compScore +1; перерыв; } еще {compScore = 0; }}} // Проверяет, выиграл ли кто-нибудь. если (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1; } else if (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1; }} // проверяет следующую позицию мяча void checkNext () {// проверяет, набрано ли очко if (bhp == 13) {pIsPoint = true; } иначе, если (bhp == 0) {cIsPoint = true; } // если очко было набрано, пропустите остальную часть этого материала if (pIsPoint == false || cIsPoint == false) {// проверяет мяч по вертикали if (bvp + bvd == 15) {bvd = 0; } иначе, если (bvp + bvd == 0) {bvd = 1; } // проверяет мяч по горизонтали if (bhp + bhd == 13) {// сначала на стороне компьютера if (bvp> = 10-cPaddle && bvp <= 10-cPaddle + 4) {if (bhd == 1) {bhd = 0; } иначе, если (bhd == 0) {bhd = 1; } fast = false; } else if (bvp + bvd == 10-cPaddle || bvp + bvd == 10-cPaddle + 5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1; } иначе, если (bvd == 1) {bvd = 0; } bhd = 1; } else if (bvp == 0 || bvp == 14) {bhd = 1; } fast = false; }} else if (bhp + bhd == 1) {// то со стороны игрока if (bvp> = pPaddle && bvp <= pPaddle + 4) {// попадает ли ракетка в нормальное место? // оттолкнуть мяч! если (bhd == 1) {bhd = 0; } иначе, если (bhd == 0) {bhd = 1; }} else if (bvp + bvd == pPaddle || bvp + bvd-5 == pPaddle) {// это удар веслом по углу if (bvp! = 0 && bvp! = 14) {// это не вверху или внизу? // Отбросить мяч! если (bvd == 0) {bvd = 1; } иначе, если (bvd == 1) {bvd = 0; } bhd = 1; быстро = правда; } else if (bvp == 0 || bvp == 14) {// вверх вверх или вниз? // оттолкнуть мяч! bhd = 0; fast = true; // устанавливаем значение, чтобы позже мяч двигался быстро}}}}} int checkPaddlePos () {// считывает горшок и определяет положение ракетки соответственно if (analogRead (A15) <93) {return 0; } иначе, если (analogRead (A15) <186) {return 1; } иначе, если (analogRead (A15) <279) {return 2; } иначе, если (analogRead (A15) <372) {return 3; } иначе, если (analogRead (A15) <465) {return 4; } иначе, если (analogRead (A15) <558) {return 5; } иначе, если (analogRead (A15) <652) {return 6; } else if (analogRead (A15) <745) {return 7; } иначе, если (analogRead (A15) <837) {return 8; } иначе, если (analogRead (A15) <= 931) {return 9; } иначе, если (analogRead (A15) <= 2014) {return 10; }} void drawPaddles () {// рисуем ракетки в правильном месте и отображает счет на ракетке для (int i = 0; i <5; i ++) {if (playerScore == 1) {strip. setPixelColor (pPaddle + i, strip. Color (255, 255, 255)); } иначе, если ((playerScore == 0)) {strip.setPixelColor (pPaddle + i, strip. Color (255, 0, 0)); } если (compScore == 1) {strip.setPixelColor (199 + cPaddle-i, strip. Color (255, 255, 255)); } else if ((compScore == 0)) {strip.setPixelColor (199 + cPaddle-i, strip. Color (0, 255, 0)); }}} void clearScreen () {для (int i = 0; i <= 210; i ++) {strip.setPixelColor (i, strip. Color (0, 0, 0)); } strip.show (); }
Шаг 8: Готовый продукт
Готовая рубашка!
Рекомендуемые:
Сыграйте в игру Саймона на своей рубашке: 5 шагов
Играйте в игру Саймона на своей рубашке: Вы всегда хотели сыграть в игру Саймона на своей рубашке? Я тоже! В этой инструкции я покажу вам, как сделать версию игры Саймона, в которую вы можете играть, прикоснувшись к своей рубашке, используя Макей Макей
Игра в понг: 6 шагов
Pong Game: Материалы: Кабель VGA платы Basys3 FPGA Vivado Целью данного руководства является разработка игры Pong, которая будет отображаться на мониторе. Проект будет использовать VHDL для программирования и использует Basys3 FPGA для выполнения кода и передачи изображения нам
Автоматическая игра в пинг-понг: 6 шагов
Автоматическая игра в пинг-понг: это игра в пинг-понг, в которой используются двигатели, которые запускают в вас шарики для пинг-понга, и вы должны попадать им в отверстия. Один человек должен запускать шары, а другой должен бить по шарам. **** Обратите внимание, что это делают двое шестиклассников
Дешевая и точная альтернатива перчатке с гибким датчиком своими руками: 8 шагов (с изображениями)
Дешевая и точная альтернатива перчатке с гибким датчиком: Привет всем! Это моя первая инструкция, и в этой инструкции я научу вас делать дешевую и точную перчатку с гибким датчиком. Я использовал множество альтернатив гибкому датчику, но ни одна из них у меня не сработала. Итак, я погуглил и нашел новый
Перчатка с гибким датчиком: 7 шагов
Перчатка Flex Sensor: это забавный проект, который можно адаптировать для управления чем угодно, от роботизированных рук до интерфейсов виртуальной реальности