ארדואינו כעכבר ומקלדת

ארדואינו לאונרדו ומגן ג'ויסטיק

כרטיסי ארדואינו שיש בהם את בקר ATmega32u4 יכולים לדמות עכבר ומקלדת וזה מאפשר לארדואינו להתממשק עם המחשב ולבצע פעולות כמו כתיבת טקסט ותזוזה של העכבר. לוחות שתומכים בכך הם:

  • ארדואינו לאונרדו
  • ארדואינו מיקרו
  • ארדואינו פרו מיקרו של ספארקפאן
  • אדהפרוט feather
  • ארדואינו זירו (עובד עם בקר ARM)
  • ארדואינו DUE (בקר ARM)

ארדואינו לאונרדו

ארדואינו מיקרו

הפעולות שהארדואינו יכול לבצע הם פרוגרמטיות ודבר זה נותן כל מיני יתרונות, אפשר למשל לכבות את המחשב בשעות מסוימות אפשר להקליד טקסט לקובץ כשלוחצים על כפתור בארדואינו אפשר לפתוח ולסגור תוכנות על המחשב וגם להזיז את סמן העכבר והכל דרך תוכנה.

כל לחיצה על מקש  במקלדת היא אפשרית כולל לחיצה רצופה על כמה כפתורים וככה אפשר לדמות קיצורי דרך במקלדת כמו למשל פתיחת חלון הפקודות. בסופו של דבר האפשרות הזאת נותנת לשלוט שליטה מלאה במחשב דרך הארדואינו.

בשביל לבדוק את כל התכונות האלה נשתמש בארדואינו לאונרדו.

דימוי מקלדת

קודם כל צריך להזהיר שפונקציות מסוימות משתקות את העכבר והמקלדת של המחשב אז צריך להזהר לא לתקוע אותו. עדיף להדפיס קודם למסך ולראות מה קורה וגם אחרי זה לנסות קודם כל את הדברים בפונקציית setup ולא ב- loop. כל עוד הפקודות בספרייה רצות יהיה קשה לתכנת את הלוח אז עדיף להפעיל פונקציה לזמן קצר ואז לצאת ממנה.

כדי לדמות מקלדת בלאונרדו כל מה שצריך זה את השורות הבאות:

 

#include <Keyboard.h>

Keyboard.begin();

עכשיו נעבור על כל הפונקציות בספריית Keyboard

בדוגמה הבאה אני בונה שתי פונקציות שאחת מהן פותחת את חלון הפקודות בלינוקס וכותבת אליו פקודה, והשנייה פותחת דפדפן כרום ופותחת אתר אינטרנט שמכניסים לתוכה. אלה שתי הפונקציות:

void keyboardCommand(String command){
 Keyboard.begin(); // start emulation
 delay(1000); // give 1 second to initialize
 Keyboard.press(KEY_LEFT_CTRL); // ctrl+alt+t open terminal in linux
 Keyboard.press(KEY_LEFT_ALT);
 Keyboard.press('t');
 Keyboard.releaseAll(); // release keys
 delay(1000);
 Keyboard.print(command); // enter command to terminal
 Keyboard.write(KEY_RETURN); // press enter
 Keyboard.end(); // end emulation
}

void website(String url ){
 Keyboard.press(KEY_LEFT_CTRL); //in chrome ctr+l go to url window
 Keyboard.press('l');
 Keyboard.releaseAll();
 Keyboard.print(url); // enter url
 Keyboard.write(KEY_RETURN); // press enter
}

אחרי שכתבנו את הפונקציות אפשר להשתמש בהן תוך כדי הקוד אם לוחצים על כפתור או בכל דרך אחרת. רק כדי לבדוק שהן עובדות אפשר להעלות קוד כזה:

#include <Keyboard.h>

void setup() {
 keyboardCommand("google-chrome");
 delay(1000);
 website("arduino.cc");
}
 
void loop() {

}

void keyboardCommand(String command){
 Keyboard.begin(); // start emulation
 delay(1000); // give 1 second to initialize
 Keyboard.press(KEY_LEFT_CTRL); // ctrl+alt+t open terminal in linux
 Keyboard.press(KEY_LEFT_ALT);
 Keyboard.press('t');
 Keyboard.releaseAll(); // release keys
 delay(1000);
 Keyboard.print(command); // enter command to terminal
 Keyboard.write(KEY_RETURN); // press enter
 Keyboard.end(); // end emulation
}

void website(String url ){
 Keyboard.press(KEY_LEFT_CTRL); //in chrome ctr+l go to url window
 Keyboard.press('l');
 Keyboard.releaseAll();
 Keyboard.print(url); // enter url
 Keyboard.write(KEY_RETURN); // press enter
}

איך שמעלים את הקוד חלון הפקודות פותח את כרום ומכניס את האתר של ארדואינו. פה יש רשימה של כל המקשים המיוחדים שאפשר ללחוץ עליהם כמו alt ו- shift. וכאן יש רשימה של קיצורי דרך בדפדפן כרום.

בווינדוס ctrl+esc אמור לפתוח את התפריט ו- KEY_LEFT_GUI אמור לדמות לחיצה על מקש חלונות.

מגן כפתורים וג'ויסטיק

מרחיב של ג'ויסטיק וכפתורים זה בדיוק מה שאנחנו רוצים כדי לדמות עכבר ומקלדת. אמנם יש רק 7 כפתורים אבל גם עם זה אפשר לעשות משהו.

 

ארדואינו לאונרדו ומגן ג'ויסטיק

 

הכפתור העליון A  מחובר לפין 2, B מחובר לפין 3 וכן הלאה…. יש שני כפתורים שחורים קטנים וגם הג'ויסטיק עצמו יכול להלחץ ככפתור. ציר X בג'ויסטיק מחובר לפין אנלוגי A0 וציר Y מחובר לפין A1.

כדי לדמות עכבר בעזרת הג'ויסטיק צריך לקחת את הערכים מהפינים האנלוגיים ולהזיז את העכבר בהתאם על המסך. כדי להזיז את סמן העכבר על המסך נשתמש בפונקציה Mouse.move שמקבלת שלושה ערכים – ערך x ערך y וערך גלילה.

הדוגמה באתר של ארדואינו נראית מרשימה מאוד, אבל יכול להיות שאני עייף כרגע או שפשוט לא הבנתי לגמרי את הקוד אבל נראה לי שאפשר לכתוב קוד פשוט יותר בתור התחלה. הג'ויסטיק שנמצא על מגן ההרחבה הוא קבוע על ערכים של 512 בציר X ו- Y אז אפשר לכתוב התנייה אם המספר עובר את סף 600:

#include <Mouse.h>

void setup() {
  Mouse.begin();
}
 
void loop() {
 if(analogRead(A0) > 600){ // move right
   Mouse.move(10,0,0);
   delay(50);
   }
 if(analogRead(A0) < 500){ // move left
   Mouse.move(-10,0,0);
   delay(50);
 }

if(analogRead(A1) > 600){ // move up
  Mouse.move(0,-10,0);
  delay(50);
 }

if(analogRead(A1) < 500){ // move down
  Mouse.move(0,10,0);
  delay(50);
 }
 if(digitalRead(8) == LOW){ // press on joystick to click
   Mouse.click();
 }
 
}

אפשר לשפר את הקוד בכל מיני צורות נגיד לקבוע שלחיצה על כפתור מסוים תעלה או תוריד את התזוזה מ- 10 פיקסלים לערך אחר. ברמת העקרון אלה הפונקציות של העכבר:

  • ()Mouse.begin
  • ()Mouse.click – מדמה לחיצה על העכבר. בשביל לחיצה ימנית מכניסים  (Mouse.click(MOUSE_RIGHT
  • ()Mouse.end
  • ()Mouse.move – ערך x ערך Y וערך גלילה. הערכים יכולים להיות חיוביים או שליליים
  • ()Mouse.press – מחזיק את העכבר לחוץ
  • ()Mouse.release – משחרר לחיצה
  • ()Mouse.isPressed

יש עוד מלא דברים שאפשר לעשות עם הארדואינו כמקלדת ועכבר והם מוגבלים רק על ידי הדמיון. הנה דוגמה של פתיחת סביבת הפיתוח של ארדואינו ע"י לחיצה על כפתור ושיטוט עם הג'ויסטיק והכל נעשה דרך הארדואינו.

 

כתיבת תגובה

האימייל לא יוצג באתר.