با استفاده از کتابخانه موس شما میتوانید موس کامیپوترتان را توسط آردوینو های LEONARDO , DUE و MICRO کنترل کنید.در این آموزش قصد داریم به کنترل موس کامپیوتر همراه با جوی استیک با استفاده از آردوینو لئوناردو بپردازیم.در ادامه با مرجع تخصصی آردوینو با دیجی اسپارک همراه باشید.
کنترل موس کامپیوتر با جوی استیک
در این پروژه با استفاده از یک جوی استیک دو محوره و یک تاچ سوئیج یک موس واقعی را شبیه سازی میکنیم.حرکت نشان گر موس به مقدار های آنالوگ تولید شده توسط جوی استیک بستگی دارد.با استفاده از دو پین آنالوگ ، مقادیری بین ۰ الی ۱۰۲۳ دریافت میکنیم که با عملیاتی که تابع readAxis وظیفه انجام آن را دارد اعداد را به بازه -۶ الی ۶تبدیل میکنیم. با استفاده از سوئیچی که بر روی جوی استیک قرار دارد عملیات کلیک چپ و با استفاده از سوئیچی که بر روی برد برد قرار گرفته عملیات کلیک راست انجام می شود.
معرفی ماژول جوی استیک
ماژول جوی استیک PS2 آردوینو یک ماژول سختافزاری است که به شما امکان اتصال یک جوی استیک نوع PS2 (در کنسولهای بازی استفاده میشود) به برد آردوینو را میدهد. این ماژول از خروجیهای آنالوگ برای دو محور (معمولاً محورهای X و Y) و خروجیهای دیجیتال برای دکمهها (دو دکمه در جوی استیک) استفاده میکند. اجزای اصلی ماژول جوی استیک، جوی استیک آنالوگ است. این استیک شامل دو پتانسیومتر (یکی برای هر محور) است که سیگنالهای ولتاژ آنالوگی را تولید میکنند که به نسبت موقعیت جوی استیک در محورهای X و Y است.ماژول ممکن است یک یا چند دکمه فشاری داشته باشد که وقتی آنها فشرده میشوند، خروجیهای دیجیتالی تولید میکنند. این دکمهها میتوانند برای عملکردها و عملیاتهای مختلف در پروژههای آردوینو استفاده شوند.این ماژول دارای چند پین است که به شما اجازه میدهد آن را به برد آردوینو متصل کنید. این پینها به شرح زیر برچسبگذاری میشوند:
- VCC: تامین تغذیه (۵ ولت از آردوینو).
- GND: زمین (زمین مشترک با آردوینو).
- VRx: خروجی آنالوگ محور X.
- VRy: خروجی آنالوگ محور Y.
- SW: خروجی دیجیتال دکمهها.
- PS2_DAT، PS2_CMD، PS2_SEL، PS2_CLK: اینها برای اتصال جوی استیک با استفاده از رابط PS2 است (با آردوینو استفاده نمیشود).
بررسی پایه های ماژول جوی استیک
ماژول جوی استیک PS2 آردوینو دارای پنج پایه است که به شرح زیر هستند:
- VCC (تغذیه): این پایه برای تامین تغذیه ماژول استفاده میشود و به طور معمول به منبع تغذیه ۵ ولت آردوینو متصل میشود.
- GND (زمین): این پایه برای اتصال به زمین (GND) آردوینو استفاده میشود تا با آردوینو یک زمین مشترک داشته باشد.
- VRx (خروجی آنالوگ محور X): این پایه خروجی آنالوگ جوی استیک برای محور X است. زمانی که جوی استیک حرکت میکند، ولتاژ آنالوگ متناسب با موقعیت محور X تولید میشود که میتواند با استفاده از تابع analogRead() در آردوینو خوانده شود.
- VRy (خروجی آنالوگ محور Y): این پایه خروجی آنالوگ جوی استیک برای محور Y است. همانند پایه VRx، ولتاژ آنالوگ متناسب با موقعیت محور Y تولید میشود و با استفاده از تابع analogRead() در آردوینو قابل خواندن است.
- SW (خروجی دیجیتال دکمهها): این پایه خروجی دیجیتال مربوط به دکمههای جوی استیک است. وقتی دکمهها فشار داده میشوند، این پایه یک سیگنال دیجیتالی (HIGH یا LOW) تولید میکند که با استفاده از تابع digitalRead() در آردوینو قابل خواندن است.
کد آردوینو کنترل موس کامپیوتر با جوی استیک
این کد یک برنامه برای کنترل ماوس کامپیوتر با استفاده از یک جوی استیک آنالوگ است. کد را کپی و در نرم افزار آردوینو اجرا کنید.
#include <Mouse.h> const int mouseButton = 3; // کلیک چپ موس const int rightMouseButton = 4; //کلیک راست موس const int xAxis = A0; // xجوی استیک محور const int yAxis = A1; // yجوی استیک محور int range = 12; // محدوده مقدار حرکت موس int responseDelay = 5; // سرعت حرکت int threshold = range / 4; // مقدار آستانه حرکت int center = range / 2; boolean mouseIsActive = true; void setup () { //سوئیچ متصل به جوی استیک (کلیک چب) و همچنین سوئیچی که به منظور کلیک راست استفاده کرده اایم را در وضعیت پول آپ قرار میدهیم pinMode (mouseButton, 0); digitalWrite (mouseButton, 1); pinMode (rightMouseButton, 0); digitalWrite (rightMouseButton, 1); // موس را فعال میکنیم Mouse.begin (); } void loop () { /* که در قسمت پایین برنامه تعریف کرده ایم مقدار حرکت موس را حول محور ها تعیین میکنیم readAxis با استفاده از تابع این مقدار بین ۶ الی -۶ می باشد. */ int xReading = readAxis (A0); int yReading = readAxis (A1); yReading *= -1; // در صورت فعال بودن موس ، موس طبق مقادیر مشخص به حرکت در می آید if ( mouseIsActive ) { Mouse.move (xReading, yReading, 0); } Serial.println (xReading); //,وضعیت کلیک چپ را بررسی میکنیم که آیا فشار داده شده است یا خیر if ( digitalRead (mouseButton) == LOW ) { // اگر فشرده شده باشد ، فرمان کلیک کردن را صادر میکند if ( !Mouse.isPressed (MOUSE_LEFT) ) { Mouse.press (MOUSE_LEFT); } } else { //در صورتی که کلیک چپ فشرده نشدده باشد ، فرمان رهایی کلیک چپ را صادر میکند if ( Mouse.isPressed (MOUSE_LEFT) ) { Mouse.release (MOUSE_LEFT); } } // کد های کلیک چپ همانند کد های کلیک راست می باشد if ( digitalRead (rightMouseButton) == LOW ) { if ( !Mouse.isPressed (MOUSE_RIGHT) ) { Mouse.press (MOUSE_RIGHT); } } else { if ( Mouse.isPressed (MOUSE_RIGHT) ) { Mouse.release (MOUSE_RIGHT); } } delay (responseDelay); } /* این تابه مقدار انالوگ جوک استیک را میخواند و سپس آن را به مقادیری بین ۶ الی -۶ نسبت میدهد */ int readAxis (int thisAxis) { // مقدر آنالوگ را دریافت میکنیم int reading = analogRead (thisAxis); // مقدار آنالوگ پین را که بینن مقدار ۰ الی ۱۰۲۳ می باشد به مقدار ۰ الی ۱۲ نسبت میدهد reading = map (reading, 0, 1023, 0, range); int distance = reading - center; if (abs(distance) < threshold) { distance = 0; } // return the distance for this axis: return distance; }
بررسی کتابخانه #include <Mouse.h>
تحلیل کد آردوینو
این کد یک برنامه برای کنترل ماوس کامپیوتر با استفاده از یک جوی استیک آنالوگ است. اجزای اصلی برنامه عبارتند از:
- تعریف و ابتدایی کردن متغیرها و ثابتها:mouseButton: پین مربوط به کلیک چپ موس.
rightMouseButton: پین مربوط به کلیک راست موس.
xAxis: پین مربوط به محور X جوی استیک آنالوگ.
yAxis: پین مربوط به محور Y جوی استیک آنالوگ.
range: محدوده حرکت موس، یعنی حداکثر مقداری که موس میتواند در هر جهت حرکت کند.
responseDelay: سرعت حرکت موس.
threshold: مقدار آستانه حرکت، اگر مقدار حرکت کمتر از این آستانه باشد، موس تحرک نمیکند.
center: مرکز محور X و Y در جوی استیک، میانگین مقدار حرکت در اطراف این مرکز تشخیص داده میشود.
mouseIsActive: متغیر منطقی برای فعال بودن یا غیرفعال بودن کنترل موس.
- setup():
در این قسمت، پینهای مربوط به کلیدهای جوی استیک (کلیک چپ و راست) به عنوان پینهای ورودی تعریف و در حالت HIGH قرار داده میشوند.
ماوس آغاز به کار میکند (Mouse.begin ()).
- loop():
ابتدا مقادیر خوانده شده از جوی استیک در محورهای X و Y آنالوگ در متغیرهای xReading و yReading ذخیره میشوند. توجه داشته باشید که محور Y جوی استیک در این برنامه برعکس خوانده میشود (با تکرار yReading *= -1).
اگر موس فعال باشد (mouseIsActive برابر با TRUE)، موس با استفاده از مقادیر xReading و yReading حرکت میکند.
- سپس وضعیت کلید کلیک چپ موس بررسی میشود:
اگر کلید کلیک چپ فشرده شود (مقدار دیجیتالی پین برابر با LOW باشد) و در حالتی که موس کلیک چپ فشرده نشده باشد (!Mouse.isPressed(MOUSE_LEFT)، یعنی کلیک چپ در حالت فشرده نشده قبلی نبوده باشد)، دستور کلیک چپ را صادر میکند (با Mouse.press(MOUSE_LEFT)).
اگر کلید کلیک چپ فشرده نشود (مقدار دیجیتالی پین برابر با HIGH باشد) و در حالتی که موس کلیک چپ فشرده بوده باشد (Mouse.isPressed(MOUSE_LEFT)، یعنی کلیک چپ در حالت فشرده بوده قبلی بوده باشد)، دستور رهایی کلیک چپ را صادر میکند (با Mouse.release(MOUSE_LEFT)).
نحوه کنترل کلیک راست موس نیز مشابه کلیک چپ است.در آخر دستور delay(responseDelay) برای تاخیر به اندازه responseDelay میلیثانیه بین حرکات موس استفاده میشود.
سخت افزار مورد نیاز
آردوینو سریهای DUE , LEONARDO , MICRO
یک عدد تاچ سوئیج
جمع بندی
نصب کتابخانه “Mouse.h”: در IDE آردوینو، کتابخانه “Mouse.h” به صورت پیشفرض نصب شده است. اگر این کتابخانه نصب نیست، از قسمت “Sketch” > “Include Library” > “Mouse” آن را نصب کنید. با استفاده از کدگذاری آردوینو، مقادیر آنالوگ جوی استیک را با تابع analogRead() خوانده و برای موس تبدیل کنید. سپس با استفاده از توابع موجود در کتابخانه “Mouse.h”، موس را حرکت دهید و کلیکهای مورد نیاز را ایجاد کنید. به عنوان مثال، با استفاده از Mouse.move() میتوانید موس را در هر جهت حرکت دهید، و با استفاده از Mouse.press() و Mouse.release() میتوانید کلیکهای چپ و راست موس را تعیین کنید.برنامه را به برد آردوینو آپلود کنید و ماژول جوی استیک را با آردوینو وصل کنید. حالا ماوس را میتوانید با حرکات جوی استیک کنترل کنید و کلیکهای موس را با دکمههای جوی استیک تعیین کنید.با انجام این مراحل، شما میتوانید ماوس کامپیوتر خود را با جوی استیک PS2 و آردوینو کنترل کنید و در پروژههای خود از این امکان استفاده کنید.
[…] آموزش کنترل موس کامپیوتر با جوک استیک با استفاده از آرد… […]
با سلام
برای اردوینو due که با ولتاژ ۳٫۳ کار میکنه باید چیکار کرد ؟
ممنون از آموزش های خوبتون
سلام من برنامه رو کپی کردم با خطای زیر مواجه شدم
مشکلش کجاست
Arduino: 1.6.12 (Windows 7), Board: “Arduino/Genuino Micro”
C:\Users\Sharif\AppData\Local\Temp\arduino_modified_sketch_621412\mouse.ino: In function ‘void setup()’:
mouse:22: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
Mouse.begin ();
^
C:\Users\Sharif\AppData\Local\Temp\arduino_modified_sketch_621412\mouse.ino: In function ‘void loop()’:
mouse:41: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
Mouse.move (xReading, yReading, 0);
^
mouse:50: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( !Mouse.isPressed (MOUSE_LEFT) )
^
mouse:50: error: ‘MOUSE_LEFT’ was not declared in this scope
if ( !Mouse.isPressed (MOUSE_LEFT) )
^
mouse:58: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( Mouse.isPressed (MOUSE_LEFT) )
^
mouse:58: error: ‘MOUSE_LEFT’ was not declared in this scope
if ( Mouse.isPressed (MOUSE_LEFT) )
^
mouse:67: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( !Mouse.isPressed (MOUSE_RIGHT) )
^
mouse:67: error: ‘MOUSE_RIGHT’ was not declared in this scope
if ( !Mouse.isPressed (MOUSE_RIGHT) )
^
mouse:73: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( Mouse.isPressed (MOUSE_RIGHT) )
^
mouse:73: error: ‘MOUSE_RIGHT’ was not declared in this scope
if ( Mouse.isPressed (MOUSE_RIGHT) )
^
C:\Users\Sharif\AppData\Local\Temp\arduino_modified_sketch_621412\mouse.ino: In function ‘int readAxis(int)’:
mouse:96: error: ‘lt’ was not declared in this scope
if ( abs (distance) < threshold )
^
mouse:96: error: expected ‘)’ before ‘;’ token
if ( abs (distance) < threshold )
^
mouse:96: error: expected ‘;’ before ‘)’ token
if ( abs (distance) < threshold )
^
exit status 1
‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
با سلام
کدها بررسی و اصلاح شد.
مجددا تست و نتیجه را اعلام کنید.
سلام برنامه خطا داره لطفا راهنمایی کنید
Arduino: 1.8.9 (Windows 7), Board: “Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)”
C:\Users\Administrator\Documents\Arduino\jostek\jostek.ino: In function ‘void setup()’:
jostek:23:3: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
Mouse.begin ();
^
C:\Users\Administrator\Documents\Arduino\jostek\jostek.ino: In function ‘void loop()’:
jostek:42:5: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
Mouse.move (xReading, yReading, 0);
^
jostek:51:11: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( !Mouse.isPressed (MOUSE_LEFT) )
^
jostek:51:28: error: ‘MOUSE_LEFT’ was not declared in this scope
if ( !Mouse.isPressed (MOUSE_LEFT) )
^
jostek:59:10: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( Mouse.isPressed (MOUSE_LEFT) )
^
jostek:59:27: error: ‘MOUSE_LEFT’ was not declared in this scope
if ( Mouse.isPressed (MOUSE_LEFT) )
^
jostek:68:11: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( !Mouse.isPressed (MOUSE_RIGHT) )
^
jostek:68:28: error: ‘MOUSE_RIGHT’ was not declared in this scope
if ( !Mouse.isPressed (MOUSE_RIGHT) )
Multiple libraries were found for “Mouse.h”
^
jostek:74:10: error: ‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
if ( Mouse.isPressed (MOUSE_RIGHT) )
^
jostek:74:27: error: ‘MOUSE_RIGHT’ was not declared in this scope
Used: C:\Program Files\Arduino\libraries\Mouse
if ( Mouse.isPressed (MOUSE_RIGHT) )
Not used: C:\Users\Administrator\Documents\Arduino\libraries\Mouse-1.0.1
^
Not used: C:\Users\Administrator\Documents\Arduino\libraries\Mouse-1.0.0
exit status 1
‘Mouse’ not found. Does your sketch include the line ‘#include ‘?
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
با سلام
تمامی ارورها مربوط به کتابخانه است. کتابخانه های مورد نیاز را ضمیمه شده است؟
سلام
در این پروژه ای که آموزش دادید، اگر من بخواهم بجای استفاده از جوی استیک، از ولوم روتاری استفاده کنم، امکان پذیر هست؟
یعنی برای حرکت موس به چپ و راست از یک ولوم روتاری استفاده کنم؛ و برای حرکت موس به بالا و پایین از یک ولوم روتاری دیگر استفاده کنم.
با سلام
بله امکان پذیر است ولی به این آموزش مرتبط نیست.
آیا امکانش هست مثل این آموزشی که برای جوی استیک قرار دادید، برای ساخت همچین چیزی که عرض کردم، آموزش بزارید؟
یعنی با استفاده از ۲ عدد ولوم روتاری حرکت موس را کنترل کنیم.
البته اگر بشود اسکرول موس را هم با یک ولوم روتاری دیگر کنترل کرد، عالی میشه.
با تشکر از شما.
با سلام
در حال حاضر چنین آموزشی در سایت منتشر نشده است.
بررسی و در صورت امکان منتشر خواهد شد.
سلام
دوستانی که با خطا هایی از جانب کتابخانه موس یا توابعش روبرو شدن ، دلیلش اینه که مشکل از اردوینوتون هست ، منم این مشکل رو داشتم و بعد از کلی گشتن توی سایت اردوینو و سایت های خارجی دیگه متوجه این مشکل شدم . این کتابخانه و کتابخانه کیبورد ، فقط روی پردازنده هایی مثل ATMEGA32U6 یا ATMEGA32U4 کار میکنن ، یعنی پردازنده های اردوینو میکرو یا لئوناردو . یعنی برای این کار باید یکی از این اردوینو هارو داشته باشید و عملا با اونو کار نمیکنه (اردوینو منم مگا بود)
امیدوارم براتون مفید بوده باشه
سپاس از همراهی شما کاربر گرامی
من اومدم دنبال این مشکل که کامنت شما رو دیدم ممنون بابت راهنمای