آردوینو آموزش آردوینو

آموزش کتابخانه keyboard آردوینو بخش سوم

keay-board-ardoino
نوشته شده توسط علیرضا قربانی

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

 

آموزش کتابخانه keyboard آردوینو بخش اول

آموزش کتابخانه keyboard آردوینو بخش دوم

 

توجه:هنگام استفاده از توابع زیر، کنترل کیبورد کامپیوتر شما به دست آردوینو در می‌آید پس توجه داشته باشید که برای تست دقیقا  مطابق مثال‌های ذکر شده عمل کنید.

 

 

 

Keyboard.press()

 

هنگامی که از این تابع استفاده می‌کنیم مثل این می‌ماند که دستمان را بر روی یکی از دکمه‌های کیبورد نگه داریم و دستمان را برنداریم. شکل کلی این تابع به صورت زیر می‌باشد:

  Keyboard.press(char);

 

به جای char کلیدی که می‌خواهیم فشار داده شود قرار می‌گیرد.برای مثال برای فشار دادن کلید CTRL جپ بر روی کیبورد می‌توانیم از  کد زیر استفاده کنیم:

  Keyboard.press(KEY_LEFT_CTRL);

برای سایر کلید‌ها می‌توانید از جدول زیر استفاده کنید.

 

Key Hexadecimal value Decimal value
KEY_LEFT_CTRL ۰x80 ۱۲۸
KEY_LEFT_SHIFT ۰x81 ۱۲۹
KEY_LEFT_ALT ۰x82 ۱۳۰
KEY_LEFT_GUI ۰x83 ۱۳۱
KEY_RIGHT_CTRL ۰x84 ۱۳۲
KEY_RIGHT_SHIFT ۰x85 ۱۳۳
KEY_RIGHT_ALT ۰x86 ۱۳۴
KEY_RIGHT_GUI ۰x87 ۱۳۵
KEY_UP_ARROW ۰xDA ۲۱۸
KEY_DOWN_ARROW ۰xD9 ۲۱۷
KEY_LEFT_ARROW ۰xD8 ۲۱۶
KEY_RIGHT_ARROW ۰xD7 ۲۱۵
KEY_BACKSPACE ۰xB2 ۱۷۸
KEY_TAB ۰xB3 ۱۷۹
KEY_RETURN ۰xB0 ۱۷۶
KEY_ESC ۰xB1 ۱۷۷
KEY_INSERT ۰xD1 ۲۰۹
KEY_DELETE ۰xD4 ۲۱۲
KEY_PAGE_UP ۰xD3 ۲۱۱
KEY_PAGE_DOWN ۰xD6 ۲۱۴
KEY_HOME ۰xD2 ۲۱۰
KEY_END ۰xD5 ۲۱۳
KEY_CAPS_LOCK ۰xC1 ۱۹۳
KEY_F1 ۰xC2 ۱۹۴
KEY_F2 ۰xC3 ۱۹۵
KEY_F3 ۰xC4 ۱۹۶
KEY_F4 ۰xC5 ۱۹۷
KEY_F5 ۰xC6 ۱۹۸
KEY_F6 ۰xC7 ۱۹۹
KEY_F7 ۰xC8 ۲۰۰
KEY_F8 ۰xC9 ۲۰۱
KEY_F9 ۰xCA ۲۰۲
KEY_F10 ۰xCB ۲۰۳
KEY_F11 ۰xCC ۲۰۴
KEY_F12 ۰xCD ۲۰۵

 

 

همچنین برای کلید‌های حروفی یا عددی بر روی کیبورد باید آن‌ها را درون یک سبنگل کوت قرار دهیم.برای مثال برای فشار دادن کلید n باید به صورت زیر عمل کرد:

Keyboard.press('n');

 

(از این تابع برای کلید‌های ترکیبی مثل CTRL+ALT+DELTE یا CTRL+C ، CTRL+V و ….. استفاده می‌شود.)

 

برای مثال فرض کنید می‌خواهیم  task manager سیستم‌عامل ویندوز را باز کنیم. همانطور که می‌دانید کلید ترکیبی برای این کار CTRL+ALT+DELETE می‌باشد پس باید به صورت زیر عمل کنید.

  Keyboard.press(KEY_LEFT_CTRL);
  delay(50);
  Keyboard.press(KEY_LEFT_ALT);
  delay(50);
  Keyboard.press(KEY_DELETE);

 

بعد از این تابع حتما باید از تابع Keyboard.releaseAll و یا  Keyboard.release استفاده نمود(در ادامه به توضیح این دو تابع پرداخته می‌شود)

برای آزمایش یک کلید را به صورت زیر به پین شماره۲ leonardo خود متصل کنید سپس کد‌های زیر را بر روی آردوینو آپلود کنید و به مدت یک ثانیه دست خود را بر روی کلید فشار دهید و نتیجه را مشاهده کنید.(باید بعد از یک ثانیه پنجره task manager ویندوز باز شود)

آموزش کتابخانه keyboard آردوینو

اتصال کلید به آردوینو

 

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);
  }
  delay(1000);
  // new document:
  Keyboard.press(KEY_LEFT_CTRL);
  delay(50);
  Keyboard.press(KEY_LEFT_ALT);
  delay(50);
  Keyboard.press(KEY_DELETE);
  Keyboard.releaseAll();
  // wait for task manager
  delay(1000);
}

 

 

 

Keyboard.release()

 

همانطور که در توضیح تابع Keyboard.press گفته شد بعد از استفاده از تابع press باید از تابع realese استفاه شود .به این معنی که دستمان را از روی دکمه‌ی کیبورد مجازی برداشته ایم.شکل این تابع به صورت زیر می‌باشد:

Keyboard.release(key)

key کلیدی است که می‌خواهیم دستمان را از روی آن برداریم.به مثال زیر توجه کنید:

برای مثال می‌خواهیم ابتدا کلید ترکیبی CTRL+n را فشار دهیم سپس بعد از ۱۰۰ میلی ثانیه دستمان را از روی آن‌ها به صورت تک تک برداریم پس باید به صورت زیر عمل کنیم:

/*
کلید
ctrl
را فشار میدهیم
*/

Keyboard.press(ctrlKey);

/*
کلید
n
را فشار میدهیم
*/
Keyboard.press('n');

delay(100);
//دستمان را از روی کلید بر میداریم


/*
دستمان را از روی کلید
ctrl
بر میداریم
*/
Keyboard.release(ctrlKey);

/*

دستمان را از روی کلید
n
بر میداریم
*/
Keyboard.release('n');

 

 

 

Keyboard.releaseAll()

 

توسط این تابع دستمان را از روی کلیه کلید‌هایی که فشار دادیم بر می‌داریم.( بر خلاف تابع فوق که دستمان را تک تک از روی کلید‌ها بر می‌داشتیم ، توسط این تابع دستمان را از روی کلیه کلید‌هایی که فشردیم بر می‌داریم.

 

برای مثال می‌خواهیم ابتدا کلید ترکیبی CTRL+n را فشار دهیم سپس بعد از ۱۰۰ میلی ثانیه دستمان را از روی آن‌ها به صورت کلی برداریم پس باید به صورت زیر عمل کنیم:

 

char ctrlKey = KEY_LEFT_CTRL;


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);
	}
	delay(1000);
	// new document:

	/*
	کلید
	CTRL
	را فشار میدهیم
	*/
	Keyboard.press(ctrlKey);

	/*
	کلید
	n
	را فشار میدهیم
	*/
	Keyboard.press('n');
	delay(100);

	//بعد از ۱۰۰ میلی  ثانیه دستمان را به صورت کلی از کلید ها بر میداریم
	Keyboard.releaseAll();
	// wait for new window to open:
	delay(1000);
}

 

 

Keyboard.end()

توسط این تابع به کار کیبورد مجازی پایان می‌دهیم.

 

درباره نویسنده

علیرضا قربانی

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

تبادل نظر و رفع عیب با ثبت دیدگاه

۱۶ دیدگاه

    • با سلام
      ضمن تشکر از توجه شما، نمیدانم منظور سوالتان را درست متوجه شده ام یا خیر، کدهای زیر را بررسی کنید.
      float mv = constrain(analogRead(A0) / 10, 0, 100) / 100.00;
      vol.tone(1000, 255*mv);

  • سلام و عرض ادب
    جناب استاد بعد از وارد کردن کدهای برنامه ابتدای صفحه (کدی که با زدن کلید تسک منیجر ویندوز اجرا می شود) این خطا برایم نمایش داده می شود
    لطفا راهنمایی بفرمائید. باتشکر فراوان
    Arduino: 1.8.19 (Windows 10), Board: “Arduino Uno”

    C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\safa\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\safa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\safa\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10819 -build-path C:\Users\safa\AppData\Local\Temp\arduino_build_788614 -warnings=none -build-cache C:\Users\safa\AppData\Local\Temp\arduino_cache_578676 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino

    C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -hardware C:\Users\safa\AppData\Local\Arduino15\packages -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -tools C:\Users\safa\AppData\Local\Arduino15\packages -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\safa\Documents\Arduino\libraries -fqbn=arduino:avr:uno -vid-pid=2341_0043 -ide-version=10819 -build-path C:\Users\safa\AppData\Local\Temp\arduino_build_788614 -warnings=none -build-cache C:\Users\safa\AppData\Local\Temp\arduino_cache_578676 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.arduinoOTA.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.avr-gcc.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\safa\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -verbose C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino

    Using board ‘uno’ from platform in folder: C:\Users\safa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

    Using core ‘arduino’ from platform in folder: C:\Users\safa\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

    Detecting libraries used…

    “C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o nul

    Generating function prototypes…

    “C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\preproc\\ctags_target_for_gcc_minus_e.cpp”

    “C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags” -u –language-force=c++ -f – –c++-kinds=svpf –fields=KSTtzns –line-directives “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\preproc\\ctags_target_for_gcc_minus_e.cpp”

    Compiling sketch…

    “C:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino” “-IC:\\Users\\safa\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard” “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp” -o “C:\\Users\\safa\\AppData\\Local\\Temp\\arduino_build_788614\\sketch\\keybord-test.ino.cpp.o”

    C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino: In function ‘void setup()’:

    keybord-test:7:3: error: ‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?

    Keyboard.begin();

    ^~~~~~~~

    C:\Users\safa\Documents\Arduino\keybord-test\keybord-test.ino: In function ‘void loop()’:

    keybord-test:17:3: error: ‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?

    Keyboard.press(KEY_LEFT_CTRL);

    ^~~~~~~~

    keybord-test:17:18: error: ‘KEY_LEFT_CTRL’ was not declared in this scope

    Keyboard.press(KEY_LEFT_CTRL);

    ^~~~~~~~~~~~~

    keybord-test:19:18: error: ‘KEY_LEFT_ALT’ was not declared in this scope

    Keyboard.press(KEY_LEFT_ALT);

    ^~~~~~~~~~~~

    keybord-test:21:18: error: ‘KEY_DELETE’ was not declared in this scope

    Keyboard.press(KEY_DELETE);

    ^~~~~~~~~~

    exit status 1

    ‘Keyboard’ not found. Does your sketch include the line ‘#include ‘?

    • با سلام
      کاربر گرامی کلاس های این کتابخانه طی سال ها تغییر کرده است و بایستی این کد را با توجه به آخرین آپدیت کتابخانه تغییر دهید.

  • البته لازم به ذکر است حد المقدور سعی کردم تمامی کتابخانه های صفحه کلید را نصب کنم. ضمنا در کی پد مشکلی نیست فقط در کیبرد این خطا می دهد

  • سلام من متوجه شدم در اردوینو یونو کی برد کار نمی کند مگر اینکه تغییر فرم ورک انجام شود. اولا چرا این موضوع را بطور واضع و مشخص در ابتدای مباحث صفحه کلید به صورت تیتر توضیح بدهید تا تازه کارانی مثل من کلی وقت مشغول سردرگم نباشند. دوم در یکی از مباحث (چنگیز شهدی
    مارس ۲۳, ۲۰۱۹ در ۱۱:۲۰ ب.ظ) ایشان قول دادند نحوه تغییر فرم ورک را بگویند که هنوز خبری نشده. سوم اگر کتابخانه ای عوض می شود شما باید در سایت مطالب را بروزرسانی کنید. این مهم در سایت های رایگان هم اتفاق می افتد حال چه برسد به اینکه هم اشتراک می پردازیم هم اینکه باید بریم بشینیم رمز گشایی کنیم که کتابخانه چه تغییری کرده و ما باید چه تغییری در کد انجام دهیم. لذا خواهشمندم کمی بفکر ما تازه کاران هم باشید. بخدا اگر کارکشته بودیم اصلا هزینه نمی کردیم/ باتشکر

    • باسلام
      سپاس از همراهی شما، این پستی که در حال بررسی آن هستید رایگان است. با توجه به اینکه این آموزش بخش سوم است، پیشنهاد میشود دو بخش قبلی را هم بررسی کنید. سپس هرجا که سوالی داشتید در بخش نظرات مطرح کنید.

  • سلام ببخشید میشه کد کامل این رو بزارید که میگم اگر لطف کنید .می‌خوام با یه ماژول لمسی کامپیوتر رو با یکبار کلیک به اسلیپ برود اگر هم دو بار روی آن کلیک شد به صفحه ویندوز برگرده
    یعنی این که کدی رو به کد قبلی اضافه کنید که با دو با ر کلیک دو بار اسپیس بزنه توی کامپیوتر تا باز بشود همچنین من یک آس ام دی از جی بی دارم که موقع رفتن به اسلیپ یعنی همون یک بار کلیک روی ماژول لمسی رنگ آن آبی شود و وقتی که از اسلیپ در آمد به رنگ سبز در آید و من از آردوینو نانو استفاده می کنم اگر میشود کد کامل آن رو بفرستید و این که مدار آن را در جواب بگویید

    • با سلام
      سپاس از همراهی شما، کد درخواستی شما توسط آردوینو اجرا نمیشود. بلکه بایستی در سیستم عامل مورد استفاده‌تان یک نرم افزار بنویسید.