Stap 5: Het toevoegen van de peddels
Voor diegenen die nieuw zijn tot elektronica, deze regelbare weerstanden, potentiometers worden genoemd.
Ik liever de knop naar boven, dus ik sommige op de potmeter aansluitdraden. Als u dit doet, zorg ervoor dat u geïsoleerde draden gebruiken, omdat het lichaam van de potentiometer metaal is en kon gemakkelijk korte circuit de leads.
Als alternatief kan u enkel stoppen de potentiometer leads op het breadboard. Als u dit doet, adviseer ik te veel buigen van de leads 90 graden, zodat ze niet zou verspreid het breadboard leidt. (Zie foto)
We draad het omhoog als een weerstand ladder. Één loden gaat naar de grond, de andere aan + 5V en het midden roerende lood naar een Arduino analoge Pin gaat.
Op het ene uiterste, zal de output 5V, op het andere uiterste, de output zal worden 0V, overal tussendoor hebben we een waarde tussen 0 en 5 v.
We kunnen lezen dat dit spanning met behulp van met behulp van analogRead(). De waarde die wordt geretourneerd door analogRead is niet een fractionele waarde 0 t/m 5. In plaats daarvan resultaat het een geheel getal tussen 0 en 1023. Om dit bereik kan worden toegewezen in het bereik dat correspondeert met de verticale positie van de peddel, zullen we de Arduino map() functie gebruiken.
paddleYposition = kaart (potentiometerValue, 0,1023, 0,36).
Herhaal dit voor de andere kant en we schreef bijna een speelbare spel!
De bal stuitert nog steeds zelfs wanneer hij de bal mist. Laten we dat te bevestigen.
// Arduino Pong by Hari Wiguna, 2016// v0.0 - draw ball // v0.1 - move ball // v0.2 - using millis(), move in Y direction too // v0.3 - Paddles! #include "U8glib.h" //== Preferences == U8GLIB_PCD8544 u8g(13, 11, 9, 8, 10); // SPI Com: SCK = 13, MOSI = 11, CS = 9, A0/DataCommand = 8, Reset = 10 // Analog pins where we connect the potentiometers to int paddle0Pin = A1; int paddle1Pin = A0; //== Game Variables == u8g_uint_t courtWidth, courtHeight; u8g_uint_t ballSize = 4; u8g_uint_t ballX; u8g_uint_t ballDirectionX = 1; u8g_uint_t ballY; u8g_uint_t ballDirectionY = 1; u8g_uint_t paddleWidth = 2; u8g_uint_t paddleHeight = 8; unsigned long timeToMove; int animationSpeed = 20; void MoveBall() { if (millis() > timeToMove) { ballX += ballDirectionX; if (ballX >= (courtWidth - ballSize) || ballX <= 0)ballDirectionX = -ballDirectionX; ballY += ballDirectionY; if (ballY >= (courtHeight - ballSize) || ballY <= 0) ballDirectionY = -ballDirectionY; timeToMove = millis() + animationSpeed; } } void DrawPaddle(u8g_uint_t paddleX, int paddlePin) { int analogValue = analogRead(paddlePin); // returns 0 through 1023 // Convert analogValue ranging from 0..1023 to paddleY ranging from 0..(courtHeight-paddleHeight) u8g_uint_t paddleY = map(analogValue, 0,1023, 0,courtHeight-paddleHeight); // Draw the paddle u8g.drawBox(paddleX, paddleY, paddleWidth, paddleHeight); } void DrawPaddles() { DrawPaddle(0, paddle0Pin); DrawPaddle(courtWidth - paddleWidth, paddle1Pin); } void setup(void) { u8g.setRot180(); // flip screen courtWidth = u8g.getWidth(); courtHeight = u8g.getHeight(); } void loop(void) { u8g.firstPage(); do { MoveBall(); u8g.drawBox(ballX, ballY, ballSize, ballSize); DrawPaddles(); } while ( u8g.nextPage() ); }