יום שבת, 5 באוקטובר 2013

Arduino LCD Guide



האמת שיש נושא שעדיין לא סגור כמו שצריך, במאמר Arduino And .Net השתמשתי במסך שמגיע כחלק מ Shield, אבל עדיין לא הסברתי כיצד לחבר מסך LCD ישירות ל Arduino והגיע הזמן לעשות זאת, יש שפע של מסכים מסוגים שונים בשוק את שלי מצאתי כמו תמיד ב DX במחיר של 4 דולר.


דרישות:

  • Arduino Uno
  • (LCD Screen (16X2
  • Potentiometer
  • BreadBoard
  • Wires




Liquid-Crystal Display

רוב מסכי ה LCD מגיעים עם 16 פינים אבל לא צריך להשתמש בכולם, על מנת לחבר את המסך ל Arduino נצטרך רק 9 פינים את חלקם נעביר לספרייה LiquidCrystal שמגיעה עם הסביבה של Arduino ונחבר פוטנציומטר על מנת שנשלוט בחוזק התאורה האחורית (K, A).

6 כניסות דיגיטליות, GND ו 5V

מבנה סופי

הטקסט תקין למרות שבתמונה נראה שלא...



קוד

בשביל שלא יהיה משעמם, הקוד מכניס את הטקסט משמאל לימין, כל הודעה לשורה אחרת במסך.

#include <LiquidCrystal.h>

LiquidCrystal lcd(7,6,5,4,3,2);
char screen[16];
char message1[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ','P','r','o','x','y','T','y','p','e',' ','B','l','o','g'};
char message2[] = {' ',' ',' ',' ',' ',' ',' ',' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ','P','r','o','x','y','T','y','p','e','.','b','l','o','g','s','p','o','t','.','c','o','m'};

void setup()
{
      //set the screen chars and rows
     lcd.begin(16,2 );
}

void loop()
{

    //send the first message to buffer
    sendMsg1();
    delay(100);
    
    cleanArray();
    
    //send the second message to buffer
    sendMsg2();
   delay(100);
    cleanArray();
}

void sendMsg1()
{
   int msgsize = sizeof(message1) / sizeof(char);
  for(int i = msgsize; i > 0;i--)
  {
      pushArray(message1[i],0);
       delay(200);
  }  
}

void sendMsg2()
{
   int msgsize = sizeof(message2) / sizeof(char);
  for(int i = msgsize; i >0;i--)
  {
      pushArray(message2[i],1);
       delay(200);
  }  
}


void pushArray(char c, int line)
{

  lcd.clear();
  lcd.setCursor(0,line);
  char tmp = screen[0];
  screen[0] = c;
  
  for (int i = 1; i < 16; i++)
     {
                char locker;

                    locker = screen[i];
                screen[i] = tmp;

                if (i == 16)
                    break;

                tmp = locker; 
       }
       
         lcd.print(screen);
}

void cleanArray()
{
    //clear screen buffer
    for(int i=0; i < 17; i++)
    {
      screen[i] = '\0';
    }
}


סרט הדגמה




סיכום 

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

בהצלחה...

2 comments:

  1. היי,
    יש לי מסך שיש לו רק שבעה פינים. מה אני יכול לעשות?

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

      מחק