Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Ontwijk de Defs!

Componenten en benodigdheden

Weerstand 10k ohm
Eén voor het contrast van het LCD-scherm, andere voor de knop.Belangrijk:gebruik de weerstand in pull -down configuratie, in tegenstelling tot de pull-up configuratie getoond in de handleiding.
× 2
Weerstand 1k ohm
Voor het contrast van het LCD-scherm.
× 1
SparkFun Drukknopschakelaar 12 mm
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
Arduino UNO
× 1
Jumperdraden (algemeen)
× 1

Over dit project

Achtergrond

Ik maakte deel uit van een groter project, maar er was een vertraging. Dus besloot ik iets te doen met mijn oude Arduino-kit. Ik heb het LCD-scherm nog nooit gebruikt. Dus soldeerde ik de pinnen in het scherm (ik leerde voor het eerst solderen).

Aanvankelijk kopieerde ik de code uit een online handleiding en uploadde deze. Er werd alleen tekst weergegeven, naar rechts en naar links bewegend. Dit was toen ik kennismaakte met de LiquidCrystal-bibliotheek. Ik schreef een code waardoor het getal "0" over het scherm stuiterde, het was best leuk. Toen dacht ik eraan om iets complexer te maken, een spel. Ik googelde naar lcd-games op arduino en vond slechts 3 games, waarvan er 2 voor mij werkten. De code voor deze spellen was veel te ingewikkeld voor mij om te begrijpen, dus besloot ik een eenvoudig spel te maken.

Instellen

Verbind de lcd-pinnen met de arduino met draden zoals weergegeven in het onderstaande schema.

Ik gebruikte een 10k-potentiometer om het contrast aan te passen en af ​​te stellen voor het contrast dat ik wilde. Ik heb de weerstand tussen de pinnen gemeten met een multimeter en geschikte weerstanden gebruikt (1k en 10k ohm in serie) voor de VO-pin van het LCD-scherm.

Plaats een drukknop op het breadboard en sluit de ingangsdraad aan op pin 8 op de arduino. Upload de code naar je arduino en je bent klaar om te gaan.

Opmerking:gebruik de knopweerstand in de pull-down-modus, zoals weergegeven in het schema.

Het spel spelen

In dit spel ben je een voetballer met de bal aan je benen. Je zult verdedigers hebben die je benaderen, en je moet ze gewoon ontwijken.

Druk na de intro op de knop wanneer daarom wordt gevraagd. Wanneer de verdediger dichtbij genoeg komt, druk je op de knop om te springen. De volgende verdediger nadert met een hogere snelheid, en dit gaat door voor 10 verdedigers.

PS:Ik gebruikte aanvankelijk "0" als controle en "1" als obstakel. Omdat de FIFA Wereldbeker 2018 aan de gang is en ik zelf een Messi-fan ben, heb ik besloten het thema te veranderen.

Ik heb de glyphs voor de speler en verdediger gemaakt met behulp van een online generator, de link hier:https://omerk.github.io/lcdchargen/

Code

  • lcd_1.ino
lcd_1.inoArduino
/* Ontwijk de defs!! Gemaakt door:Shreyas R P Gemaakt op:21-06-2018 E-mail ID:[email protected] Een eenvoudig spel voor 16x2 LCD met een knop. Als je verbeteringen of wijzigingen aan het spel aanbrengt, voeg dan je credits toe onder de regel:Veel plezier :) Copyright (C) 2018 Shreyas RP Dit programma is gratis software:je kunt het herdistribueren en/of wijzigen onder de voorwaarden van de GNU Algemene openbare licentie zoals gepubliceerd door de Free Software Foundation, ofwel versie 3 van de licentie, of (naar uw keuze) een latere versie. Dit programma wordt verspreid in de hoop dat het nuttig zal zijn, maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU General Public License voor meer details. U zou samen met dit programma een kopie van de GNU General Public License moeten hebben ontvangen. Zo niet, kijk dan op . -------------------------------------------------- ------------------------------------------- */#include const int btn =8; //button input pin//texts to displaychar* introText[]={"Ontwijk de defs!!","Gemaakt op:", "Hit the button..."};//variable Declarationsint game=0;int buttonPress =0; int buttonState=0;int obstakelPos;int obsDelay;int score=0;unsigned long lastDebounceTime =0; // de laatste keer dat de uitvoerpin werd toggledunsigned long debounceDelay =50; int lastButtonState=LAAG;//GRAPHICSbyte runnin1[8] ={ 0b01100, 0b01100, 0b00000, 0b11100, 0b01110, 0b01100, 0b11110, 0b00011};byte runnin2[8]={ 0b00110, 0b00110, 0b00000, 001b00111 0b01110, 0b00101};byte sprong[8]={ 0b00100, 0b01100, 0b11100, 0b01110, 0b01100, 0b11111, 0b00000, 0b00001};byte def1[8] ={ 0b00100, 0b00110, 0b00111, 0b01110, 01b00110, 0b1000 0b00000};byte def2[8]={ 0b00100, 0b00110, 0b00111, 0b01110, 0b00110, 0b00110, 0b00110, 0b00010};byte schuif[8]={ 0b00000, 0b00000, 0b00011, 0b00011, 0b00000, 0b010111, 0b00000; LiquidCrystal lcd(4,6,10,11,12,13); void setup() {Serial.begin(9600); pinMode(btn,INPUT); lcd.begin(16,2); lcd.createChar(0,runnin1); lcd.createChar(1,runnin2); lcd.createChar(2,sprong); lcd.createChar(3,def1); lcd.createChar(4,def2); lcd.createChar(5,dia); buttonState=digitalRead(btn);}void loop(){ intro(); while(game==1) ballActive(); eindSpel(); } void intro() {score=0; lcd.wissen(); lcd.print(introText[0]); //In plaats van introText te declareren, kunt u de tekst direct afdrukken met " ... " lcd.setCursor(7,1); lcd.print("Door SRP888"); vertraging (2000); lcd.wissen(); lcd.print(introText[1]); lcd.setCursor(0,1); lcd.print("21-06-2018"); vertraging (2000); lcd.wissen(); while(button()!=1) //wacht tot de gebruiker op de knop drukt, toon de tekst tot die tijd. { lcd.setCursor(0,0); lcd.print(introText[2]); vertraging (100); } if(button()==1) game=1; } void reset() { if(obstaclePos%2==0) // Het display van de speler veranderen van de ene pose naar de andere om te laten zien dat hij rent, slim met behulp van obstakelPos. { lcd.wissen(); lcd.setCursor(0,1); lcd.schrijven(byte(0)); } else { lcd.clear(); lcd.setCursor(0,1); lcd.schrijven(1); } } void ballActive() {obsDelay=200; //initiële vertraging voor de verdediger obstakelPos=15; // aangezien het een 16x2 lcd is en de index begint vanaf 0. while(game==1) { reset(); if(button()==1) //if wordt ingedrukt. { lcd.wissen(); lcd.setCursor(0,0); lcd.schrijven(2); // print het springende obstakel van de speler (obstaclePos); // print de verdedigervertraging (400); //Dit is om te voorkomen dat het scherm snel verdwijnt en onopgemerkt blijft. lcd.wissen(); lcd.setCursor(0,1); lcd.schrijven(1); // print de speler terug op grondhindernis (obstaclePos); //print de verdediger } else { if(obstaclePos!=0) //als de verdediger de speler niet heeft benaderd, ga dan verder. { reset(); obstakel(obstakelPos); } else if(obstaclePos==0) ​​//als de verdediger op 0 staat, d.w.z. hij de speler heeft benaderd wanneer hij op de grond staat, beëindig dan het spel. { spel=0; pauze; } } obstakelPos--; // brengt de verdediger dichter bij de speler if(obstaclePos<0) //als de speler dan succesvol ontweek, {obsDelay=obsDelay-20; // verminder de vertraging (verhoog de snelheid), obstakelPos =15; // breng de verdediger naar de startpositie, score++; //en verhoog de score met 1. } if(obsDelay==0) //als 10 spelers zijn ontweken (omdat 200/20=10), beëindig dan het spel game=0; vertraging (obsDelay); } }int-knop () { int lezen =digitalRead (btn); // Als de schakelaar is gewijzigd vanwege ruis of door te drukken op:if (lezing! =lastButtonState) { // reset de debounce-timer lastDebounceTime =millis(); } if ((millis() - lastDebounceTime)> debounceDelay) { buttonState =lezen; if (buttonState ==HOOG) { lastButtonState =lezen; retour 1; } } lastButtonState =lezen;}nietig obstakel(int i){ if(obstaclePos%2==0&&obstakelPos>2) //als de verdediger ver weg is van de speler, laat hem dan rennen { lcd.setCursor(i,1); lcd.schrijven(3); } else if(obstaclePos%2!=0&&obstaclePos>2) { lcd.setCursor(i,1); lcd.schrijven(4); } else // als hij 2 stappen dicht bij de speler is, laat hem dan glijden { lcd.setCursor(i,1); lcd.schrijven(5); }}nietig endGame(){ if(score==10) { lcd.clear(); lcd.print("Gefeliciteerd!"); lcd.setCursor(0,1); lcd.print("Je hebt ze allemaal verslagen"); vertraging (3000); } else if(score<3) { lcd.clear(); lcd.print("Je zuigt"); lcd.setCursor(0,1); lcd.print("Score:"); lcd.print(score); vertraging (3000); } else if(score<6) { lcd.clear(); lcd.print("Niet slecht!"); lcd.setCursor(0,1); lcd.print("Score:"); lcd.print(score); vertraging (3000); } else { lcd.clear(); lcd.print("Geweldig!"); lcd.setCursor(0,1); lcd.print("Score:"); lcd.print(score); vertraging (3000); }}

Schema's


Productieproces

  1. Ode aan het prototype
  2. De uitdagingen van productontwerp
  3. De Tetrode
  4. Liquid Crystal Display (LCD)
  5. Temperatuurbewaking op de Raspberry Pi
  6. Expositie:The Primal Display
  7. De Drone Pi
  8. Archimedes:The AI ​​Robot Owl
  9. Strategische datasourcing is de moderne manier om verstoringen te voorkomen
  10. Het geheim van industriële touchscreenreparatie
  11. De beste bladblazer