logo
+7 (495) 997-37-74
Москва, ул.Международная, 15
07.09.2016

Arduino Pong

07.09.2016

Сорок лет назад, 29 ноября 1972 года, компания Atari, основанная 27-летним Ноланом Бушнеллом в июне того же года, объявила о выпуске первой компьютерной игры, снискавшей широкую популярность – Pong.

Мы решили воссоздать некоторое подобие этой популярной игры. Для этого нам понадобятся:

1. Arduino или Elemik UNO R3

2. Джойстик модуль 2 шт.

Игру будем создавать на языке Processing. Arduino же с джойстиками будем использовать как пульт управления планками в игре. Схема подключения джойстиков представлена ниже

 

Для Arduinoбыл составлен следующий скетч:

int const potPin1 = A1;
int const potPin2 = A0;
int const potPin3 = A3;
int const potPin4 = A2;

void setup() {
  Serial.begin(9600);
}
void loop() {  String dat = "";  dat += analogRead(potPin1);  dat += '-';  dat += analogRead(potPin2);  dat += '-';  dat += analogRead(potPin3);  dat += '-';  dat += analogRead(potPin4);  Serial.println(dat);  delay(50); }

 Программанаязыке Processing:

import processing.serial.*;             
import java.awt.Rectangle;              

Serial myPort;   

Rectangle leftPaddle, rightPaddle;    

int paddleHeight = 50;            
int paddleWidth = 10;            

int ballSize = 10;     
int xDirection = 2;    
int yDirection = 2;   
int xPos, yPos;       
boolean moveLeftPaddle = false;
boolean moveRightPaddle = false;
boolean win = false;
boolean title = true;
int leftScore = 0;      
int rightScore = 0;    

int fontSize = 40;      

void setup() {

  size(840, 660);      

  leftPaddle = new Rectangle(50, height/2, paddleWidth, paddleHeight); //размеры планки
  rightPaddle = new Rectangle(width-50, height/2, paddleWidth, paddleHeight);
  noStroke(); 
  fill(255);  
  resetBall();
  PFont myFont = createFont(PFont.list()[3], fontSize);
  textFont(myFont);
  myPort = new Serial(this, Serial.list()[0], 9600);
  myPort.bufferUntil('\n');
}

void draw() {
  background(0);
  rect(leftPaddle.x, leftPaddle.y, leftPaddle.width, 70, 10); //рисуем планки
  rect(rightPaddle.x, rightPaddle.y, rightPaddle.width, 70, 10);
  animateBall();
  text(leftScore, 300, fontSize);
  text(rightScore, 500, fontSize);
}
void serialEvent(Serial thisPort) {  String inputString = thisPort.readStringUntil('\n');  int sensors[] = int(split(inputString, '-'));  inputString = trim(inputString);  leftPaddle.y = int(map(sensors[0], 0, 1023, 0, height - leftPaddle.height));  rightPaddle.y = int(map(sensors[1], 0, 1023, 0, height - rightPaddle.height)); } void animateBall() {  if (leftPaddle.contains(xPos, yPos) ||        rightPaddle.contains(xPos, yPos)) {           xDirection = -xDirection;  }  if (xPos < 0) {         rightScore++;         resetBall();  }      if (xPos > width) {    leftScore++;    resetBall();  }  if ((yPos <= 0) || (yPos >=height)) {    yDirection = -yDirection;  }  xPos = xPos + xDirection;  yPos = yPos + yDirection;  ellipse(xPos, yPos, ballSize, ballSize); } void resetBall() {  xPos = width/2;  yPos = height/2; }

 

Результат наших действий:

 

#Элемик #arduinopong #elemik