כפי שחלקכם כבר יודעים, העבודה ה"ראשית" שלי בשנים האחרונות היא בתרגום מאנגלית ובעריכה, וזה אומר – בין השאר – שאני מחליף כל הזמן בין השפות במקלדת, בעזרת צירוף המקשים Alt+Shift. אפשר היה לחשוב שאחרי שנים ההחלפה הזו תהפוך לטבע שני, אך לעתים קרובות מדי מצאתי את עצמי בכל זאת מקליד בטעות בשפה הלא-נכונה, או סתם מאבד את רצף הכתיבה בגלל ההחלפה הידנית. אתם כבר מריחים את המייקינג, נכון?
הגיע הזמן לנער את האבק משני דברים ששוכבים אצלי בבוידעם כבר הרבה מאד זמן: ה-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" חצי אוטומטית לתמונות בפייסבוק, "חתימות" טקסט ועוד.
היי עידו
תודה על המדריך!
האם תוכל לפרסם גם מדריך לקריאת שפת המקלדת דרך הארדואינו?
ארדואינו לא בנוי לשמש כ-Host להתקני USB. בתיאוריה אולי מישהו הצליח לפתח פתרון אבל לא זכור לי שראיתי כזה דבר. אפשר לחפש תוסף חומרה (בטח יקר יותר מהארדואינו עצמו), מקלדת עתיקה עם חיבור PS/2, או לעבור ללוח חכם יותר כגון Raspberry Pi Zero.
היי עידו ותודה על התשובה
קצת חקרתי את הנושא וראיתי שאפשר לכתוב קוד, למשל בפייתון שישלח את מצב השפה בכל רגע נתון ליציאה הסיראלית שמחוברת לארדואינו.
משם הארדואינו כבר יקח את זה ויתרגם לפעולה.
חסר לי עדיין איך לעשות את הקישור הזה מצד המחשב עצמו. כלומר הקוד שרץ מחשב שולח כל הזמן ל USB. אח"כ לקחת את זה בארדואינו וללעשות עם זה משהו, נראה לי פשוט.
זו כבר שאלה בתכנות "רגיל", ומדריכים לזה בטח לא חסרים ברשת 🙂
אם זה מעניין אותך, בווינדוס יש אפשרות להגדיר בהגדרות המקלדת צירוף מקשים למעבר לשפה ספציפית, לא משנה באיזו שפה היית קודם.תוכל לעשות שתי רגליות- אחת לעברית ואחת לאנגלית
נו, אבל איך עושים את זה? עוד לא הצלחתי למצוא בשום מקום…
על מסך המחשב, ליד איפה שמוצג השעון יש צמד אותיות HE או EN שמציינות באיזו שפה אתה עכשיו. לוחצים עליהן קליק ימני ואז הגדרות. בחלון שנפתח בוחרים בלשונית הגדרות מתקדמות. שם יש אפשרות להגדיר איזה צמד מקשים יחליף שפה, לאיזה יעביר לשפה ספציפית
באיזו מערכת הפעלה? אצלי ב-Windows 10 אין שום "הגדרות מתקדמות".
7… השאלה היא האם ביטלו את זה לגמרי או רק החביאו את זה
גאוני! אגב מה אתה מתרגם?
על רוב הדברים אני לא יכול לדבר בפומבי (הסכמי סודיות וכאלה), אבל אני מתרגם כבר שנים רבות ל-Scientific American (ראה רשימת המתרגמים כאן: http://www.sciam.co.il/%d7%9e%d7%99-%d7%90%d7%a0%d7%97%d7%a0%d7%95/ ), ויש כל מיני לקוחות אחרים, בעיקר בתחומים טכניים אבל לא רק.