สร้างเกม Flappy Bird ด้วย Arduino UNO + Processing IDE
Flappy Bird เหมือนเกมนกตัวจริงที่คุณควบคุมนกตัวโปรด ที่ต้องเอาชนะอุปสรรคมากมาย หากคุณต้องการบินเหมือนนกจริงหรือเพลิดเพลินกับการบิน เกมที่เครื่องปัดจะตอบสนองความต้องการของคุณ เกมดังกล่าวช่วยให้คุณกางปีกเครื่องปัดและบินได้เหมือนนกจริง คุณเคยจินตนาการไหมว่ามันจะเป็นอย่างไร เมื่อเราเล่นโดยใช้ท่าทางมือของเรา? ดังนั้นทำตามทุกขั้นตอนตามบทความนี้ คุณจะทำให้มันเกิดขึ้นได้ด้วย Arduino UNO
รายการอุปกรณ์
ขั้นตอนการทํางาน
1. ติดตั้งโปรแกรม Arduino IDE
สำหรับการเขียนโปรแกรมของ Arduino IDE นั้นจะใช้ภาษา C/C++ ซึ่งเป็นรูปแบบภาษาซีประยุกต์แบบหนึ่ง ที่มีโครงสร้างการทำงานของตัวภาษาโดยรวม คล้ายกับ ภาษาซีมาตรฐาน (ANSI-C) ทั่วๆไป เพียงแต่ได้มีการปรับปรุงเพื่อลดความยุ่งยากในการใช้งานลง เพื่อให้ผู้ใช้สามารถใช้งาน เขียนโปรแกรมได้ง่าย และสะดวกมากกว่าเขียนภาษาซี แบบมาตรฐาน
Arduino integrated development environment หรือเรียกสั้นๆว่า โปรแกรม Arduino IDE เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source ซึ่ง Arduino IDE จะทำหน้าที่ ติดต่อ ระหว่าง คอมพิวเตอร์ ของเรา (Windows, Mac OS X และ Linux) กับ บอร์ด Arduino ซึ่งโปรแกรมนี้ออกแบบให้ง่ายต่อการเขียนโค้ดและอัปโหลดโค้ดที่เราเขียน เข้าสู่ บอร์ด Arduino
โดย Download ตัวติดตั้งได้จาก
https://www.arduino.cc/en/Main/Software
เลือก Windows Installer, for Windows 7 and up
คลิกเลือก JUST DOWNLOAD (หากต้องการร่วมบริจาคช่วยการพัฒนา Arduino Software สามารถกด CONTRIBUTE & DOWNLOAD)
เมื่อดาวน์โหลดเสร็จแล้ว ให้ติดตั้งตามที่โปรแกรมแนะนำ
2. เชื่อมต่อสายระหว่าง HC-SR04 กับ Arduino UNO
3. ตรวจสอบ Port ของบอร์ด Arduino UNO
เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปที่บอร์ด Arduino UNO
บอร์ดนี้มีตัวสื่อสารกับ พอร์ต USB ของคอมพิวเตอร์ คือ USB communication เป็นชิป ATmega16U2 ซึ่งแปลงสัญญาณ USB เป็นแบบอนุกรม เพื่อช่วยให้คอมพิวเตอร์ของสามารถอัพโหลดโปรแกรมและสื่อสารกับชิป ATmega328 ได้
โดย คลิกขวา Computer -> Properties -> Device Manager
ไปที่ Ports (COM & LPT) จะพบ Arduino Uno ในตัวอย่างเป็น (COM14) แสดงว่าคอมพิวเตอร์ของเราสามารถ ติดต่อสื่อสารกับ บอร์ด Arduino UNO ได้แล้ว
4. อัพโหลดโค้ด สร้างเกม Flappy Bird ด้วย Arduino UNO
เปิดโปรแกรม Arduino IDE
เขียนโปรแกรม หรือ Sketch ตามโค้ดด้านล่างนี้
//for more projects visit www.blackkeyhole.com
const int trigPin = 11; //DECLARE TRIG PIN AT D11
int echoPin = 10; //DECLARE ECHO PIN AT D10
int safezone = 10;
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop()
{
long duration, cm; //DECLARE VARIABLES TO STORE SENSOR O/P
digitalWrite(trigPin, LOW); //MAKE THE TRIG PIN LOW
delayMicroseconds(2); //WAIT FOR FEW MICROSECONDS
digitalWrite(trigPin, HIGH); //NOW SET THE TRIG PIN
delayMicroseconds(5); //WAIT FOR FEW MICROSECONDS UNTIL THE TRIG PULSE IS SENT
digitalWrite(trigPin, LOW); //MAKE THE TRIG PIN LOW AGAIN
duration = pulseIn(echoPin, HIGH); //MAKE ECHO PIN HIGH AND STORE THE BOUNCED PULSE IN VARIABLE DURATION
cm = microsecondsToCentimeters(duration);
long inch = cm / 2.54;
Serial.println(cm);
}
long microsecondsToCentimeters(long microseconds) //SPEED OF SOUND IS 29 uSEC PER CM
{
return microseconds / 29 / 2;
}
ไปที่ Tools -> Board แล้วเลือกให้ตรงกับบอร์ดที่ใช้งาน สำหรับ Arduino UNO ให้เลือกบอร์ด Arduino Uno
เลือก Port โดยไปที่ Tools -> Port -> COM14 (Arduino Uno)
(โดย COM14 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
ตั้งชื่อตามต้องการ ในตัวอย่างตั้งเป็น flappybird_uno -> Save
โปรแกรมจะคอมไพล์ (compile) โดยจะทำการอ่านโปรแกรมภาษาซีทั้งหมดตั้งแต่ต้นจนจบ แล้วทำการแปลผลทีเดียว
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
5. ดาวน์โหลด และ ติดตั้ง โปรแกรม Processing IDE
Processing เป็นซอฟท์แวร์ เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source เหมาะสำหรับผู้ต้องการพัฒนาโปรแกรมเกี่ยวกับการสร้างภาพเคลื่อนไหวและการมีปฏิสัมพันธ์ สำหรับผู้ที่เคยใช้ชุดพัฒนาโปรแกรม Arduino มาแล้ว เมื่อเห็นรูปร่างหน้าตาการอินเตอร์เฟสของ Processing แล้วจะรู้สึกคุ้นเคยมาก เพราะเหมือนกันนั่นเอง อีกทั้ง Processing และ Arduino ใช้หลักการในการเขียนโปรแกรมเหมือนกัน โดยมีพื้นฐานมาจากภาษา C/C++ รวมถึงการติดตั้งชุดพัฒนาก็เหมือนกันด้วย
เริ่มใช้งานโดย ใช้คอมพิวเตอร์ Download ตัวติดตั้ง Processing IDE ได้จาก
ให้แตกไฟล์ จะได้โฟลเดอร์ processing-3.5.4 จะย้ายไปใว้ที่ใหนก็ได้ เวลาจะเปิดโปรแกรม ให้เข้าไปดับเบิลคลิกไฟล์ processing.exe ใน โฟลเดอร์ processing-3.5.4
เขียนโปรแกรม ให้กับ Processing ตามโค้ดด้านล่าง
import processing.serial.*;
int DistanceUltra;
int IncomingDistance;
Serial myPort;
String DataIn;
Pipe p1 = new Pipe();
Pipe p2 = new Pipe();
Pipe p3 = new Pipe();
//bird height and width location
float birdy = 46;
float birdx = 56;
float gravity = 5;
//the speed of the pipes
int speed;
//score and game state
boolean gameOver = false;
int score = 0;
int highscore = 0;
int point = 1;
color birdColor = color(255, 204, 0);
void setup(){
size(400,600);
p1.x = width + 50;
p2.x = width + 220;
p3.x = width + 370;
myPort = new Serial(this, "COM14", 9600); //change the com port which is suitable for your machine
myPort.bufferUntil(10);
}
void serialEvent (Serial myPort){
DataIn = myPort.readString();
println(DataIn);
IncomingDistance = int(trim(DataIn));
println("incoming distance="+IncomingDistance);
if (IncomingDistance>1 && IncomingDistance<100 ) { DistanceUltra = IncomingDistance; //save the value only if its in the range 1 to 100 } }
}
}
void draw(){
background(0);
p1.pipe();
p2.pipe();
p3.pipe();
fill(birdColor);
ellipse(birdx, birdy, 55,55);
// birdy += gravity;
play();
success(p1);
success(p2);
success(p3);
if (IncomingDistance>10)
{
//birdy -= jumpForce;
birdy -= gravity;
}
else
{
birdy += gravity;
}
}
void play(){
if(gameOver == false)
{
speed = 2;
p1.x -= speed;
p2.x -= speed;
p3.x -= speed;
textSize(24);
fill(255,255,255);
text(score, width/2, 30);
}
if(gameOver == true)
{
speed = 0;
p1.x -= speed;
p2.x -= speed;
p3.x -= speed;
if( highscore < score)
{
highscore = score;
}
textSize(16);
fill(0, 102, 153);
textAlign(CENTER);
text("Click : Play Again", width/2, height/2);
text("Score: " + score, width/2, height/2 - 20);
text("High-Score: " + highscore, width/2, height/2 - 40);
if (mousePressed)
{
delay(900);
score = 0;
gameOver = false;
birdy = 100;
birdx = 56;
p1.x = width + 50;
p2.x = width + 220;
p3.x = width + 370;
p1.top = random(height/2);
p1.bottom = random(height/2);
p2.top = random(height/2);
p2.bottom = random(height/2);
p3.top = random(height/2);
p3.bottom = random(height/2);
}
}
}
void success(Pipe test){
if(birdy < test.top || birdy > height - test.bottom)
{
if(birdx > test.x && birdx < test.x + test.w)
{
gameOver = true;
}
}
}
class Pipe
{
float top = random(height/3 + 200);
float bottom = random(height/3 +200);
float x = width + 150;
float w = 70;
color pipeColor = color(0, 255, 0);
void pipe()
{
fill(pipeColor);
rect(x, 0, w, top);
rect(x, height-bottom, w, bottom);
if(x < -100)
{
score += point;
x = width;
top = random(height/2);
bottom = random(height/2);
}
}
}
แก้ไขชื่อ COM ให้ตรงกับ บอร์ด Arduino UNO ของคุณ
คลิกที่ Run
โปรแกรม Processing IDE จะแสดง หน้าจอเกม Flappy Bird
แสดงว่า โปรเจค สร้างเกม Flappy Bird ของคุณสำเร็จแล้ว -> จากนั้นทดสอบเล่นเกม
credit : blackkeyhole.com by : Ashshak