آردوینو مدارهای الکترونیک پروژه های آردوینو

کنترل موس کامپیوتر با جوی استیک با استفاده از برد آردوینو Arduino

آموزش کنترل کامپیوتر با استفاده از جوی استیک به وسیله آردوینو LEONARDO
نوشته شده توسط علیرضا قربانی

به نام خدا

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

با استفاده از کتابخانه موس شما میتوانید موس کامیپوترتان را  توسط آردوینو های LEONARDO , DUE و MICRO  کنترل کنید.

در این پروژه با استفاده از یک جوی استیک دو محوره  و یک تاچ سوئیج یک موس واقعی را شبیه سازی میکنیم.حرکت نشان گر موس به مقدار های آنالوگ تولید شده توسط جوی استیک بستگی دارد.با استفاده از دو پین آنالوگ ، مقادیری بین ۰ الی ۱۰۲۳ دریافت میکنیم که با عملیاتی که تابع  readAxis  وظیفه انجام آن را دارد اعداد را به بازه -۶ الی ۶تبدیل میکنیم. با استفاده از سوئیچی که بر روی جوی استیک قرار دارد عملیات کلیک چپ و با استفاده از سوئیچی که بر روی برد برد قرار گرفته عملیات کلیک راست انجام می شود.

 

 

سخت افزار مورد نیاز

آردوینو سری‌های DUE , LEONARDO , MICRO

جوی استیک دو محوره

یک عدد تاچ سوئیج

 

کد های برنامه

#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;
}

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

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

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

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

۹ دیدگاه

  • با سلام
    برای اردوینو 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.

        • با سلام
          تمامی ارورها مربوط به کتابخانه است. کتابخانه های مورد نیاز را ضمیمه شده است؟

  • سلام
    در این پروژه ای که آموزش دادید، اگر من بخواهم بجای استفاده از جوی استیک، از ولوم روتاری استفاده کنم، امکان پذیر هست؟
    یعنی برای حرکت موس به چپ و راست از یک ولوم روتاری استفاده کنم؛ و برای حرکت موس به بالا و پایین از یک ولوم روتاری دیگر استفاده کنم.

      • آیا امکانش هست مثل این آموزشی که برای جوی استیک قرار دادید، برای ساخت همچین چیزی که عرض کردم، آموزش بزارید؟

        یعنی با استفاده از ۲ عدد ولوم روتاری حرکت موس را کنترل کنیم.
        البته اگر بشود اسکرول موس را هم با یک ولوم روتاری دیگر کنترل کرد، عالی میشه.

        با تشکر از شما.

        • با سلام
          در حال حاضر چنین آموزشی در سایت منتشر نشده است.
          بررسی و در صورت امکان منتشر خواهد شد.