תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
בכל פעם שאני רואה לוח מקשים, הוא מגיע עם הרבה סיכות, זה בזבוז גדול של סיכות הארדואינו שלך, אז האם נוכל להפעיל לוח מקשים עם סיכה אחת ויחידה? התשובה כאן.
שלב 1: כתב חומרים
חוּמרָה:
01 ארדואינו UNO
02 לוחות לחם
01 LCD עם I2C
16 כפתורי לחיצה
נגדים 04 1.5 kΩ
נגדים 04 620 Ω
נגדים 04 220 Ω
נגדים 08 100 Ω
הנגד 01 kΩ
07 חוטי מגשר
תוֹכנָה:
Arduino IDE מותקן במחשב האישי שלך
שלב 2: סכמטי וקיקרוט
כל הרעיון הוא שיש לנו 4*4 מטריצה של כפתורי לחיצה המחוברים אנכית לקרקע על ידי המוביל הימני ואופקית על ידי ההובלה השנייה (להוביל הכפתור) ונגדים של 1.5 kΩ, 620Ω, 220Ω ו- 100Ω, קצותיו של ארבע השורות מחוברות על ידי ארבעה נגדים של 100Ω כפי שמוצג סכמטי.
בכל פעם שאתה לוחץ על כפתור אתה סוגר את המעגל והזרם עובר דרך אחרת ושרשרת נגדים שונה ולכן סיכה A0 מקבלת קריאה אנלוגית שונה עבור כל כפתור לחיצה. כל מה שאתה צריך עכשיו הוא קידוד.
שלב 3: הקוד
#לִכלוֹל
#לִכלוֹל
LiquidCrystal_I2C lcd (0x3f, 20, 4);
int לחצן = A0;
int readvalue;
הגדרת חלל ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (לחצן, INPUT);
lcd.backlight ();
lcd.print ("שלום עולם");
עיכוב (2000);
lcd.clear ();
lcd.print ("לוח מקשים 4*4 סיכה אחת");
עיכוב (2000); }
לולאת חלל ()
{
readvalue = analogRead (לחצן);
Serial.println (readvalue);
if (readvalue == 852) {lcd.clear (); lcd.print ("A");}
אחרת {if (readvalue == 763) {lcd.clear (); lcd.print ("B");}
אחרת {if (readvalue == 685) {lcd.clear (); lcd.print ("C");}
אחרת {if (readvalue == 965) {lcd.clear (); lcd.print ("D");}
אחרת {if (readvalue == 565) {lcd.clear (); lcd.print ("9");}
אחרת {if (readvalue == 614) {lcd.clear (); lcd.print ("6");}
אחרת {if (readvalue == 360) {lcd.clear (); lcd.print ("3");}
אחרת {if (readvalue == 335) {lcd.clear (); lcd.print ("#");}
אחרת {if (readvalue == 396) {lcd.clear (); lcd.print ("8");}
אחרת {if (readvalue == 349) {lcd.clear (); lcd.print ("5");}
אחרת {if (readvalue == 235) {lcd.clear (); lcd.print ("2");}
אחרת {if (readvalue == 279) {lcd.clear (); lcd.print ("0");}
אחרת {if (readvalue == 452) {lcd.clear (); lcd.print ("7");}
אחרת {if (readvalue == 271) {lcd.clear (); lcd.print ("4");}
אחרת {if (readvalue == 170) {lcd.clear (); lcd.print ("1");}
else {if (readvalue == 92) {lcd.clear (); lcd.print ("*");} אחר {}}}}}}}}}}}}}}}}}
שלב 4: תיקון ערכים
כשאתה פותח את המוניטור הסדרתי הוא יראה ערך של 1023, אם תלחץ על כפתור זה ייתן לך קריאה נוספת עליך לקחת את הערכים האלה ולבצע כמה שינויים בקוד
שלב 5: פרויקט לאחר ביקורת וסקירה
אין ספק שכולנו כאן כדי ללמוד ולשתף את הידע שלנו, בזכות כמה הערות שהשאירו כמה אנשים מהקהילה שהיו מאוד מועילים, החלטתי לבצע כמה התאמות ושיפורים בפרויקט שלי:
החומרה:
החלטתי להלחיד את כל הרכיבים ב- PCB כדי להימנע מבעיית החיבור הלא טוב בלוחות הלחם.
הקוד:
חבר המליץ לי להשתמש בתוכנת פריקת תוכנה וזו רק לולאה (לולאה "למשל") כדי לגרום לתוכנית לקחת קצת זמן לבחור קריאה. זה אומר שהיא עושה הרבה קריאות (500 בבחינה שלי) אבל לוקחת רק האחרון.
עבור (i = 1; i <= 500; i ++) {// קח רק את הקריאה האנלוגית ה -500
value = analogRead (Button);} // זה עוזר לקחת קצת זמן ולמנוע קריאות לא טובות
חבר אחר בזכותו יעץ לי להשוות בין "readvalue" למגוון ערכים לא אחד כי "readvalue" דורש הרבה ערכים עבור אותו לחצן לחיצה. ה- "A" למשל נותן קריאה של: 849, 850, 851 852, 853, 854, 855 אז זהו טווח של 7 ערכים: סף (852) ו -3 ערכים שמאלה וימינה. מה שעלינו לעשות כאן הוא להשוות את הערך המוחלט של ההבדל בין "readvalue" ו- "852" ל- "3".
if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}
שלב 6: לאחר עבודות מכירה
שלב 7: רגע האמת
כפי שאתה יכול לראות התוכנית לפעמים מבלבלת כפתורים אבל היא עדיין עובדת, בתיאוריה אין שום דבר רע במעגל אבל הקוד צריך יותר כיול.
שלב 8: הסוף
אני מקווה שאתה אוהב את הפרויקט הזה ואתה מנסה לעשות אותו, יכול להיות שתצליח יותר ממני.
שאל אותי אם יש לך שאלות, השאר הערות ואל תשכח להצביע לי אם אתה אוהב את זה.