פרויקט: פדל להחלפת שפות

כפי שחלקכם כבר יודעים, העבודה ה"ראשית" שלי בשנים האחרונות היא בתרגום מאנגלית ובעריכה, וזה אומר – בין השאר – שאני מחליף כל הזמן בין השפות במקלדת, בעזרת צירוף המקשים Alt+Shift. אפשר היה לחשוב שאחרי שנים ההחלפה הזו תהפוך לטבע שני, אך לעתים קרובות מדי מצאתי את עצמי בכל זאת מקליד בטעות בשפה הלא-נכונה, או סתם מאבד את רצף הכתיבה בגלל ההחלפה הידנית. אתם כבר מריחים את המייקינג, נכון?

חיבור הפדל למחשב באמצעות Digispark
חיבור הפדל למחשב באמצעות Digispark

הגיע הזמן לנער את האבק משני דברים ששוכבים אצלי בבוידעם כבר הרבה מאד זמן: ה-Digispark הלא-לגמרי-שימושי, ופדל לאורגנית (Sustain pedal) שקניתי פעם בזול מסין, ואז דרשתי את הכסף בחזרה כי כשדורכים עליו, ההתקן הארור משמיע "קליק" חזק שממש לא מתחבר בהרמוניה למוזיקה. לכל אחד מהשניים, בפני עצמו, לא היה לי שימוש, אבל לפרויקט הנוכחי הסתבר שהם פשוט זיווג משמיים.

מה זה Sustain pedal

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

באורגניות ופסנתרים חשמליים אין מיתר פיזי שאפשר לעצור עם דמפר, וה"ססטיין פדל" בהם הוא לא יותר מאשר מפסק חשמלי פשוט, שאומר למחשב הפנימי אם המנגן דורך או לא דורך עליו. צורת החיבור המקובלת של הפדל היא עם שקע אוזניות גדול (1/4 אינץ'), אבל בתוך הכבל יש שני חוטים רגילים לגמרי, ואנחנו יכולים לחשוף ולחבר אותם למיקרו-בקר כמו כל מפסק אחר.

ה-Digispark

על המודול הזה, שמכיל בעיקר מיקרו-בקר ATtiny85 עם V-USB צרוב מראש (לניהול תקשורת USB דרך תוכנה), כבר כתבתי בפוסט שבקישור למעלה. כאן אחזור רק על שתי נקודות קריטיות. ראשית, הנה ההוראות להתקנת התוכנה המתאימה בסביבת הפיתוח של ארדואינו. שנית, כשמנצלים את יכולות ה-USB של המודול, נשארים רק שני פינים שבאמת פנויים לגמרי לפלט/קלט: 0 ו-2.

חיבורים וקוד

בתוכנה שלי השתמשתי בלד המובנה (מחובר לפין 1) כדי לתת אינדיקציה ויזואלית למצב המערכת. את פין 2 הגדרתי כפין קלט עם נגד Pull-up פנימי, והלחמתי את החוטים של הפדל ל-GND מצד אחד ולפין 2 מצד שני. כל עוד הפדל במצב רגיל, אין מגע בין שתי הנקודות הללו והפין "רואה" רק את ה-HIGH מה-pull-up. כאשר דורכים על הפדל נוצר קצר בין האדמה לפין 2, ש"רואה" LOW.

הפדל המוכן, ומעליו החיבור המקורי לאורגנית
הפדל המוכן, ומעליו החיבור המקורי לאורגנית

אפרופו, לפדלים כאלה יש שני תקני פעולה: של Casio/Korg ושל Yamaha/Roland. בראשון, מצב ברירת המחדל של הפדל הוא נתק, ובדריכה יש קצר ("Normally Open"); בשני זה בדיוק להפך ("Normally Closed"). בחלק מהפדלים, כמו בדגם שלי, יש מתג בורר לבחירה בין שני התקנים. למטרתנו זה לא כל כך משנה. אני השתמשתי בתקן Casio, אך כדי לעבור ל-Yamaha נדרש רק שינוי זעיר בקוד.

הקוד עצמו, כפי שבוודאי כבר ניחשתם, מבצע Debounce פשוט לפעולת המפסק ואז מחקה מקלדת ששולחת למחשב את צירוף המקשים Alt+Shift להחלפת השפה. כדי לגלות איך עושים את זה, נעזרתי בדוגמה הזו. בעיקרון, מקשים כמו Shift או Ctrl נקראים "Modifiers", ואנחנו שולחים אותם בנוסף למקשים הרגילים.

#define LED_PIN 1
#define SWITCH_PIN 2
#include "DigiKeyboard.h"

byte state = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(SWITCH_PIN, INPUT_PULLUP);
} 

void loop() {

  // Wait for press
  while (digitalRead(SWITCH_PIN)) {
    DigiKeyboard.delay(10);  
  }

  // Debounce
  DigiKeyboard.delay(10); 

  // Wait for release
  while (!digitalRead(SWITCH_PIN)) {
    DigiKeyboard.delay(10);  
  }
  
  // Toggle LED and send key combination
  state = 1 - state;
  digitalWrite(LED_PIN, state);  
  DigiKeyboard.sendKeyStroke(0, 
    MOD_ALT_LEFT | MOD_SHIFT_LEFT);  
  DigiKeyboard.delay(100);  
  
}

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

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

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

 

להרשמה
הודע לי על
11 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

היי עידו
תודה על המדריך!
האם תוכל לפרסם גם מדריך לקריאת שפת המקלדת דרך הארדואינו?

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

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

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

7… השאלה היא האם ביטלו את זה לגמרי או רק החביאו את זה

גאוני! אגב מה אתה מתרגם?