Paso 5: Añadir las paletas
Para los nuevos en electrónica, estos resistores ajustables se llaman potenciómetros.
Prefiero tener el mando hacia arriba, por lo que soldar unos cables en el potenciómetro. Si usted hace esto, asegúrese de utilizar cables aislados porque el cuerpo del potenciómetro es de metal y fácilmente podría cortocircuitar las puntas.
Alternativamente, sólo podría conectar los cables del potenciómetro en la protoboard. Si haces esto, te recomiendo doblar las puntas de 90 grados por lo que no extendería el protoboard conduce demasiado. (Ver foto)
Ofrecemos alambre como una escala de resistencia. Un cable va a la tierra, el otro a + 5V y el medio plomo móvil va a un Pin analógico de Arduino.
En un extremo, la salida de 5V, en el otro extremo, la salida es 0V, en cualquier lugar en el medio vamos a tener un valor entre 0 y 5V.
Podemos leer esta tensión utilizando analogRead(). El valor devuelto por analogRead no es un valor fraccionario 0 a 5. En su lugar devuelve un entero entre 0 y 1023. Para asignar esta gama en la gama actual que corresponde a la posición vertical de la paleta, vamos a usar la función map() de Arduino.
paddleYposition = mapa (potentiometerValue, 0,1023, 0.36).
Repita para el otro lado y casi escribió un juego jugable!
La bola rebota aún incluso cuando pierde la pelota. Vamos a arreglar eso.
// 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() ); }