כרטיסי ארדואינו שיש בהם את בקר ATmega32u4 יכולים לדמות עכבר ומקלדת וזה מאפשר לארדואינו להתממשק עם המחשב ולבצע פעולות כמו כתיבת טקסט ותזוזה של העכבר. לוחות שתומכים בכך הם:
- ארדואינו לאונרדו
- ארדואינו מיקרו
- ארדואינו פרו מיקרו של ספארקפאן
- אדהפרוט feather
- ארדואינו זירו (עובד עם בקר ARM)
- ארדואינו DUE (בקר ARM)
הפעולות שהארדואינו יכול לבצע הם פרוגרמטיות ודבר זה נותן כל מיני יתרונות, אפשר למשל לכבות את המחשב בשעות מסוימות אפשר להקליד טקסט לקובץ כשלוחצים על כפתור בארדואינו אפשר לפתוח ולסגור תוכנות על המחשב וגם להזיז את סמן העכבר והכל דרך תוכנה.
כל לחיצה על מקש במקלדת היא אפשרית כולל לחיצה רצופה על כמה כפתורים וככה אפשר לדמות קיצורי דרך במקלדת כמו למשל פתיחת חלון הפקודות. בסופו של דבר האפשרות הזאת נותנת לשלוט שליטה מלאה במחשב דרך הארדואינו.
בשביל לבדוק את כל התכונות האלה נשתמש בארדואינו לאונרדו.
דימוי מקלדת
קודם כל צריך להזהיר שפונקציות מסוימות משתקות את העכבר והמקלדת של המחשב אז צריך להזהר לא לתקוע אותו. עדיף להדפיס קודם למסך ולראות מה קורה וגם אחרי זה לנסות קודם כל את הדברים בפונקציית setup ולא ב- loop. כל עוד הפקודות בספרייה רצות יהיה קשה לתכנת את הלוח אז עדיף להפעיל פונקציה לזמן קצר ואז לצאת ממנה.
כדי לדמות מקלדת בלאונרדו כל מה שצריך זה את השורות הבאות:
#include <Keyboard.h> Keyboard.begin();
עכשיו נעבור על כל הפונקציות בספריית Keyboard
- ()Keyboard.begin – מתחילה הדמייה של מקלדת
- ()Keyboard.end – מסיימת הדמייה של מקלדת
- ()Keyboard.press – מדמה לחיצה רציפה על מקש
- ()Keyboard.print – מדפיסה את הטקסט שמכניסים
- ()Keyboard.println – מדפיסה את הטקסט ולוחצת על Enter בסוף(לא עובד אצלי)
- ()Keyboard.release – שחרר לחיצה ממקש
- ()Keyboard.releaseAll – שחרר לחיצה מכל המקשים
- ()Keyboard.write – לחיצה ועזיבה של מקש. ככה לחצתי על Enter
בדוגמה הבאה אני בונה שתי פונקציות שאחת מהן פותחת את חלון הפקודות בלינוקס וכותבת אליו פקודה, והשנייה פותחת דפדפן כרום ופותחת אתר אינטרנט שמכניסים לתוכה. אלה שתי הפונקציות:
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
יש עוד מלא דברים שאפשר לעשות עם הארדואינו כמקלדת ועכבר והם מוגבלים רק על ידי הדמיון. הנה דוגמה של פתיחת סביבת הפיתוח של ארדואינו ע”י לחיצה על כפתור ושיטוט עם הג’ויסטיק והכל נעשה דרך הארדואינו.