قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-11-2019, 07:21 PM المشاركة 17   
افتراضي



الدوال الأخرى لمكتبة LiquidCrystal :
تحتوي مكتبة LiquidCrystal Arduino على العديد من الدوال المدمجة الأخرى التي قد تجدها مفيدة.

الدالة clear() :
تمسح شاشة LCD وتضع المؤشر في الزاوية العلوية اليسرى (الصف الأول والعمود الأول) من الشاشة home .


كود:
#include <LiquidCrystal.h>

// Creates an LCD object. Parameters: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
}

void loop() {
  lcd.clear();
  lcd.print("Monday");
  delay(2000);
 
 lcd.clear();
  lcd.print("13:45");
  delay(2000);
}




الدالة home() :
تضع المؤشر في الزاوية العلوية اليسرى من شاشة LCD. استخدم clear () إذا كنت تريد أيضًا مسح الشاشة.

الدالة cursor() :
تعرض مؤشر LCD: فى شكل شرطة سفلية underscore (خط) في موضع الحرف التالي المراد طباعته.

الدالة noCursor() :
تخفي مؤشر LCD. المثال التالي ينشئ مؤشرًا وامض في نهاية السلسلة الحرفية “cursor()” .


كود:
كود:
#include <LiquidCrystal.h>

// Creates an LCD object. Parameters: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.print("cursor()");
}

void loop() {
  lcd.cursor();
  delay(500);
  lcd.noCursor();
  delay(500);
}




الدلة blink() :
لإنشاء مؤشر LCD على شكل (نمط) كتلة وامضة : مستطيل مصمت وامض في موضع الحرف التالي المراد طباعته.

الدالة noBlink() :
لتعطيل مؤشر كتلة نمط LCD. يعرض المثال التالي المؤشر الوامض لمدة 5 ثوانٍ ثم يعطله لمدة ثانيتين.


كود:
#include <LiquidCrystal.h>

// Creates an LCD object. Parameters: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.print("blink() example");
}

void loop() {
  lcd.blink();
  delay(5000);
  lcd.noBlink();
  delay(2000);
}




الدالة display() :
تعمل هذه الوظيفة على تشغيل شاشة LCD وتعرض أي نص أو مؤشرات cursors تم طباعتها على الشاشة.

الدالة noDisplay() :
تعمل هذه الوظيفة على إيقاف تشغيل أي نص أو مؤشرات مطبوعة على شاشة LCD. لا يتم مسح النص / البيانات من ذاكرة LCD. هذا يعني أنه سيتم عرضها مرة أخرى عندما يتم استدعاء الدالة display() .
المثال التالي ينشىء تأثير النص الوامض.

كود:
#include <LiquidCrystal.h>
// Creates an LCD object. Parameters: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);
void setup() {
  lcd.begin(16, 2);
  lcd.print("Blinking text");
}
void loop() {
  lcd.display();
  delay(2000);
  lcd.noDisplay();
  delay(2000);
}




الدالة write() :
يمكن استخدام هذه الدالة لكتابة حرف character على شاشة LCD. راجع القسم الخاص بإنشاء وعرض الأحرف المخصصة custom characters أدناه لمزيد من المعلومات.

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-11-2019, 09:27 PM المشاركة 18   
افتراضي


الدالة scrollDisplayLeft() :
تقوم بتمرير (زحزحة) محتويات الشاشة (نص ومؤشر) مسافة واحدة إلى اليسار. يمكنك استخدام هذه الدالة في قسم حلقة التكرار الغير منتهية loopللكود مع الدالة delay() ، لإنشاء رسم متحرك للنص.

الدالة scrollDisplayRight() :
تقوم بتمرير محتويات الشاشة (نص ومؤشر) مسافة واحدة إلى اليمين.

كود:
/*
  LiquidCrystal Library - scrollDisplayLeft() and scrollDisplayRight()

 This sketch prints "Hello World!" to the LCD and uses the
 scrollDisplayLeft() and scrollDisplayRight() methods to scroll
 the text.

 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
  delay(1000);
}

void loop() {
  // scroll 13 positions (string length) to the left
  // to move it offscreen left:
  for (int positionCounter = 0; positionCounter < 13; positionCounter++) {
    // scroll one position left:
    lcd.scrollDisplayLeft();
    // wait a bit:
    delay(150);
  }

  // scroll 29 positions (string length + display length) to the right
  // to move it offscreen right:
  for (int positionCounter = 0; positionCounter < 29; positionCounter++) {
    // scroll one position right:
    lcd.scrollDisplayRight();
    // wait a bit:
    delay(150);
  }

  // scroll 16 positions (display length + string length) to the left
  // to move it back to center:
  for (int positionCounter = 0; positionCounter < 16; positionCounter++) {
    // scroll one position left:
    lcd.scrollDisplayLeft();
    // wait a bit:
    delay(150);
  }

  // delay at the end of the full loop:
  delay(1000);

}


الدالة autoscroll() :
تعمل هذه الدالة على التمرير التلقائي لشاشة الكريستال السائل LCD . يؤدي هذا إلى إخراج كل حرف للعرض لدفع الأحرف السابقة عبر مسافة واحدة. إذا كان اتجاه النص الحالي من اليسار إلى اليمين (الافتراضي) ، يتم تمرير الشاشة إلى اليسار ؛ إذا كان الاتجاه الحالي من اليمين إلى اليسار ، يتم تمرير الشاشة إلى اليمين. هذا له تأثير إخراج كل حرف جديد إلى نفس الموقع على شاشة LCD.

الدالة noAutoscroll() :
لإيقاف التمرير التلقائي لشاشة LCD.


كود:
/*
  LiquidCrystal Library - Autoscroll

 This sketch demonstrates the use of the autoscroll()
 and noAutoscroll() functions to make new text scroll or not.

*/

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
}

void loop() {
  // set the cursor to (0,0):
  lcd.setCursor(0, 0);
  // print from 0 to 9:
  for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
  }

  // set the cursor to (16,1):
  lcd.setCursor(16, 1);
  // set the display to automatically scroll:
  lcd.autoscroll();
  // print from 0 to 9:
  for (int thisChar = 0; thisChar < 10; thisChar++) {
    lcd.print(thisChar);
    delay(500);
  }
  // turn off automatic scrolling
  lcd.noAutoscroll();

  // clear screen for the next loop:
  lcd.clear();
}




الدالة leftToRight() :
لضبط اتجاه النص المكتوب على شاشة LCD إلى من اليسار إلى اليمين ، الافتراضي. هذا يعني أن الأحرف اللاحقة المكتوبة على الشاشة سوف تنتقل من اليسار إلى اليمين ، ولكنها لن تؤثر على نص الإخراج السابق.
تؤدي هذه الدالة إلى تدفق النص إلى اليمين من المؤشر ، كما لو كان العرض مضبوطًا على اليسار (بمحازاة اليسار) left-justified (افتراضي).

الدالة rightToLeft() :
لضبط اتجاه النص المكتوب على شاشة LCD إلى من اليمين إلى اليسار (الافتراضي هو من اليسار إلى اليمين). هذا يعني أن الأحرف اللاحقة المكتوبة على الشاشة سوف تنتقل من اليمين إلى اليسار ، ولكنها لن تؤثر على نص الإخراج السابق.
تؤدي هذه الدالة إلى تدفق النص إلى اليسار من المؤشر ، كما لو أن العرض بمحازات اليمين right-justified .



اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 21-11-2019, 10:03 PM المشاركة 19   
افتراضي


كيفية إنشاء وعرض الأحرف المخصصة ؟




معلومات فنية :
تحتوي شاشات LCD المستندة إلى وحدة التحكم Hitachi HD44780 LCD على نوعين من الذاكرة : CGROM و CGRAM (اختصار Character Generator ROM and RAM ) . تنشئ الذاكرة CGROM جميع أنماط الحرف المكون من 5 x 8 dot من أكواد الحرف 8-bit القياسى . يمكن للذاكرة CGRAM إنشاء أنماط الحرف المعرف من قبل المستخدم.
للشاشات 5 x 8 dot ، يمكن للذاكرة CGRAM كتابة ما يصل إلى 8 أحرف مخصصة custom characters وفى النوع 5 x 10 dot تكون 4 أحرف . لمزيد من المعلومات ، انظر الداتا شيت .

الدالة createChar() :
الوصف :

تقوم بإنشاء حرف مخصص (حرف رسومي) لاستخدامه على شاشة LCD. يتم دعم ما يصل إلى ثمانية أحرف من 5 × 8 بكسل (مرقمة من 0 إلى 7). يتم تحديد مظهر كل حرف مخصص بواسطة مصفوفة من ثمانية بايت ، بايت واحد لكل صف. تحدد البتات الخمسة الأدنى أهمية لكل بايت البيكسلات الموجودة في هذا الصف. لعرض حرف مخصص على الشاشة ، استخدم الدالة write() لرقمه .

ملحوظة:
عند الإشارة إلى الحرف المخصص "0" ، إذا لم يكن في متغير ، فأنت بحاجة إلى تحديد نوعة cast على هيئة بايت byte ، وإلا فإن المترجم يعطى خطأ. انظر المثال أدناه.

الصيغة :

كود:
lcd.createChar(num, data)

البارامترات :
lcd : متغير من النوع LiquidCrystal .
num : رقم الحرف المراد إنشاؤه (0-7) .
data : بيانات بكسلات الحرف .

من خلال الدالة createChar() ، من الممكن إنشاء وعرض الأحرف المخصصة على شاشة LCD. يعد هذا مفيدًا بشكل خاص إذا كنت تريد عرض حرف ليس جزءًا من مجموعة أحرف ASCII القياسية.

مثال الأحرف المخصصة مع الاردوينو
المثال التالي لبرنامج يقوم بإنشاء وعرض ثمانية أحرف مخصصة (مرقمة من 0 إلى 7).

كود:
/* Example sketch to create and display custom characters on character LCD with Arduino and LiquidCrystal library. */

#include <LiquidCrystal.h>

// Creates an LCD object. Parameters: (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd = LiquidCrystal(2, 3, 4, 5, 6, 7);

// Make custom characters:
byte Heart[] = {
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000
};

byte Bell[] = {
  B00100,
  B01110,
  B01110,
  B01110,
  B11111,
  B00000,
  B00100,
  B00000
};

byte Alien[] = {
  B11111,
  B10101,
  B11111,
  B11111,
  B01110,
  B01010,
  B11011,
  B00000
};

byte Check[] = {
  B00000,
  B00001,
  B00011,
  B10110,
  B11100,
  B01000,
  B00000,
  B00000
};

byte Speaker[] = {
  B00001,
  B00011,
  B01111,
  B01111,
  B01111,
  B00011,
  B00001,
  B00000
};

byte Sound[] = {
  B00001,
  B00011,
  B00101,
  B01001,
  B01001,
  B01011,
  B11011,
  B11000
};

byte Skull[] = {
  B00000,
  B01110,
  B10101,
  B11011,
  B01110,
  B01110,
  B00000,
  B00000
};

byte Lock[] = {
  B01110,
  B10001,
  B10001,
  B11111,
  B11011,
  B11011,
  B11111,
  B00000
};

void setup() {
  // Specify the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // Create a new characters:
  lcd.createChar(0, Heart);
  lcd.createChar(1, Bell);
  lcd.createChar(2, Alien);
  lcd.createChar(3, Check);
  lcd.createChar(4, Speaker);
  lcd.createChar(5, Sound);
  lcd.createChar(6, Skull);
  lcd.createChar(7, Lock);

  // Clears the LCD screen:
  lcd.clear();

  // Print a message to the lcd:
  lcd.print("Custom Character");
}

void loop() {
  // Print all the custom characters:
  lcd.setCursor(0, 1);
  lcd.write(byte(0));
  lcd.setCursor(2, 1);
  lcd.write(byte(1));
  lcd.setCursor(4, 1);
  lcd.write(byte(2));
  lcd.setCursor(6, 1);
  lcd.write(byte(3));
  lcd.setCursor(8, 1);
  lcd.write(byte(4));
  lcd.setCursor(10, 1);
  lcd.write(byte(5));
  lcd.setCursor(12, 1);
  lcd.write(byte(6));
  lcd.setCursor(14, 1);
  lcd.write(byte(7));
}


يجب أن تشاهد الإخراج التالي على شاشة LCD:




كيف يعمل الكود :
• بعد تضمين المكتبة وإنشاء الكائن LCD ، يتم تعريف مصفوفات الأحرف المخصصة. تتكون كل مصفوفة من 8 بايتات ، بايت واحد لكل صف. في هذا المثال ، يتم إنشاء 8 أحرف مخصصة.

كود:
 // Make custom characters:
byte Heart[] = {
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000
};

عند النظر عن كثب في المصفوفة ، سترى ما يلي. يتكون كل صف من 5 أرقام تقابل 5 بكسل في حرف 5 × 8 نقطة. يعني 0 إيقاف off البكسل و 1 يعني تشغيل on البكسل .
من الممكن تعديل (تحرير) كل صف يدويًا ، لكنني أوصي باستخدام هذه الأداة المرئية على الموقع https://maxpromer.github.io/LCD-Character-Creator/ . يقوم هذا التطبيق تلقائيًا بإنشاء مصفوفة الحرف ويمكنك النقر فوق البكسل لتشغيله أو إيقاف تشغيله.
• في الدالة setup() ، يتم إنشاء الأحرف المخصصة باستخدام الدالة lcd.createChar(num, data) .
الوسيط الأول في هذه الدالة هو رقم الحرف المخصص (0-7) والوسيط الثانى هي مصفوفة الحرف التي أنشأناها.


كود:
// Create a new characters:
  lcd.createChar(0, Heart);
  lcd.createChar(1, Bell);
  lcd.createChar(2, Alien);
  lcd.createChar(3, Check);
  lcd.createChar(4, Speaker);
  lcd.createChar(5, Sound);
  lcd.createChar(6, Skull);
  lcd.createChar(7, Lock);

• في الدالة loop() يتم عرض جميع الأحرف باستخدام الدالة lcd.write() . كبارامتر ، نستخدم رقم الحرف الذي نحتفظ به.

كود:
lcd.setCursor(0, 1);
lcd.write(byte(0));


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 22-11-2019, 12:24 AM المشاركة 20   
افتراضي


مثال شامل :

كود:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // create an lcd object and assign the pins

void setup() 
{
lcd.begin(16, 2); // Set the display to 16 columns and 2 rows
}

void loop() 
{
// run the 7 demo routines
basicPrintDemo();
displayOnOffDemo();
setCursorDemo();
scrollLeftDemo();
scrollRightDemo();
cursorDemo();
createGlyphDemo();
}

void basicPrintDemo() 
{
lcd.clear(); // Clear the display
lcd.print("Basic Print"); // print some text
delay(2000);
}

void displayOnOffDemo() 
{
lcd.clear(); // Clear the display
lcd.print("Display On/Off"); // print some text
for(int x=0; x < 3; x++) 
{ // loop 3 times
lcd.noDisplay(); // turn display off
delay(1000);
lcd.display(); // turn it back on again
delay(1000);
}
}

void setCursorDemo() 
{
lcd.clear(); // Clear the display
lcd.print("SetCursor Demo"); // print some text
delay(1000);
lcd.clear(); // Clear the display
lcd.setCursor(5,0); // cursor at column 5 row 0
lcd.print("5,0");
delay(2000);
lcd.setCursor(10,1); // cursor at column 10 row 1
lcd.print("10,1");
delay(2000);
lcd.setCursor(3,1); // cursor at column 3 row 1
lcd.print("3,1");
delay(2000);
}

void scrollLeftDemo() {
lcd.clear(); // Clear the display
lcd.print("Scroll Left Demo");
delay(1000);
lcd.clear(); // Clear the display
lcd.setCursor(7,0);
lcd.print("Beginning");
lcd.setCursor(9,1);
lcd.print("Arduino");
delay(1000);
for(int x=0; x<16; x++) {
lcd.scrollDisplayLeft(); // scroll display left 16 times
delay(250);
}
}

void scrollRightDemo() {
lcd.clear(); // Clear the display
lcd.print("Scroll Right");
lcd.setCursor(0,1);
lcd.print("Demo");
delay(1000);
lcd.clear(); // Clear the display
lcd.print("Beginning");
lcd.setCursor(0,1);
lcd.print("Arduino");
delay(1000);
for(int x=0; x<16; x++) {
lcd.scrollDisplayRight(); // scroll display right 16 times
delay(250);
}
}
void cursorDemo() {
lcd.clear(); // Clear the display
lcd.cursor(); // Enable cursor visible
lcd.print("Cursor On");
delay(3000);
lcd.clear(); // Clear the display
lcd.noCursor(); // cursor invisible
lcd.print("Cursor Off");
delay(3000);
lcd.clear(); // Clear the display
lcd.cursor(); // cursor visible
lcd.blink(); // cursor blinking
lcd.print("Cursor Blink On");
delay(3000);
lcd.noCursor(); // cursor invisible
lcd.noBlink(); // blink off
}

void createGlyphDemo() {
lcd.clear();

byte happy[8] = { // create byte array with happy face
B00000,
B00000,
B10001,
B00000,
B10001,
B01110,
B00000,
B00000};

byte sad[8] = { // create byte array with sad face
B00000,
B00000,
B10001,
B00000,
B01110,
B10001,
B00000,
B00000};
lcd.createChar(0, happy); // create custom character 0
lcd.createChar(1, sad); // create custom character 1
for(int x=0; x<5; x++) { // loop animation 5 times
lcd.setCursor(8,0);
lcd.write((byte)0); // write custom char 0
delay(1000);
lcd.setCursor(8,0);
lcd.write(1); // write custom char 1
delay(1000);
}
}


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 22-11-2019, 03:26 PM المشاركة 21   
افتراضي


ملخص دوال مكتبة شاشة الكريستال السائل LiquidCrystal Library Functions :
مكتبة LiquidCrystal هي المفتاح لاستخدام شاشات LCD بسهولة مع Arduino. الأمر الرائع هو أنها تأتي مثبتة مسبقًا على برنامج Arduino الخاص بك - لذلك ليس عليك تنزيل أي شيء خاص لجعلها تعمل.
المكتبة ممتلئة بالدوال المفيدة ؛ من دوال لتمرير النص scrolling text إلى وميض شاشة LCD - وإلى حد كبير كل شيء بينهما. سوف تكتشف بسرعة أن فهم كيفية عمل المؤشر cursor أمر حيوي للتحكم في الشاشة بشكل صحيح.

مرجعية مكتبة LiquidCrystal
الصفحة المفضلة على موقع ARDUINO هي صفحة المرجعية - حيث يتم شرح جميع الدوال بالتفصيل. تحتوي المكتبات أيضًا على صفحات مرجعية ، ومكتبة LiquidCrystal ليست استثناء. الصفحة على الرابط :

http://arduino.cc/en/Reference/LiquidCrystal

سوف تجد كل دالة متوفرة مدرجة (مقيدة) ، كل منها مرتبط بصفحة تصف بارامترات كل منها. قد تجد أن البارامترات وحدها لا تكفي لفهم "مفهوم" الدوال - وهذا ما سوف يتم شرحه هنا.
والأفضل من ذلك بالنسبة لهذه المكتبة ، أنها تتضمن أيضًا العديد من الأمثلة التي يمكنك الرجوع إليها للتعرف على كيفية قيام مبدعين المكتبة بتنفيذ دوال محددة في برنامجهم sketch . يمكنك فتح البرامج sketches مباشرةً في Arduino IDE الخاص بك عن طريق الانتقال إلى File > Examples > LiquidCrystal .
.



بغض النظر عن ذلك - تأكد من التعرف على صفحة مرجع مكتبة LiquidCrystal – فهى مورد لا غنى عنه عندما تحتاج إلى تذكر شيء ما حول دالة معينة.
كيفية تنفيذ مكتبة LiquidCrystal في برامج الاردوينو :
في كل مرة تريد فيها استخدام مكتبة LiquidCrystal ، هناك ثلاثة أجزاء من التعليمات البرمجية (الكود) "يجب" أن تدرجها في البرنامج .
• الجزء الأول عبارة عن عبارة "التضمين" #include الغير تقليدية المظهر :

كود:
 // include the library code:
#include <LiquidCrystal.h>

يجب أن يكون هذا السطر الأول من التعليمات البرمجية في البرنامج (بعد أي تعليقات تشرح البرنامج). تتيح العبارة #include <LiquidCrystal.h> للمترجم معرفة مكان البحث عن إعلانات declarations الدوال المختلفة. عند ترجمة البرنامج ، سيتفاعل مع ملف الرأس LiquidCrystal للعثور على إعلانات الدوال التي يحتاجها.
• الشيء الثاني الذي يجب عليك فعله هو الإعلان عن اسم لكائن من الفئة LiquidCrystal وتهيئته. يمكنك وضع هذا مباشرة بعد عبارة التضمين أعلى البرنامج .

كود:
// declare, name and initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);



قد يبدو هذا غريبا جدًا ، لكنه في الواقع بسيط للغاية. ما تفعله هنا هو إنشاء "كائن". الكائن في Arduino (والذي ينطبق على لغة C++ ) هو بنية خاصة يمكن أن تحتوي على بيانات مرتبطة به وبدواله .
على سبيل المثال ، قد يحتوي الكائن “car” على البيانات (اللون ، والطراز ، والسنة) المرتبطة به. سيكون له أيضًا بعض الدوال ، ربما مثل drive(), stop(), honk() . عندما نعلن عن كائن من الفئة LiquidCrystal ، نكتب ببساطة نوع الكائن ، وهو LiquidCrystal - متبوعًا بمسافة واسم الكائن. نحن هنا نسميه “lcd” . يمكنك تسميته بأى اسم آخرإذا أردت - لا يهم.
• أخيرًا ، يمكنك تمريره بعض البيانات باستخدام الأقواس. تخبر الأرقام الموجودة في الأقواس الكائن الجديد أى أطراف الاردوينو مرتبطة (متصلة) به . طالما لدينا أطراف متصلة بشاشات الكريستال السائل بشكل صحيح ، يتم الاعتناء بكل عمل التعامل مع مهام الطرف من وراء الكواليس.
عندما نبدأ في استخدام دوال هذا الكائن ، سنبدأ (سنقدم) كل واحدة باسم الكائن. لذلك في هذا المثال أطلقنا على الكائن اسم “lcd” . لذلك عندما نستخدم الدالة blink() من مكتبة LiquidCrystal ، نكتب:

كود:
lcd.blink();

إذا أطلقنا عليه اسم mamaJama ، فسنكتب بدلاً من ذلك:

كود:
mamaJama.blink();

لذلك دعونا نلخص ذلك - وتذكر أن فهم هذا بالتفصيل الدقيق ليس بالأمر المهم لتشغيل شاشات الكريستال السائل - التفاصيل سوف تفهم مع مرور الوقت. إذا كنت ترغب في الحصول على نتائج ، فقم فقط بتضمين ذلك في الجزء العلوي من البرنامج :

كود:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd1(12, 11, 5, 4, 3, 2);

• النوع الأخير "الإداري" “administrative” من الكود الذي يجب تضمينه داخل الدالة setup :

كود:
 void setup() {
  // set up the LCD's number of columns and rows:
   lcd.begin(16, 2);
} //close setup

نستخدم الدالة begin() من المكتبة لتمرير حجم شاشة LCD لكائن الفئة LiquidCrystal. التنسيق هو (COLUMNS, ROWS) . هنا نستخدم شاشة LCD ذات 16 عمودًا وصفين ، ومن ثم يكون lcd.begin(16,2) . تذكر أنه ، إذا كنت تستخدم اسمًا آخر غير lcd ، فسيكون:

كود:
 yourName.begin(Columns, Rows);

ما هو رائع حول مكتبة LiquidCrystal هو أنها تدعم جميع أنواع أحجام شاشات الكريستال السائل - والشيء الوحيد الذي عليك تغييره هو الأرقام التي تمررها في الدالة begin() .
الآن دعنا ننتقل إلى بعض الجوانب المهمة لاستخدام مكتبة LiquidCrystal - وهي فهم الفهرسة indexing .

فهم كيف يتم عرض النص text على شاشات LCD (الفهرسة) (INDEXING) :
لنبدأ من خلال إلقاء نظرة على الدالة print() . في الدالة setup() يمكننا كتابة:

كود:
void setup() {

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  lcd.print("hello, world!");

}//close setup

ليس من المستغرب أن تعرض هذا الكلمات “hello, world!” على شاشة LCD. تذكر الآن أن الدالة setup() تعمل مرة واحدة فقط - لكن النص “hello, world!” سيبقى على شاشة LCD. هذه ميزة مفيدة حقًا لشاشات الكريستال السائل - النص الذي تطبعه يكون "مثبت - ملتصق" “sticky”- ما لم تكن بحاجة إلى تغيير النص أو موقع النص على الشاشة ، فلا داعي لتحديثه باستمرار في البرنامج .
الشيء الآخر الذي يجب ملاحظته حول الشاشة هو الموقع الافتراضي الذي يظهر فيه النص – فهو يبدأ دائمًا من الزاوية العلوية اليسرى ما لم تخبره بخلاف ذلك. يسمى هذا الموقع (0 ، 0). أو "مؤشر الصفر" zero index، أو موضع "البيت " “home” .



الآن قد تتساءل لماذا الأصفار؟ أليس هو في الواقع الصف الأول والعمود الأول. نعم ، ولكن فهرسة LCD تبدأ من الصفر. هذا يعني أنه للإشارة إلى الموضع الأول للصف أو العمود ، تستخدم الصفر. للإشارة إلى الموضع الثاني ، يمكنك استخدام الرقم واحد.
أنا أعلم – أن هذا غريب - لكنك ستجد بعد ذلك أنها تعمل بشكل جيد وأن معظم الهياكل في البرمجة يتم الرجوع إليها بهذه الطريقة. لذلك دعونا نقوم بالقليل من الممارسة. انظر إلى الصور أدناه وحدد فهرس الحرف "A".



فهرسة الصورة الأولى هى (4, 1) والثانية (15, 1) .
لذلك كيف نحدد المكان للشاشة LCD ؟ والأكثر أهمية لماذا هذا الأمر مهم ؟
لتعيين(ضبط – تحديد) set المؤشر cursor ، نستخدم الدالة setCursor(COLUMN, ROW); ؛ لذلك إذا كنا نريد أن يكون المؤشر الخاص بنا في العمود الثالث وفي الصف الثاني ، فسنكتب:

كود:
 lcd.setCursor( 2 , 1 ); //set the cursor to third column in the second row

نعم - أعلم - فهرسة الصفر تستغرق بعض الوقت لتعتاد عليها - ولكن إذا تذكرت طرح واحد من الموقع الفعلي للعمود والصف ، فسوف تحصل على موقع الفهرس. فلماذا نهتم بموقع المؤشر؟ يحدد موقع المؤشر مكان عرض النص على الشاشة. لذلك إذا استخدمنا هذه المجموعة في الدالة loop() :

كود:
 void loop(){
  lcd.setCursor( 5 , 1);
  lcd.print(“MAMA”);
}// close loop

سنحصل على ما يلي على الشاشة:



الشيء المهم التالي الذي يجب فهمه حول المؤشر هو أنه "يتقدم تلقائيًا". لذلك في أي وقت تقوم فيه بعرض شيء ما على الشاشة - سوف يتقدم موقع المؤشر تلقائيًا إلى الموضع بعد حرف النص. لتصور هذا ، دعنا نستخدم دالة تعرض المؤشر. يتم عرض المؤشر على شكل الشرطة السفلية "_" على شاشة LCD.


كود:
void loop(){
  lcd.setCursor( 5 , 1);
  lcd.print(“MAMA”);
  lcd.cursor();
}// close loop

هذا سوف يعرض التالى :



يعد هذا مفيدًا لعدة أسباب - ولكن الأكثر فائدة هو أنه لا يتعين عليك إخبار شاشة LCD باستمرار بمكان وضع الجزء التالي من النص - فسيتم استخدامه افتراضيًا بعد النص المعروض الحالي. لذلك دعونا نلقي نظرة على ما يمكن أن يحدث إذا أرسلنا هذا الأمر إلى شاشة LCD:


كود:
void loop(){
  lcd.setCursor( 5 , 1);
  lcd.print(“MAMA”);
  lcd.print(“JAMA”);
}// close loop



دعنا ننتهي من الحديث عن المؤشر ببعض الدوال الأخرى المستخدمة لتصور ذلك. الدالة blink() والدالة noBlink() سيومضان شريحة segment المؤشر بالكامل من الشاشة ، وليس مؤشر الشرطة السفلية فقط . دعونا نلقي نظرة على خرج هذا الكود :

كود:
void loop(){
  lcd.cursor();
  lcd.blink();
}// close loop




لإيقاف وميض نموذج المؤشر ، يمكنك ببساطة استخدام الدالة noBlink() .

كيفية تشغيل وإيقاف العرض باستخدام الكود:
في بعض الأحيان لن ترغب في عرض أي شيء على شاشة LCD أو قد ترغب في الدخول في وضع السكون sleep . من السهل القيام بذلك باستخدام الدوال noDisplay() و display() .

كود:
 void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}//close setup

void loop(){
  lcd.noDisplay();
  delay(500);
  lcd.display();
  delay(500);
}// close loop

هذا الكود سوف يقوم بتشغيل وإيقاف العرض كل نصف ثانية. من المهم ملاحظة أن النص السابق يتم الاحتفاظ به على الشاشة حتى بعد إيقاف تشغيله وإعادة تشغيله.

كيفية تمرير scroll النص جهة اليسار أو واليمين عبر الشاشة :
الطريقة السهلة لتحقيق ذلك هي الدوال scrollDisplayLeft() و scrollDisplayRight() . كما يوحي اسم الدالة – فهى تقوم بنقل (تحريك) الصورة المعروضة بالكامل إلى اليسار (أو اليمين) - ونقلها شريحة (موضع) واحدة بالضبط .
لنفترض أن لدينا كلمة "MAMA" معروضة على الشاشة.



واستخدمنا الدالة scrollDisplayRight() لمرة واحدة فقط. سوف تلتقط شاشة العرض وتزخزحها shift جهة اليمين بمقدار شريحة (موضع) واحدة .



ولكن عادةً ما نريد زحزجة العرض أكثر من شريحة واحدة - نريده أن ينتقل باستمرار عبر الشاشة. للقيام بذلك ، يمكننا استخدام الكود أدناه:

كود:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);

  // Print a message to the LCD.
  lcd.print("MAMA");
  delay(1000);

}

void loop() {

  //move the display one segment to the right
  lcd.scrollDisplayRight();
  //Delay to see the movement happen
  delay(250);

}

نظرًا لتكرار الحلقة loop() مرارًا وتكرارًا ، فهى ستستدعي باستمرار الدالة scrollDisplayRight() - وبالتالي في كل مرة خلال الحلقة ، تتزحزح الشاشة (العرض) إلى اليمين - مما يخلق تأثير التمرير المستمر الذي نبحث عنه.
سوف يتم تمرير النص حتى خارج الشاشة مباشرة - في النهاية سوف يظهر النص مرة أخرى على الرغم من ذلك - من جانب واحد من الشاشة إلى الجانب الآخر.
كما تتخيل ، ستفعل الدالة scrollDisplayLeft() نفس الشيء ، ولكن في الاتجاه المعاكس.

الفرق بين الدالة write() والدالة print() :
حتى الآن كنا نستخدم الدالة print() لعرض نص text على الشاشة ، ولكن هناك أيضًا الدالة write() . الفرق بين الاثنين دقيق إلى حد ما .
ستقوم الدالة print() بعرض أي بيانات تضعها بين القوسين. لنأخذ المثال التالي:

كود:
 int myNum = 97;
lcd.print(myNum);

هذا من شأنه طباعة قيمة myNum أى سيتم عرض الرقم 97.
الآن ، ماذا سيحدث إذا حاولنا القيام بذلك باستخدام الدالة write() ؟

كود:
 int myNum = 97;
lcd.write(myNum);

في هذه الحالة ، نحصل على الحرف الصغير "a" يُرسل إلى شاشة LCD. فماذا يحدث ؟
يرسل الأمر write() حرفًا character إلى شاشة LCD. الأحرف هي نوع بيانات ، تمامًا مثل العدد الصحيح هونوع بيانات. الأمر الممتع في نوع بيانات الأحرف هو أن كل حرف يتم ترميزه فعليًا برقم. يسمى الترميز المستخدم ASCII (الكود القياسي الأمريكي لتبادل المعلومات).
إذا نظرنا إلى جدول ASCII ، فسنجد أن 97 يرمز فعليًا إلى الحرف الصغير "a". هذا هو السبب في أن write(97) ستعرض الحرف “a” .
باختصار يجب أن تستخدم دائمًا الدالة print() إلا إذا كنت تخطط لإرسال البيانات عبر المنفذ التسلسلي. يتضمن ذلك إذا كنت بحاجة إلى استخدام نافذة الشاشة التسلسلية لمشاهدة إخراج LCD .

كيفية مسح clear الشاشة :
لقد عرضت مجموعة من الأشياء على الشاشة وتريد التخلص من كل ذلك . فقط استخدم الدالة clear() لمسح الشاشة وجعلها نظيفة. تقوم هذه الدالة أيضًا بإرجاع المؤشر إلى موضع home في الزاوية العلوية اليسرى من الشاشة.

استخدام الدالة autoscroll() :
إذا كنت تتذكر من الفقرة السابقة ، أن المؤشر يتقدم تلقائيًا إلى نهاية النص المعروض. ماذا لو أردنا أن يظل المؤشر فى مكانه ووضع نص جديد "مدفوع خارجا " “push-out” من حيث وضع المؤشر؟
تتيح لك الدالة autoscroll() القيام بذلك. هذه هي الطريقة التي يعمل بها. عليك أولاً استخدام الدالة setCursor() لاختيار موقع المؤشر. ثم تستخدم الدالة autoscroll() .

كود:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

  // set up the LCD's number of columns and rows:
    lcd.begin(16,2);
lcd.cursor();

}

void loop() {

  // set the cursor to (16,1):
  lcd.setCursor(16,1);

  // set the display to automatically scroll:
  lcd.autoscroll();

  // print from 0 to 9:
  for (int i = 0; i < 10; i++) {
     lcd.print( i );
     delay(500);

   }

  // clear screen for the next loop:

  lcd.clear();

} //close loop

إذا ماذا يجري هنا؟ حسنًا ، قمنا بتعيين المؤشر إلى أقصى يمين شاشة LCD في الصف الثاني باستخدام:

كود:
 lcd.setCursor(16,1);

بعد ذلك تستدعى الدالة autoscroll() :

كود:
lcd.autoscroll();

الكتلة التالية هى حلقة for والتى تطبع رقم واحد فى كل مرة على شاشة LCD :

كود:
for (int i = 0; i < 10; i++) {
  lcd.print( i );
  delay(500);
}

في المرة الأولى من خلال هذه الحلقة ، ستبدو شاشة LCD كما يلي:



في المرة الثانية خلال الحلقة ، يمكنك أن ترى أن الرقم التالي (1) قد "دفع" “pushed” ، الرقم الأول (0) إلى اليسار.



بعد بضع مرات خلال الحلقة ، أعتقد أنك تحصل على المطلوب . يعمل المؤشر كنقطة "أصل" ، ويتم إزاحة جميع النصوص الجديدة المرسلة إلى الشاشة إلى اليسار.



لإيقاف دالة التمرير التلقائي ، استخدم ببساطة الدالة :

كود:
noAutoscroll();   //stop autoscrolling

الاتجاه الذي يتم فيه تعيين تمرير النص الجديد يتم باستخدام الدالة leftToRight() أو الدالة rightToLeft() - هذه الدوال تحدد الاتجاه الذي تريده لعرض النص الخاص بك .


Hussain800
:: مهندس متميز ::
تاريخ التسجيل: Apr 2012
المشاركات: 635
نشاط [ Hussain800 ]
قوة السمعة:
قديم 27-11-2019, 12:26 AM المشاركة 22   
افتراضي


السلام عليكم ورحمة الله وبركاته
متابعين معاك اخى فتح الله .. وانا بانتظار محاضرات توصيل مجموعة من السفن سيجمنت مع عدد كبير من مسجلات الازاحة 74HC595 وبارك الله فيك اخى على هدا الشرح والعطاء 74HC595


Hussain800
:: مهندس متميز ::
تاريخ التسجيل: Apr 2012
المشاركات: 635
نشاط [ Hussain800 ]
قوة السمعة:
قديم 27-11-2019, 12:27 AM المشاركة 23   
افتراضي


والله الموفق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 27-11-2019, 12:43 PM المشاركة 24   
افتراضي الاردوينو والتحويل من تناظرى إلى رقمى Analog to Digital Conversion


الاردوينو والتحويل من تناظرى إلى رقمى Analog to Digital Conversion
العالم التناظرى :
المتحكم الدقيق (الميكروكونترولر) قادر على اكتشاف الإشارات الثنائية binary signals : بمعنى هل الزر مضغوط أم لا؟ هذه إشارات رقمية digital signals . عندما يتم تشغيل متحكم من خمسة فولتات ، فإنه يفهم الصفر فولت (0V) على أنه “0” ثنائي والخمسة فولت (5V) باعتبارها “1” ثنائى . ومع ذلك ، فإن العالم ليس بهذه البساطة . ماذا لو كانت الإشارة 2.72V ؟ هل هذا صفر أم واحد؟ نحتاج غالبًا إلى قياس الإشارات التي تتغير ؛ وتسمى هذه بالإشارات التناظرية analog signals . قد يخرج (ينتج) مستشعر تناظري 5 فولت الخرج 0.01V أو4.99V أو أي شىء بينهما . لحسن الحظ ، فإن جميع المتحكمات الدقيقة تقريبًا لديها جهاز مدمج فيها يسمح لنا بتحويل هذه الفولتية إلى قيم يمكننا استخدامها في برنامج ما لاتخاذ قرار.

ما هو المحول من تناظرى لرقمى ADC؟
يعتبر المحول من التناظري (التماثلى) إلى الرقمي (ADC) ميزة مفيدة للغاية حيث يقوم بتحويل جهد تناظرى (تماثلى) analog voltage على طرف إلى عدد رقمي digital number . من خلال التحويل من العالم التناظرى إلى العالم الرقمي ، يمكننا البدء في استخدام الإلكترونيات للتواصل مع العالم التناظرى من حولنا.



ليس كل طرف على المتحكم لديه القدرة على القيام بالتحويل من تناظرى إلى رقمى . على لوحة Arduino أونو ، تحتوي هذه الأطراف على الحرف "A" ملصق أمامها (من A0 إلى A5) للإشارة إلى أن هذه الأطراف يمكنها قراءة االجهود التناظرية.
المحول من تناظرى إلى رقمى ADC يمكن أن يختلف اختلافا كبيرا بين متحكم وآخر. المحول ADC على Arduino عبارة عن محول 10-bit ADC مما يعني أن لديه القدرة على الكشف عن 1,024 (2^10) مستويات تناظرية منفصلة (من المستوى 0 إلى المستوى 1023 ( .

العلاقة بين القيمة العددية للتحويل من تناظرى إلى رقمى وجهد الدخل التناظرى :

يعطى المحول ADC هذه العلاقة فى شكل تناسب خطى . هذا يعني أن المحول ADC يفترض أن 5V تكون 1023 وأي شيء أقل من 5V سيكون نسبة بين 5V و 1023.



يعتمد التحويل من تناظرى إلى الرقمى على جهد النظام. نظرًا لأننا نستخدم محول 10-bit ADC على نظام 5V ، يمكننا تبسيط هذه المعادلة قليلاً:



إذا كان جهد الدخل التناظري هو 2.12V ، فما الذي سوف يعطيه المحول ADC كقيمة عددية ؟

وبعد إعادة الترتيب قليلاً نحصل على:



إذا القيمة العددية للتحويل هى 434 .

دالة قراءة جهد الدخل التناظرى analogRead() :
الوصف :
تقرأ القيمة من الطرف التناظرى المحدد. تحتوي لوحات Arduino على محول من تناظرى إلى رقمي متعدد القنوات 10 بتات. هذا يعني أنه سيحول جهد الدخل بين 0V وجهد التشغيل (5V أو 3.3V) إلى قيم لعدد صحيح بين 0 و 1023. فى Arduino UNO ، على سبيل المثال ، ينتج عن ذلك دقة resolution بين القراءات: 5 volts / 1024 units أو 0.0049 volts (4.9 mV) لكل وحدة.

الصيغة :

كود:
analogRead(pin)

البارامتارت :
الطرف pin : اسم طرف الدخل التناظرى المراد القراءة منه (فى الأونو من A0 إلى A5 )
العائد :
القراءة التناظرية على الطرف وتعيدها كقيمة عددية 0-1023 . أى أنها محددة بدقة المحول من تناظرى لرقمى (0-1023 for 10-bit) . نوع البيانات "عدد صحيح" int .

التدريب الأساسى :
قراءة جهد دخل تناظرى ، من على طرف مقاومة متغيرة ، يتغير من 0V إلى 5V لنحصل على القيمة العددية للتحويل ADC من 0 إلى 1023 ، وعرض النتيجة على شاشة LCD :
الدائرة الكهربية :



البرنامج :


كود:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // REGISTER SELECT PIN,ENABLE PIN,D4 PIN,D5 PIN, D6 PIN, D7 PIN
int adcValue;
void setup()
{
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
}
void loop()
{
lcd.setCursor(2, 0); 
lcd.print("ARDUINO ADC"); 
lcd.setCursor(0, 1); 
lcd.print("ADC RESULT:"); 
adcValue= analogRead(A0);
lcd.print(adcValue); 
 }



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:56 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)