ایجاد دسته ی بازی در آردوینو

Ratings
(0)

 برای ایجاد یک کنترل کننده ی بازی تمام عیار، ما تنها نیاز داریم تا یک دکمه را به برد برد خود اضافه کنیم. تصویر 19، راه این کار را به ما نشان می دهد. لطفا ابتدا برچسب های(pin labels ) پین های برد شتاب سنج را بررسی کنید. در تصویر 19 چگونگی ایجاد یک دسته ی بازی نشان داده شده است و دسته های بازی مدرن، نیز به همین صورت می باشد(تشابه دارد). همچنین ما نمی خواهیم یک دسته ی بازی فانتزی ایجاد کنیم. این برد برد ما نسبتا ضعیف است(به تصویر زیر نگاه کنید)، و ما  وقتی که برد ما به آردوینو متصل است، نمی توانیم آن را  بچرخانیم. دیر یا زود ممکن است شما برخی سیم های برد را قطع کنید و دسته ی ما از کار خواهد افتاد. برای حل این مشکل، باید سعی کنید با استفاده از برخی نوارهای لاستیکی، این برد برد را به آردوینو متصل کنید. این روش به کار می آید اما خیلی زیبا به نظر نمی رسد، و هنوز هم کار با آن سخت است. یک راه حل بهتر، این است که از شیلد آردوینو پروتو(Arduino Proto Shield) استفاده کنیم. این شیلد یک برد برد قابل اتصال است که به ما امکان می دهد تا به سرعت نمونه های اولیه ی مدارها را ایجاد کنیم. این برد برد، توسط پین های آردوینو احاطه شده است، بنابراین ما دیگر به سیم های بلند نیازی نداریم.

 استفاده از شیلدها راه مناسبی برای بهبود بخشیدن به قابلیت های آردوینو است. و ما می توانیم برای اهداف مختلف، شیلد های متفاوتی داشته باشیم؛ مثلا ما می توانیم برای اترنت(Ethernet)، صوت(sound)، و غیره از شیلدها استفاده کنیم. تصویر ص 108 یک شیلد پروتو را نشان می دهد که دربردارنده ی سنسور حرکت ما است.

 (تصویر 19: ایجاد یک دسته ی بازی با شتاب سنج و دکمه ی فشاری)

تصویر 19: ایجاد یک دسته ی بازی با شتاب سنج و دکمه ی فشاری

 

 

 اکنون که سخت افزار ما کامل است، ما به نسخه ی نهایی نرم افزار دسته ی بازی نیاز داریم. این نرم افزار از دکمه ای که ما اضافه کرده ایم، پشتیبانی می کند و از راه حلی که در مقاله ی تعیین مقادیر مینیمم و ماکزیمم ایجاد کردیم استفاده می کند.

#include <Bounce2.h>
const unsigned int BUTTON_PIN = 7;
const unsigned int X_AXIS_PIN = A2;
const unsigned int Y_AXIS_PIN = A1;
const unsigned int Z_AXIS_PIN = A0;
const unsigned int NUM_AXES = 3;
const unsigned int PINS[NUM_AXES] = { 
  X_AXIS_PIN, Y_AXIS_PIN, Z_AXIS_PIN 
};

const unsigned int BUFFER_SIZE = 16;
const unsigned int BAUD_RATE = 38400;
int buffer[NUM_AXES][BUFFER_SIZE];
int buffer_pos[NUM_AXES] = { 0 };
boolean button_pressed = false;

Bounce button;

void setup() {
  Serial.begin(BAUD_RATE);
  pinMode(BUTTON_PIN, INPUT);
  button.attach(BUTTON_PIN);
  button.interval(20);
}

int get_axis(const int axis) {
  delay(1);
  buffer[axis][buffer_pos[axis]] = analogRead(PINS[axis]);
  buffer_pos[axis] = (buffer_pos[axis] + 1) % BUFFER_SIZE;

  long sum = 0;
  for (unsigned int i = 0; i < BUFFER_SIZE; i++)
    sum += buffer[axis][i];
  return round(sum / BUFFER_SIZE);
}
int get_x() { return get_axis(0); }
int get_y() { return get_axis(1); }
int get_z() { return get_axis(2); }

void loop() {
  Serial.print(get_x());
  Serial.print(" ");
  Serial.print(get_y());
  Serial.print(" ");
  Serial.print(get_z());
  Serial.print(" ");
  if (button.update()) {
    button_pressed = button.read() == HIGH;
  }
  Serial.println(button_pressed == HIGH ? "1" : "0");
  delay(10);
}

 (تصویر 20 : یک شیلد خالی پروتو در سمت چپ، و همان شیلد که قطعه گذاری شده است، در سمت راست)

تصویر 20 : یک شیلد خالی پروتور در سمت چپ، و همان شیلد که قطعه گذاری شده است، در سمت راست

 مانند مقاله ی ایجاد یک تاس باینری در صفحه 55، ما از کلاس Bounce برای پرش زدایی(debounce) دکمه ی فشاری استفاده می کنیم . بقیه ی کدهایی که نوشته ایم، استاندارد است. و تنها چیزی که ذکر آن مهم است، این است که ما از یک نرخ دیتا(baud rate) به مقدار 38400 استفاده می کنیم تا به  داده های دسته ی بازی  به اندازه ی کافی سرعت ببخشیم.

اکنون کدها را کامپایل و آپلود کنید سپس ترمینال سریال() را باز کنید و با دسته ی کنترلر بازی کنید. آن را حرکت دهید و گاهی اوقات دکمه را فشار دهید؛ در خروجی باید چیزی شبیه به زیر داشته باشید:

324 365 396 0
325 364 397 0
325 364 397 1
325 364 397 0
325 365 397 0
325 365 397 1
326 364 397 0

 ایجاد یک دسته ی کنترلر خانگی جالب است و ما می توانیم در پروژه های زیادی از آن استفاده کنیم. بعنوان مثال، ما می توانیم از آن برای کنترل دستگاه هایی مثل یک ربات، یک بازی پیچ و خم مهره ای(marble maze) یا چیزهای دیگر استفاده کنید. هدف اصلی این دسته ی کنترلر، کنترل کردبازی ها است، بنابراین ما در فصل بعدی، یکی از آنها را ایجاد خواهید کرد.

 {module کمک نقدی به نویسنده}

  • بازدید: 997

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال