• 0
ryco

چگونه یک کیبورد اختصاصی بسازیم؟!

سوال

سلام؛

داشتن یک کیبورد اختصاصی می تواند برای خیلی ها مفید و کارآمد باشد، کیبوردی که تنها برای یک عملیات یا برنامه خاص، فعالیت شما را ساده تر و حرفه ای تر می کند، یک کیبورد مخصوص بازی، کیبورد پخش چند رسانه ای، کیبورد برای کنترل رسپبری پای و یا حتی یک کلید برای تایپ ; در محیط ویژوال استدیو!

خب، به موارد زیر برای انجام این پروژه نیازمندیم:

1. یک برد آردوئینو که از USB پشتیبانی کند و دارای پردازنده ATmega32u4 باشد! (مانند:Leonardo, Micro, یا Due board).

2. کابل USB

3. سیم

4. بردبورد

5. کلید فشاری

در بعد نرم افزاری:

1. IDE Arduino

 

از لحاظ برنامه نویسی با کار پیچیده ای روبرو نیستیم، می توانید یک کلید تعریف کنید که تنها حرف R را تایپ کند یا یک کلید ترکیبی از Ctrl + C بسازید که عملیات کپی را انجام دهد. حتی به سادگی می توانید عملیات را زمان بندی کنید تا با فشار کلید، یک سری عملیات ها (فشار کلید) انجام شود.

در اینجا ما برای فهم بهتر پروژه دو مثال می زنیم، ابتدا بیایید یک کلید را به برد خود متصل کنیم!

KeybLogoutFritz.png

این تصویر هم توسط Fritzing ایجاد شده!:D که بعدا مفصل در موردش صحبت خواهیم کرد.

همانطور که می بینید، ما 2D را به وسیله دکمه به GND متصل می کنیم تا عملیات فیزیکی فشار دکمه کیبورد را ایجاد کنیم.

اکنون بورد خود را به وسیله USB به رایانه خود متصل کنید و IDE Arduino رو اجرا کنید.

در گام اول، کتابخانه کیبورد را به پروژه با تایپ عبارت زیر اضافه می کنیم:

#include "Keyboard.h"

در void setup، پین 2 را به عنوان ورودی تعریف می کنیم و کیبورد را فراخوانی می کنیم، با این فراخوانی، برد شما به عنوان یک کیبورد شناسایی خواهد شد!

void setup() {
  // make pin 2 an input and turn on the
  // pullup resistor so it goes high unless
  // connected to ground:
  pinMode(2, INPUT_PULLUP);
  // initialize control over the keyboard:
  Keyboard.begin();
}

و حالا در حلقه، با توجه به اینکه در حال فشار دکمه هستیم یا خیر، کلید مورد نظر را فراخوانی می کنیم. برای تشخیص در حال فشرده شدن کلید می توان از یک شرط ساده استفاده کرد:

void loop() {
  while (digitalRead(2) == HIGH) {
    // do nothing until pin 2 goes low
    delay(500);
  }

خب اکنون می خواهیم کلید ; را بسازیم:

Keyboard.press(';');
delay(100);
Keyboard.releaseAll();

به همین سادگی ما یک کلید را ساختیم که با فشار آن و نگه داشتنتش، هر دهم ثانیه، یکبار ; را تایپ می کند.

اما اگر بخواهید از کلید Ctrl استفاده کنید، باید آن را تعریف کنید، در کیبوردهایی که از ویندوز  (و همچنین لینوکس) پشتیبانی می کنند، این کلید به صورت زیر تعریف می شود:

char ctrlKey = KEY_LEFT_GUI;

هر چند لازم نیست (آخه کاربرای مک کجا از این کارا می کنند؟! :rolleyes: ) اما برای مک به صورت زیر است:

char ctrlKey = KEY_LEFT_CTRL;

دیگر چیزی تغییر نمی کند جز اینکه باید قبل از کلید c، کلید ctrl را فشار دهیم!


  // Copy:
  Keyboard.press(ctrlKey);
  Keyboard.press('c');
  delay(100);
  Keyboard.releaseAll();

به همین سادگی! می توانید عملیات های پیچیده دیگری رو هم تعریف کنید!

#لذت_ببرید

اما کدها به صورت کامل:

تک کلید:

#include "Keyboard.h"


void setup() {
  // make pin 2 an input and turn on the
  // pullup resistor so it goes high unless
  // connected to ground:
  pinMode(2, INPUT_PULLUP);
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  while (digitalRead(2) == HIGH) {
    // do nothing until pin 2 goes low
  }
      delay(500);
     Keyboard.press('n');
  delay(100);
  Keyboard.releaseAll();
  }

و برای کپی:

#include "Keyboard.h"


void setup() {
  // make pin 2 an input and turn on the
  // pullup resistor so it goes high unless
  // connected to ground:
  pinMode(2, INPUT_PULLUP);
  // initialize control over the keyboard:
  Keyboard.begin();
}

void loop() {
  while (digitalRead(2) == HIGH) {
    // do nothing until pin 2 goes low
  }
       delay(1000);
  // Copy for Win/Linux:
  Keyboard.press(ctrlKey);
  Keyboard.press('n');
  delay(100);
  Keyboard.releaseAll();
  }

 

 

پسند شده توسط 4 کاربر

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

0 پاسخ به این سوال تا کنون داده شده است

هنوز برای این سوال پاسخی ارسال نشده است

مهمان
این موضوع برای عدم ارسال قفل گردیده است.