شاید برای شما هم پیش آمده باشد که بجای استفاده از کلید های ترکیبی در ویندوز به دنبال راهکاری برای انجام سریع تر تسک هایی مانند کم زیاد کردن صدا، پخش یا توقف موزیک درحال پخش باشید، در این آموزش به دنبال راه حل حل برای همین موضوع هستیم که اقدام به ساخت یک مدیا کنترلر خواهیم کرد. به این صورت که با اختصاص دادن هر تسک به یک GPIO با فعال کردن آن پین، تسک مورد نظر انجام خواهد شد. در این پروژه آموزش کنترل انواع کلید ها و میانبر های مختلف داده خئاهد شد تا با استفاده از یک میکروکنترلر و یک کد ساده در زمان صرفه جویی کنید و تسک ها با کمترین انرژی به پایان برسانید. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
برد Teensy تینسی
تینسی Teensy یک برد توسعه با رابط کاربری آسان و دارای ویژگی های زیادی در یک بسته خوب ارائه شده است. هر برد Teensy همراه با یک بوت لودر از قبل فلش می شود بنابراین می توانید با استفاده از اتصال USB روی آن برنامه ریزی کنید، نیازی به برنامه نویس خارجی نیست و میتوانید با استفاده از C برای Teensy در ویرایشگر مورد علاقه خود برنامه نویسی کنید و یا میتوانید افزونه Teensyduino را برای Arduino IDE نصب کرده و با Arduino IDE را برای آن برنامه بنویسید.
پردازنده موجود در Teensy به USB نیز دسترسی دارد و میتواند هر نوع دستگاه USB مورد نیاز شما را تقلید کند و آن را برای USB-MIDI و سایر پروژه های HID آماده کار کند. پردازنده ۳۲ بیتی چند ویژگی دیگر نیز فراهم کرده است، از جمله چند کانال دسترسی مستقیم به حافظه، چند ADC با رزولوشن بالا و حتی یک رابط صوتی دیجیتال I2S. همچنین چهار تایمر جداگانه وجود دارد، به علاوه یک تایمر تأخیر. و همه پین های دیجیتال دارای قابلیت وقفه هستند و قابلیت ارائه ولتاژ سیستم ۳٫۳ ولت را تا حداکثر ۲۵۰ میلی آمپر را دارد.
نحوه کار پروژه تینسی
در این پروژه با استفاده توابع تعریف شده برای برد Teensy اقدام به کنترل میانبر های مختلف در ویندوز خواهیم کرد. برای مثال کنترل میزان صدا و کنترل پخش فیلم یا موسیقی، البته این موارد در سیتم های با سیستم عامل مک هم قابل اجراست اما ممکن است باعث کاهش سرعت شود. سرعت کیبورد USB به ۵۰۰ کلیک در هر ثانیه محدود می شود و برخی از سیستم عامل ها ممکن است سرعت را فقط به ۶۲٫۵ فشار در ثانیه محدود کنند. در این پروژه با استفاده از ۴ GPIO در برد Teensy اقدام پردازش دستورات مدنظر متناسب با وضعیت فعلی هر پین خواهیم کرد، تا در صورت تغییر وضعیت پین تسک مدنظر ما انجام شود.
وسایل مورد نیاز
میکروسوییچ
نصب Teensyduino
در موارد قبلی برای نصب افزونه مرجع برد هایی مانند ESP32 با استفاده از لینکی از منوی prefences اقدام به نصب افزونه برد مورد نظر برای شروع کار با برد و تشخیص توسط نرمافزار استفاده میکردیم، اما این فرآیند برای برد های Teensy به لطف Teensyduino بسیار آسان تر و سریع شده. در آموزش مقدماتی مرحله به مرحله با هم اقدام به نصب Teensyduino کردهایم. برای مشاهده مراحل نصب به این آموزش مراجعه کنید.
شماتیک و کد های پروژه
در این پروژه برای تست از چهار GPIO استفاده کردم، که به دلخواه میتوانید تعداد این میکروسوییچ ها را با تعریف در برنامه مشخص کنید. در این پروژه از پین های D1, D2, D3, D4 استفاده خواهیم کرد، و هر میکروسوییچ در ادامه به GND متصل میشود. در مرحله اول اتصالات را مطابق تصویر زیر برقرار کنید.
- در این پروژه با قرار دادن موارد زیر در توابع مربوط به عملکرد هر GPIO قادر خواهید بود تا تسک مورد نظر را انجام دهید. بعضی اوقات ممکن است به کنترل دقیق صفحه کلید نیاز داشته باشید. بسیاری از برنامه های ویندوز یک کاراکتر CTRL-C را به عنوان یک دستور کپی تشخیص نمی دهند مگر اینکه کلید CTRL قبلا فشار داده شود، در حالی که کلید C فشار داده می شود، همچنان پایین نگه داشته شود. برخی از برنامه ها به نگه داشتن کلیدها برای بیش از حداقل زمان نیاز دارند. “HOME” و “Print Screen” و سایر موارد خاص را نمی توان در یک رشته معمولی قابل استفاده با ()Keyboard.print نشان داد.
KEY_MEDIA_PLAY | KEY_MEDIA_PAUSE | ||
KEY_MEDIA_RECORD | KEY_MEDIA_STOP | ||
KEY_MEDIA_REWIND | KEY_MEDIA_FAST_FORWARD | ||
KEY_MEDIA_PREV_TRACK | KEY_MEDIA_NEXT_TRACK | ||
KEY_MEDIA_VOLUME_DEC | KEY_MEDIA_VOLUME_INC | ||
KEY_MEDIA_PLAY_PAUSE | KEY_MEDIA_PLAY_SKIP | ||
KEY_MEDIA_MUTE | KEY_MEDIA_EJECT |
در ادامه برای استفاده از جداول بالا و این قادر خواهیم بود تسک مدنظر را انجام دهیم. برای ارسال تسک های جداگانه می توانید از رویداد های press و release استفاده کنید و از (i)Keyboard.press و (i)Keyboard.release در کد استفاده کنید. “i” ممکن است نوشته های معمولی یا کدهای اصلی باشد.
if (button3.fallingEdge()) { Keyboard.press(KEY_MEDIA_VOLUME_DEC); Keyboard.release(KEY_MEDIA_VOLUME_DEC); } if (button4.fallingEdge()) { Keyboard.press(KEY_MEDIA_VOLUME_INC); Keyboard.release(KEY_MEDIA_VOLUME_INC); } if (button6.fallingEdge()) { Keyboard.press(KEY_MEDIA_EJECT); delay(300); Keyboard.release(KEY_MEDIA_EJECT); }
بطور معمول شش کلید همیشه توسط صفحه کلید USB منتقل می شود. و فقط از کلید اول استفاده می شود و ۵ کلید دیگر صفر هستند. با این وجود می توانید از ۶ کلید به هر روشی که دوست دارید استفاده کنید. به عنوان مثال، این کد کلید های A ، B ، C ، D ، E و F را می فرستد، همه یک باره فشرده می شوند.
Keyboard.set_key1(KEY_A); Keyboard.set_key2(KEY_B); Keyboard.set_key3(KEY_C); Keyboard.set_key4(KEY_D); Keyboard.set_key5(KEY_E); Keyboard.set_key6(KEY_F);
کد های کامل پروژه ساخت دستگاه مدیا کنترلر با استفاده از Teensy 3.2
#include <Bounce.h> // ساخت یک آبجکت bounce برای هر کلید Bounce button0 = Bounce(0, 10); Bounce button1 = Bounce(1, 10); // 10 ms زمان برای هرکلید Bounce button2 = Bounce(2, 10); Bounce button3 = Bounce(3, 10); Bounce button4 = Bounce(4, 10); // در صورت حساس بودن کلید ها می توانید زمان را افزایش دهید Bounce button5 = Bounce(5, 10); Bounce button6 = Bounce(6, 10); void setup() { //مشخص کردن وضعیت اولیه هر پین متصل به کلید pinMode(0, INPUT_PULLUP); pinMode(1, INPUT_PULLUP); pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); pinMode(4, INPUT_PULLUP); pinMode(5, INPUT_PULLUP); pinMode(6, INPUT_PULLUP); } void loop() { //بروز رسانی وضعیت هر کلید بعذ از هر بار چرخش حلقه button0.update(); button1.update(); button2.update(); button3.update(); button4.update(); button5.update(); button6.update(); if (button0.fallingEdge()) { Keyboard.press(KEY_MEDIA_PREV_TRACK); Keyboard.release(KEY_MEDIA_PREV_TRACK); } if (button1.fallingEdge()) { Keyboard.press(KEY_MEDIA_PLAY_PAUSE); Keyboard.release(KEY_MEDIA_PLAY_PAUSE); } if (button2.fallingEdge()) { Keyboard.press(KEY_MEDIA_NEXT_TRACK); Keyboard.release(KEY_MEDIA_NEXT_TRACK); } if (button3.fallingEdge()) { Keyboard.press(KEY_MEDIA_VOLUME_DEC); Keyboard.release(KEY_MEDIA_VOLUME_DEC); } if (button4.fallingEdge()) { Keyboard.press(KEY_MEDIA_VOLUME_INC); Keyboard.release(KEY_MEDIA_VOLUME_INC); } if (button5.fallingEdge()) { Keyboard.press(KEY_SYSTEM_POWER_DOWN); Keyboard.release(KEY_SYSTEM_POWER_DOWN); } if (button6.fallingEdge()) { Keyboard.press(KEY_MEDIA_EJECT); delay(300); Keyboard.release(KEY_MEDIA_EJECT); } }
- توجه داشته باشید که مطابق تصویر زیر باید از منوی Tools در نرمافزار Arduino IDE اقدام به تغییر UsbType کنید و مقدار را بر روی keyboard تنظیم کنید تا ارتباط به درستی با سیستم و میکرو برقرار شود.
جمع بندی
در این آموزش با استفاده از برد Teensy که به اصطلاح آن را سریع ترین آردوینو نیز مینامند، یک مدیا کنترلر ساختیم، البته دستگاه هایی با این نام لزوما سخت افزاری نیستند و انواع متفاوتی دارند. با استفاده از چند پین GPIO کنترلر انواع سیستم های مختلف در کامپیوتر خود را به دست گرفتیم و در سریع ترین زمان ممکن آن هارا به نتیجه رساندیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام
بسیار عالی ود یه پروژه جدید و جالب
آیا این پروژه با آردوینو هم قابل اجرا است؟
با سلام ممنون از توجه شما، برای اجرا نیاز به ماژول جداگانه دارید، البته در مدل هایی مانند mirco قابل اجرا است اما نه با این کد.