Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Уклоняйся от защиты!

Компоненты и расходные материалы

Резистор 10 кОм
Один для контрастности ЖК-экрана, другой для кнопки. Важно:используйте резистор в качестве тяги. -down, в отличие от подтягивающей конфигурации, показанной в руководстве.
× 2
Резистор 1 кОм
Для контрастности ЖК-экрана.
× 1
Кнопочный переключатель SparkFun, 12 мм
× 1
Стандартный ЖК-экран Adafruit - 16x2, белый на синем
× 1
Arduino UNO
× 1
Перемычки (общие)
× 1

Об этом проекте

Фон

Я участвовал в более крупном проекте, но с задержкой. Поэтому я решил что-нибудь сделать со своим старым комплектом Arduino. Я никогда раньше не пользовался ЖК-экраном. Итак, впаял пины в экран (пайку научился впервые).

Сначала я скопировал код из онлайн-руководства и загрузил его. Он только отображал текст, двигаясь вправо и влево. Тогда я познакомился с библиотекой LiquidCrystal. Я написал код, который заставлял цифру «0» прыгать по экрану, это было довольно весело. Тогда я подумал о создании чего-то более сложного, игры. Я искал в Google игры с ЖК-дисплеем на Arduino и нашел только 3 игры, 2 из которых работали у меня. Код этих игр был слишком сложным для меня, поэтому я решил создать простую игру.

Настройка

Подключите контакты ЖК-дисплея к Arduino с помощью проводов, как показано на схеме ниже.

Я использовал потенциометр 10 кОм, чтобы отрегулировать контраст, и отрегулировал его на желаемый контраст. Я измерил сопротивление между выводами с помощью мультиметра и использовал соответствующие резисторы (1 кОм и 10 кОм последовательно) для вывода VO ЖК-дисплея.

Поместите кнопку на макетную плату и подключите входной провод к контакту 8 на Arduino. Загрузите код в свой Arduino, и все готово.

Примечание. Используйте кнопочный резистор в понижающем режиме, как показано на схеме.

Игра в игру

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

После вступления нажмите кнопку, когда вас попросят. Когда защитник подойдет достаточно близко, нажмите кнопку, чтобы прыгнуть. Следующий защитник приближается с большей скоростью, и это продолжается для 10 защитников.

PS:Я изначально использовал «0» в качестве контроля и «1» в качестве препятствия. Поскольку чемпионат мира по футболу FIFA 2018 продолжается, и я сам болею за Месси, поэтому решил сменить тему.

Я сделал глифы для игрока и защитника с помощью онлайн-генератора, ссылка предоставлена ​​здесь:https://omerk.github.io/lcdchargen/

Код

  • lcd_1.ino
lcd_1.ino Arduino
 / * Уклоняйтесь от дефисов !! Создано:Shreyas R P Создано:21-06-2018 E-mail ID:[email protected] Простая игра для LCD 16x2 с кнопкой. Если вы вносите какие-либо улучшения или изменения в игру, пожалуйста, укажите свои кредиты под строкой:Наслаждайтесь :) Copyright (C) 2018 Shreyas RP Эта программа является бесплатным программным обеспечением:вы можете распространять и / или изменять ее в соответствии с условиями GNU Стандартная общественная лицензия, опубликованная Free Software Foundation, либо версия 3 Лицензии, либо (по вашему выбору) любая более поздняя версия. Эта программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Подробнее см. Стандартную общественную лицензию GNU. Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если нет, см. . -------------------------------------------------- ------------------------------------------- * / # include  const int btn =8; // вывод кнопки ввода // текст для отображенияchar * introText [] ={"Dodge the defs !!", "Created on:", "Hit the button ..."}; // объявления переменных int game =0; int buttonPress =0; int buttonState =0; int препятствиеPos; int obsDelay; int score =0; unsigned long lastDebounceTime =0; // последний раз, когда выходной вывод был переключен unsigned long debounceDelay =50; int lastButtonState =LOW; // GRAPHICSbyte runnin1 [8] ={0b01100, 0b01100, 0b00000, 0b11100, 0b01110, 0b01100, 0b11110, 0b00011}; byte runnin2 [8] ={0b00110, 0b101100110, 0b101100110, 0b00110, 0b101100110, 0b101100110, 0b01110, 0b00101}; переход байта [8] ={0b00100, 0b01100, 0b11100, 0b01110, 0b01100, 0b11111, 0b00000, 0b00001}; байт def1 [8] ={0b00100, 0b00110, 0b00111, 0b001110, 0b001110, 0b01110, 0b001110, 0b001110, 0b001110, 0b001110, 0b0111 0b00000}; байт def2 [8] ={0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b00110, 0b00110, 0b00010}; байтовый слайд [8] ={0b00000, 0b00000, 0b00011, 0b00011b0110011, 0b00011, 0b110011, 0b00011, 0b110011, 0b00011, 0b110011, 0b00011, 0b110011; LiquidCrystal lcd (4,6,10,11,12,13); установка void () {Serial.begin (9600); pinMode (btn, ВХОД); lcd.begin (16,2); lcd.createChar (0, runnin1); lcd.createChar (1, runnin2); lcd.createChar (2, прыжок); lcd.createChar (3, def1); lcd.createChar (4, def2); lcd.createChar (5, слайд); buttonState =digitalRead (btn);} недействительный цикл () {интро (); while (игра ==1) ballActive (); endGame (); } void intro () {оценка =0; lcd.clear (); lcd.print (introText [0]); // Вместо объявления introText вы можете напрямую распечатать текст с помощью "..." lcd.setCursor (7,1); lcd.print ("Автор SRP888"); задержка (2000); lcd.clear (); lcd.print (introText [1]); lcd.setCursor (0,1); lcd.print («21-06-2018»); задержка (2000); lcd.clear (); while (button ()! =1) // ждем, пока пользователь нажмет кнопку, отображаем текст до этого. {lcd.setCursor (0,0); lcd.print (introText [2]); задержка (100); } if (button () ==1) game =1; } void reset () {if (preventlePos% 2 ==0) // Изменение отображения игрока с одной позы на другую, чтобы показать, что он бежит, с умом с помощью preventlePos. {lcd.clear (); lcd.setCursor (0,1); lcd.write (байт (0)); } еще {lcd.clear (); lcd.setCursor (0,1); lcd.write (1); }} void ballActive () {obsDelay =200; // начальная задержка для обороняющегося препятствияPos =15; // поскольку это ЖК-дисплей размером 16x2, а индекс начинается с 0. while (game ==1) {reset (); if (button () ==1) // если кнопка нажата. {lcd.clear (); lcd.setCursor (0,0); lcd.write (2); // выводим игрока, прыгающего через препятствие (damagelePos); // выводим задержку защитника (400); // Это сделано для того, чтобы дисплей не исчезал быстро и не оставался незамеченным. lcd.clear (); lcd.setCursor (0,1); lcd.write (1); // выводим игрока обратно на препятствие на земле (damagelePos); // выводим защитника} else {if (ruptlePos! =0) // если защитник не подошел к игроку, продолжаем. { перезагрузить(); препятствие (constralePos); } else if (preventlePos ==0) // если защитник находится в позиции 0, т.е. он подошел к игроку, когда тот находится на земле, затем завершает игру. {игра =0; ломать; }} препятствиеPos--; // приближает защитника к игроку if (preventlePos <0) // если игрок успешно уклонился, то {obsDelay =obsDelay-20; // уменьшить задержку (увеличить скорость), damagePos =15; // выводим защитника на исходную позицию, оценка ++; // и увеличиваем счет на 1.} if (obsDelay ==0) // если от 10 игроков уклонились (потому что 200/20 =10), то завершаем игру game =0; задержка (obsDelay); }} int button () {int чтение =digitalRead (btn); // Если переключатель изменился из-за шума или нажатия:if (reading! =LastButtonState) {// сбросить таймер устранения дребезга lastDebounceTime =millis (); } если ((millis () - lastDebounceTime)> debounceDelay) {buttonState =чтение; если (buttonState ==HIGH) {lastButtonState =чтение; возврат 1; }} lastButtonState =reading;} voidruptle (int i) {if (preventlePos% 2 ==0 &&ruptlePos> 2) // если защищающийся находится далеко от игрока, то покажите, что он бежит {lcd.setCursor (i, 1); lcd.write (3); } иначе, если (препятствиеПос% 2! =0 &&препятствиеПосле> 2) {lcd.setCursor (i, 1); lcd.write (4); } else // если он на 2 шага ближе к игроку, показать его скольжение {lcd.setCursor (i, 1); lcd.write (5); }} void endGame () {если (оценка ==10) {lcd.clear (); lcd.print («Поздравляю!»); lcd.setCursor (0,1); lcd.print («Вы их всех победили»); задержка (3000); } иначе, если (оценка <3) {lcd.clear (); lcd.print («Отстой»); lcd.setCursor (0,1); lcd.print ("Оценка:"); lcd.print (оценка); задержка (3000); } иначе, если (оценка <6) {lcd.clear (); lcd.print («Неплохо!»); lcd.setCursor (0,1); lcd.print ("Оценка:"); lcd.print (оценка); задержка (3000); } еще {lcd.clear (); lcd.print («Отлично!»); lcd.setCursor (0,1); lcd.print ("Оценка:"); lcd.print (оценка); задержка (3000); }} 

Схема


Производственный процесс

  1. Ода прототипу
  2. Проблемы дизайна продукта
  3. Тетрод
  4. Мониторинг температуры на Raspberry Pi
  5. Экспонат:первичный дисплей
  6. Дрон Пи
  7. Архимед:ИИ-робот-сова
  8. Стратегический сбор данных - современный способ избежать сбоев
  9. Секрет промышленного ремонта сенсорных экранов
  10. Лучший сдуватель листьев