גיבור הסיפור שלנו הוא שוב בקר ה- Wii Nunchuk. ברגע המתכנת
טוד א. קורט כתב ספרייה עבור
ארדואינוומאפשרים לך לעבוד איתו, חברים החלו להמציא מגוון רחב של יישומים עבורו. או שנשלט על צעצוע המסך הקסמי, או שהמסוק הווירטואלי במשחק עבור MSX ... ובכן, מחבר ה- Instructables תחת הכינוי Kriegwesen הבין כיצד להשתמש בבקר כזה כמו עכבר מחשב רגיל עם ממשק USB. זה כמו כדור עוקב - אין צורך בשטיח. לא, זה עדיף על כדור עקיבה - גם אינך צריך שולחן.
בדרך כלל משתמשים במחברים מאולתרים לחיבור הארדואינו לנונצ'וק. המאסטר מחליט להסתדר בלי אחת, לפתוח את התיק ולהציב שם איזה שיבוט קטן מאוד של ארדואינו. אבל אין לו מברג עם עוקץ של חתך משולש. המאסטר מצווה זאת, אך לוקח זמן רב מדי לחכות. שום דבר, שימושי לפרויקטים אחרים. כאן הוא פותח את הכבל ושולף ממנו ארבעה מוליכים:
עבור
תוצרת בית כל לוח תואם Arduino שיכול לחקות התקני HID USB, כמו גם סיכות המיועדות במיוחד לקווי SDA ו- SCL בממשק I, מתאים
2ג. לוח ארדואינו לאונרדו מתאים לשני הקריטריונים. למוליכים בכבל הנונצ'וק בדרך כלל קידוד הצבעים הבא: לבן - נפוץ, אדום - פלוס כוח (ספק נכון 3.3 וולט, אך מביקורות, ומ -5 וולט כלום לא מצליח), ירוק - SDA, צהוב - SCL . אבל זה קורה גם שהצבעים אינם סטנדרטיים, ולכן עדיף לקחת את פיסת הכבל ההיא, שאחרי הנשנוש, שנשארה עם המחבר, וצלצלה בהתאם לפינה.
בשילוב כל מה שתואר לעיל, המאסטר כותב סקיצה:
// עכבר Wiichuck
// בריאן קרוקוסקי
// אפריל 2012
// אדום- + 5, לבן-ג'נד, ירוק-סאדה, יהלול-קלק
# כלול
# כלול "nunchuck_funcs.h"
int loop_cnt = 0;
// פרמטרים לקריאת הג'ויסטיק:
טווח int = 40; // טווח פלט של תנועת X או Y
סף int = טווח / 10; // סף מנוחה
מרכז int = טווח / 2; // ערך מיקום מנוחה
עכבר בוליאניIsActive = שקר; // האם לשלוט בעכבר או לא
int lastSwitchState = LOW; // מצב מתג קודם
הגדרת ביטול () {
// חניכה ל- Wiichuck
nunchuck_init ();
// השתלט על העכבר:
Mouse.begin ();
Serial.begin (9600);
}
לולאת חלל () {
אם (loop_cnt> 10) {// כל 10 msecs מקבלים נתונים חדשים
loop_cnt = 0;
nunchuck_get_data ();
// בקרת לחיצה ימנית ושמאלה
int leftState = nunchuck_cbutton ();
אם (leftState) Mouse.press (MOUSE_LEFT); עוד עכבר. לשחרר (MOUSE_LEFT);
int rightState = nunchuck_zbutton ();
אם (מימין) עכבר. לחץ (MOUSE_RIGHT); עוד עכבר. לשחרר (MOUSE_RIGHT);
// קרא את ציר ה- x
int xReading = nunchuck_joyx (); // קורא לספריית nunchuck_funcs לקריאת ציר x
xReading = מפה (xReading, 38, 232, 0, טווח); // 38 ו- 232 נקבע באופן שרירותי באמצעות ניסויים, מפות ל- 0 וטווח מוגדר מראש
int xDistance = xReading - מרכז;
אם (abs (xDistance) <סף) // אם הערך המוחלט של xDistance הוא פחות מסף מוגדר מראש ....
{
xDistance = 0;
}
// קרא את ציר ה- y
int yReading = nunchuck_joyy (); // קורא לספריית nunchuck_funcs לקריאת ציר Y
yReading = מפה (yReading, 38, 232, 0, טווח); // 38 ו- 232 נקבע באופן שרירותי באמצעות ניסויים, מפות ל- 0 וטווח מוגדר מראש
int yDistance = y קריאה - מרכז;
אם (abs (yDistance) <סף) // אם הערך המוחלט של yDistance הוא פחות מסף מוגדר מראש ....
{
yDistance = 0;
}
// להזיז את העכבר אם הקריאות היו מעל 0
אם ((xDistance! = 0) || (yDistance! = 0)) {
Mouse.move (xDistance, -yDistance, 0); // -Distance מבטיחה ג'ויסטיק בסגנון הפוך
}
}
nunchuck_print_data (); // מדפיס נתונים Nunchuck לצג סדרתי למטרות ניפוי באגים
loop_cnt ++;
עיכוב (1);
}
התוכנית זקוקה לקובץ כותרות שנקבע
כאן. לאחר הורדתו, שנה את שם זה ל- nunchuck_funcs.h
המאסטר מכניס את כל הברזל לקופסה שנראית כמו ארגז הלחמה, ומתקן את הכבלים בפנים בעזרת סוגרו. אתה יכול לקחת תיבת צומת אמיתית, ולתקן את הכבלים בדרך אחרת.
בגירסה הנוכחית של הקושחה, הכל עובד ביציבות, אך פונקציית הגלילה אינה מיושמת. בעתיד מתכנן המאסטר לוודא שכאשר לוחצים על אחד מהכפתורים, גלילה מתרחשת בהתאם לאותות ממד תאוצה Nunchuk.