Étape 5: Ajouter les palettes
Pour ceux qui sont nouveaux à l’électronique, ces résistances ajustables sont appelés potentiomètres.
Je préfère avoir le bouton vers le haut, donc j’ai soudé des pistes sur le potentiomètre. Si vous faites cela, assurez-vous d’utiliser des fils isolés parce que le corps du potentiomètre est en métal et pourrait facilement court-circuiter les fils.
Alternativement, vous pourriez juste brancher les fils du potentiomètre sur le montage d’essai. Si vous faites cela, je recommande les fils de flexion 90 degrés alors qu’ils ne seraient pas répandre la maquette conduit trop. (Voir photo)
Nous il fil vers le haut comme une échelle de résistance. Un fil va au sol, l’autre à + 5V et le milieu fil mobile se raccorde sur une broche analogique de Arduino.
À un extrême, la sortie 5V, à l’autre extrême, la sortie sera 0V, n’importe où entre les deux, nous allons avoir une valeur comprise entre 0 et 5V.
Nous pouvons lire cette tension à l’aide à l’aide de analogRead(). La valeur retournée par analogRead n’est pas une valeur fractionnaire entre 0 et 5. Au lieu de cela, il retourne un entier compris entre 0 et 1023. Pour mapper cette gamme dans la gamme actuelle qui correspond à la position verticale de la pagaie, nous allons utiliser la fonction de map() Arduino.
paddleYposition = carte (potentiometerValue, 0,1023, 0,36).
Répéter pour l’autre côté et nous a presque écrit un jeu jouable !
La balle rebondit toujours même lorsqu’il manque le ballon. Nous allons corriger cela.
// 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() ); }