ہم دفاتر ، شاپنگ مالز اور بہت ساری دوسری جگہوں پر جانتے ہیں جہاں صرف اجازت نامے والے شخص کو کمرے میں داخل ہونے کی اجازت ہے۔ یہ نظام آریفآئڈی مواصلات کے نظام کو استعمال کرتے ہیں۔ آریفآئڈی کو شاپنگ مالز میں چوری روکنے کے لئے استعمال کیا جاتا ہے کیونکہ مصنوعات کو آریفآئڈی چپ کے ساتھ ٹیگ کیا جاتا ہے اور جب کوئی شخص آر ایف آئی ڈی چپ کے ساتھ عمارت سے نکل جاتا ہے تو خود بخود ایک الارم اٹھ جاتا ہے۔ آریفآئڈی ٹیگ ریت کے ایک حصے کی طرح چھوٹا ڈیزائن کیا گیا ہے۔ آریفآئڈی توثیقی نظام سسٹم ڈیزائن کرنے میں آسان ہیں اور قیمت میں یہ سستے ہیں۔ کچھ اسکول اور کالج آج کل آریفآئڈی پر مبنی حاضری کے نظام کا استعمال کرتے ہیں ۔
اس پروجیکٹ میں ہم حفاظتی مقاصد کے لئے آریفآئڈی پر مبنی ٹول وصولی کا نظام ڈیزائن کرنے جارہے ہیں۔ لہذا یہ سسٹم دروازے کھولتا ہے اور لوگوں کو صرف آر ایف آئی ڈی ٹیگ والے مجاز افراد کی اجازت دیتا ہے۔ مجاز ٹیگ ہولڈر کی شناخت کو اے ٹی ایم ای جی اے مائیکروکونٹرولر میں پروگرام کیا گیا ہے اور صرف ان ہولڈرز کو ہی باہر جانے یا داخلے میں داخل ہونے کی اجازت ہے۔
ضروری اجزاء
ہارڈ ویئر: اے ٹی میگا 32 مائکروکانٹرولر ، بجلی کی فراہمی (5 وی) ، اے وی آر-آئی ایس پی پروگرامر ، جے ایچ ڈی_162ALCD (16x2 LCD ماڈیول) ، 100uF سندارتھ (بجلی کی فراہمی کے پار سے جڑا ہوا) ، بٹن ، 10KΩ ریزٹر ، 100nF سندارتھ ، ایل ای ڈی (دو ٹکڑے) ، EM-18 (آریفآئڈی ریڈر ماڈیول)، L293D موٹر ڈرائیور آایسی ، 5 وی ڈی سی موٹر۔
سافٹ ویئر: اٹیل اسٹوڈیو 6.1 ، پروگرام یا فلیش جادو۔
سرکٹ ڈایاگرام اور ورکنگ وضاحت
میں آریفآئڈی ٹول جمع کرنے کے نظام سرکٹ اوپر دکھائے، ATMEGA32 کے ساتھ Porta LCD کے اعداد و شمار بندرگاہ سے منسلک ہے. اگر ہمیں PORTC کو عام مواصلات کی بندرگاہ کے طور پر استعمال کرنا ہے تو یہاں ہمیں فیوز بائٹس میں تبدیلی کرکے PORTC میں JTAG مواصلات کو ACEGA میں غیر فعال کرنا یاد رکھنا چاہئے۔ 16x2 LCD میں ، اگر پیچھے کی روشنی ہے تو وہاں 16 پن ہیں ، اگر پیچھے کی روشنی نہیں ہے تو 14 پن ہوں گے۔ ہم بیک لائٹ پنوں کو طاقت دے سکتے ہیں یا چھوڑ سکتے ہیں۔ اب 14 پنوں میں 8 ڈیٹا پن (7-14 یا D0-D7) ، 2 بجلی کی فراہمی کی پن (1 & 2 یا VSS & VDD یا gnd & + 5v) ، 3RD پن اس کے برعکس کنٹرول (VEE- کنٹرولز کتنی موٹی ہیں حروف دکھائے جائیں) ، 3 کنٹرول پن (RS & RW & E)
سرکٹ میں ، آپ مشاہدہ کر سکتے ہیں کہ میں نے صرف دو کنٹرول پن لئے ہیں۔ اس سے بہتر تفہیم کی لچک مل جاتی ہے۔ اس کے برعکس تھوڑا سا اور READ / WRITE اکثر استعمال نہیں ہوتے ہیں لہذا ان کو زمین پر چھوٹا جاسکتا ہے۔ یہ ایل سی ڈی کو سب سے زیادہ برعکس اور پڑھنے کے موڈ میں رکھتا ہے۔ ہمیں حرف اور ڈیٹا بھیجنے کے لئے صرف انبل اور آر ایس پنوں کو کنٹرول کرنے کی ضرورت ہے۔
کنیکشن جو ایل سی ڈی کے لئے بنائے گئے ہیں ، ذیل میں دیئے گئے ہیں۔
گراؤنڈ میں PIN1 یا VSS
پن 2 یا وی ڈی ڈی یا وی سی سی سے + 5 وی پاور
PIN3 یا VEE کرنے کے لئے (ابتدائی کے لئے زیادہ سے زیادہ اس کے برعکس بہترین دیتا ہے)
MCU کے PD6 پر PIN4 یا RS (انتخاب کا اندراج) کریں
پن 5 یا آر ڈبلیو (پڑھیں / لکھیں) زمین پر (ایل سی ڈی کو پڑھنے کے موڈ میں ڈال دیتا ہے جس سے صارف کے لئے مواصلات میں آسانی ہوجاتی ہے)
مائکروکینٹرالر کے PD5 یا PIN6 یا E (اہل) کریں
PIN7 یا D0 سے PA0
PIN8 یا D1 سے PA1
PIN9 یا D2 سے PA2
PIN10 یا D3 سے PA3
PIN11 یا D4 سے PA4
PIN12 یا D5 سے PA5
PIN13 یا D6 سے PA6
PIN14 یا D7 سے PA7
سرکٹ میں ، آپ دیکھ سکتے ہیں کہ ہم نے 8 بٹ مواصلات (D0-D7) کا استعمال کیا ہے۔ تاہم یہ ایک لازمی بات نہیں ہے اور ہم 4 بٹ مواصلات (D4-D7) استعمال کرسکتے ہیں لیکن 4 بٹ مواصلات کا پروگرام تھوڑا سا پیچیدہ ہوجاتا ہے ، لہذا میں نے 8 بٹ مواصلات کو ترجیح دی۔
لہذا مندرجہ بالا جدول کے محض مشاہدے سے ہم ایل سی ڈی کے 10 پنوں کو کنٹرولر سے جوڑ رہے ہیں جس میں 8 پنوں کو ڈیٹا پن اور کنٹرول کے لئے 2 پن ہیں۔
آگے بڑھنے سے پہلے ، ہمیں سیریل مواصلات کے بارے میں سمجھنے کی ضرورت ہے۔ یہاں آریفآئڈی ماڈیول سیریل میں کنٹرولر کو ڈیٹا بھیجتا ہے۔ اس میں مواصلات کا دوسرا طریقہ ہے لیکن آسان مواصلت کے لئے ہم RS232 کا انتخاب کررہے ہیں۔ ماڈیول کا RS232 پن ATMEGA کے RXD پن سے منسلک ہے۔
آریفآئڈی ماڈیول کے ذریعہ بھیجا گیا ڈیٹا اس طرح ہے:
اب آریفآئڈی ماڈیول انٹرفیس کے لئے ، درج ذیل خصوصیات کی ضرورت ہے۔
1. کنٹرولر کے RXD پن (اعداد و شمار کو حاصل کرنے کی خصوصیت) کو چالو کرنا ضروری ہے۔
Since. چونکہ مواصلات سیریل ہیں ہمیں جب تک ڈیٹا بائی موصول ہوتا ہے اسے جاننے کی ضرورت ہوتی ہے ، تاکہ ہم مکمل بائٹ موصول ہونے تک پروگرام کو روک سکیں۔ ایسا کسی ڈیٹا کو مکمل وقفے سے وصول کرنے کے قابل کرکے کیا جاتا ہے۔
3. آریفآئڈی 8 بٹ موڈ میں کنٹرولر کو ڈیٹا بھیجتا ہے۔ تو ایک وقت میں دو حروف کنٹرولر کو بھیجے جائیں گے۔ یہ اوپر کے اعداد و شمار میں دکھایا گیا ہے۔
above. مذکورہ اعداد و شمار سے ، ماڈیول کے ذریعہ بھیجے گئے ڈیٹا میں کوئی برابری کی بٹس نہیں ہیں۔
مندرجہ بالا خصوصیات کنٹرولر کے اندراجات میں سیٹ کی گئی ہیں۔ ہم ان پر مختصر گفتگو کریں گے ،
سرخ (RXEN): یہ تھوڑا سا اعداد و شمار کی خصوصیت کو پیش کرتا ہے۔ ماڈیول کے ڈیٹا کو کنٹرولر کے ذریعہ موصول ہونے کے ل This یہ بٹ طے کرنا ضروری ہے۔ یہ کنٹرولر کے RXD پن کو بھی اہل بناتا ہے۔
براؤن (آر ایکس سی آئی ای): ڈیٹا کے کامیاب استقبال کے بعد مداخلت کے ل for یہ تھوڑا سا طے کرنا ضروری ہے۔ اس بٹ کو چالو کرنے سے ، ہمیں 8 بٹ ڈیٹا موصول ہونے کے فورا بعد ہی پتہ چل جاتا ہے۔
پنک (URSEL): یو سی ایس آر سی میں دوسرے بٹس کو فعال کرنے سے پہلے اس بٹ کو سیٹ کرنا ہوگا۔ ترتیب دینے کے بعد ، UCSRC ، URSEL میں دیگر ضروری بٹس کو غیر فعال کرنا ہوگا یا صفر پر رکھنا چاہئے۔
پیلو (UCSZ0 ، UCSZ1 ، UCSZ2): یہ تینوں بٹس ہم ڈیٹا بٹس کی تعداد منتخب کرنے کے لئے استعمال ہوتے ہیں جو ہم ایک ہی بار میں بھیج رہے ہیں یا بھیج رہے ہیں۔
چونکہ آریفآئڈی ماڈیول کے ذریعہ بھیجا گیا ڈیٹا 8 بٹ ڈیٹا ٹائپ کا ہے ، لہذا ہمیں یو سی ایس زیڈ 0 ، یو سی ایس زیڈ 1 کو ایک اور یو سی ایس زیڈ 2 کو صفر پر سیٹ کرنا ہے۔
اورنج (یو ایم ایس ای ایل): یہ تھوڑا سا اسی بنیاد پر مرتب کیا گیا ہے کہ آیا یہ نظام غیر متزلزل گفتگو کر رہا ہے (دونوں مختلف گھڑی استعمال کرتے ہیں) یا ہم آہنگی سے (دونوں ایک ہی گھڑی کا استعمال کرتے ہیں)۔
چونکہ ماڈیول اور کنٹرولر مختلف گھڑیوں کا استعمال کرتے ہیں ، لہذا اس بٹ کو صفر پر سیٹ کرنا ہوگا یا تنہا رہ جانا چاہئے کیونکہ وہ سبھی طے شدہ طور پر صفر پر سیٹ ہیں۔
گرین (یوپی ایم 1 ، یو پی ایم0): یہ دونوں بٹس بٹ پیریٹی کی بنیاد پر ایڈجسٹ کیے گئے ہیں جس کو ہم مواصلات میں استعمال کر رہے ہیں۔
چونکہ آریفآئڈی ماڈیول اعداد و شمار کو بغیر کسی برابری کے بھیجتا ہے ، لہذا ہم نے UPM1 ، UPM0 دونوں کو صفر پر مقرر کیا ہے یا وہ تنہا رہ جا سکتے ہیں کیونکہ کسی بھی رجسٹر میں موجود تمام بٹس پہلے سے صفر پر سیٹ کردی جاتی ہیں۔
نیلی (USBS): یہ تھوڑا سا اسٹاپ بٹس کی تعداد کو منتخب کرنے کے لئے استعمال کیا جاتا ہے جو ہم مواصلت کے دوران استعمال کر رہے ہیں۔
چونکہ آریفآئڈی ماڈیول ایک اسٹاپ بٹ کے ساتھ ڈیٹا بھیجتا ہے ، لہذا ہمیں صرف یو ایس ایس بٹ کو چھوڑنا ہوگا۔
اب آخر میں ہمیں بوڈ کی شرح طے کرنے کی ضرورت ہے ، اوپر والے اعداد و شمار سے یہ بات واضح ہے کہ آریفآئڈی ماڈیول کنٹرولر کو اعداد و شمار بھیج دیتا ہے جس میں بوڈ ریٹ 9600bb (بٹس فی سیکنڈ) ہوتا ہے۔
موزوں UBRRH کو منتخب کرکے باؤ کی شرح کنٹرولر میں طے کی گئی ہے۔
یو بی بی آر آر ویلیو کا انتخاب کراس ریفرنگ باؤڈ ریٹ اور سی پی یو کرسٹل فریکوئنسی کے ذریعہ کیا جاتا ہے ، لہذا کراس ریفرنس کے ذریعہ یو بی آر آر ویلیو کو '6' کے طور پر دیکھا جاتا ہے ، اور اس طرح باؤڈ ریٹ سیٹ ہے۔
اب جیسا کہ اعداد و شمار میں دکھایا گیا ہے ، کنٹرولر سے دو پن L293D پر جاتی ہیں ، جو ایک H-BRIDGE ہے جو کم طاقت والے DC موٹروں کے لئے گردش کی سمت اور سمت کو کنٹرول کرنے کے لئے استعمال ہوتا ہے۔
L293D ایک H-BRIDGE IC ہے جو کم طاقت والے DC موٹروں کو چلانے کے لئے ڈیزائن کیا گیا ہے اور اسے اعداد و شمار میں دکھایا گیا ہے ، یہ IC دو H- پل پر مشتمل ہے لہذا یہ دو DC موٹریں چلا سکتا ہے۔ لہذا اس آئی سی کو مائکروکنٹرولر کے اشاروں سے روبوٹ موٹریں چلانے کیلئے استعمال کیا جاسکتا ہے۔
اب جیسا کہ اس آئی سی میں بحث ہوئی ہے اس سے قبل ڈی سی موٹر کی گردش کی سمت کو تبدیل کرنے کی صلاحیت موجود ہے۔ یہ INPUT1 اور INPUT2 پر وولٹیج کی سطح کو کنٹرول کرکے حاصل کیا جاتا ہے۔
پن کو فعال کریں |
ان پٹ 1 |
ان پٹ 2 |
موٹر سمت |
اونچا |
کم |
اونچا |
دائیں مڑیں |
اونچا |
اونچا |
کم |
بائیں مڑو |
اونچا |
کم |
کم |
رکو |
اونچا |
اونچا |
اونچا |
رکو |
لہذا جیسا کہ اوپر جدول میں دکھایا گیا ہے ، گھڑی وار گردش کے لئے 2A زیادہ ہونا چاہئے اور 1A کم ہونا چاہئے۔ اسی طرح گھڑی مخالف کے لئے 1A زیادہ اور 2A کم ہونا چاہئے۔
جب بھی کسی مجاز کارڈ کو ماڈیول کے قریب لایا جاتا ہے ، موٹر کو گھڑی کی سمت ایک سیکنڈ کے لئے منتقل کرنے کا پروگرام بنایا جاتا ہے ، یہ ظاہر کرنے کے لئے کہ ٹول گیٹ ایک سیکنڈ کے بعد واپس آ جاتا ہے ، یہ کہتے ہوئے کہ ٹول گیٹ بند ہے۔ ٹول پلازہ کے کام کو سی کوڈ کے قدم بہ قدم بہتر انداز میں بیان کیا گیا ہے۔
پروگرامنگ وضاحت
ذیل میں آریفآئڈی ٹول کلیکشن سسٹم کے کوڈ کے لئے لائن ٹو لائن وضاحت ہے ۔ آپ ذیل میں کوڈ کو پڑھ کر اس منصوبے کے تصور اور کام کو سمجھ سکتے ہیں۔ ڈاؤن لوڈ کرنے یا کاپی کرنے کے لئے ، آپ کو صفحہ کے نیچے مکمل کوڈ مل سکتا ہے۔
پنوں پر ڈیٹا کے بہاؤ پر قابو پانے کے ل # # ہیڈر شامل کریں
# وضاحت F_CPU 1000000 // بتانا کنٹرولر کرسٹل تعدد منسلک ہے
# شامل کریں
# وضاحت E 5 // PORTD کے 5 ویں پن کو "قابل" نام دینے سے ، چونکہ یہ LCD کے قابل پن سے منسلک ہے
ایل ڈی ڈی آر ایس پن سے منسلک ہونے کی وجہ سے ، پورٹ کے 6 ویں پن کو "رجسٹر انتخاب" کا نام دیں۔
باطل بھیج_ا_کمانڈ (دستخط شدہ چار کمانڈ)؛
باطل بھیج _a_character (دستخط شدہ چار کردار)؛
باطل بھیجیں_س_اسٹرنگ (چار * سٹرنگ_آف_چارٹر)؛
انٹ مین مین (باطل)
{
DDRA = 0xFF؛ // پورٹا ڈال آؤٹ پٹ کے طور پر
DDRD = 0b11111110؛
_ڈلی_مز (50)؛ // 50 ملی میٹر کی تاخیر
ڈی ڈی آر بی = 0b11110000؛ // کچھ پورٹ بی پنوں کو بطور ان پٹ لینا۔
UCSRB - = (1 <
UCSRC - = (1 <
UCSRC & = ~ (1 <
UBRRH & = ~ (1 <
یو بی آر آر ایل = 6؛ // باؤڈ ریٹ مقرر کرنا // مندرجہ ذیل ٹیگوں کی شناخت شامل ہے ، ان کو مختلف ٹیگز کے ل changed تبدیل کرنا ضروری ہے ، منصوبے کے کام کرنے کے ل These ان کو اپ ڈیٹ کرنا ضروری ہے۔
/ * پروگرام کو کنٹرولر میں پھینکنے کے بعد لازمی طور پر وہ کارڈز لینا ہوں گے جن کا اختیار ہونا ضروری ہے اور ٹیگز کی شناخت حاصل کرنی ہوگی۔ یہ آریفآئڈی ماڈیول کے قریب ٹیگ رکھ کر حاصل کیا گیا ہے اور شناختی اسکرین پر دکھائی جائے گی۔ IDs حاصل کرنے کے بعد ، پروگرام کو تازہ ترین ID نمبروں کی جگہ نئے ID نمبروں کی جگہ اپ ڈیٹ کرنا ہوگا۔
چار ADMIT = {{(0x97)، (0xa1)، (0x90)، (0x92)}، {(0x97)، (0xa1)، (0x90)، (0x93)}، {(0x97)، (0xa1)، (0x90) ، (0x94)}، {(0x97)، (0xa1)، (0x90)، (0x95)}، {(0x97)، (0xa1)، (0x90)، (0x96)}}؛ |
اب ہم صرف پانچ کارڈز اختیار کررہے ہیں ، ان کو کسی بھی تعداد میں تبدیل کیا جاسکتا ہے۔
مثال کے طور پر غور کریں کہ پہلے سے طے شدہ پروگرام کو کنٹرولر میں پھینک دیا جاتا ہے ، کارڈز حاصل کریں جس کا اختیار ہونا چاہئے۔ ایک کے قریب دوسرے ماڈیول کے بعد ایک جگہ رکھیں ، آپ کو ہر ایک کی شناخت xxxxxxxx (907a4F87) کے بطور ملے گی ،
اگر ہمارے پاس 7 ٹیگ ہیں ، تو ہمارے پاس 7 آٹھ بٹ ID ہوگی۔ * /
// اب سات کارڈوں کے لئے یہ اسی طرح جاتا ہے // چار ADMIT = {{(0x90)، (0x7a)، (0x4F)، (0x87)}،؛ ماڈیول کے ذریعہ ID بھیجنے کیلئے میموری کو الاٹ کرنا انٹ i = 0؛ انٹ ووٹ = 0؛ انٹ k = 0؛ ارسال_ا_کمانڈ (0x01)؛ // صاف سکرین 0x01 = 00000001 _ڈیلا_س (50)؛ ارسال_ا_کمانڈ (0x38)؛ // ایل سی ڈی کو بتانا ہم 8 بٹ کمانڈ / ڈیٹا موڈ استعمال کر رہے ہیں _ڈیلا_س (50)؛ ارسال_ا_کمانڈ (0b00001111)؛ // LCD اسکرین آن اور کلیدی طور پر ٹمٹمانے چار ایم ای ایم؛ // ٹیگ کی مکمل ID محفوظ کرنے کے لئے میموری کو الاٹ کرنا ارسال_ا_سٹریننگ ("آریفآئڈی نمبر")؛ // بھیجنے کا تار ارسال_ا_کمانڈ (0x80 + 0x40 + 0)؛ // پیش گو دوسرے نمبر پر جانے والا جبکہ (1) { جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ // UDR آٹھ بٹ کو حاصل کردہ ڈیٹا کو اسٹور کرتا ہے اور اسے ایک عدد میں لیا جاتا ہے۔ میم = کاونٹا؛ // پہلے دو حروف میموری میں اپ ڈیٹ ہوتے ہیں اٹو (کاؤنٹا ، شو ، 16)؛ // ایل سی ڈی میں متغیر نمبر رکھنے کے لئے کمانڈ (متغیر نمبر ، جس حرف میں تبدیل کرنا ہے ، کون سا بیس متغیر ہے (یہاں دس جیسے کہ ہم بیس 10 میں نمبر گن رہے ہیں)) ارسال_ا_سٹریننگ (شو)؛ // ایل سی ڈی پر کوریئر پوزیشن کرنے کے بعد دوسرے شخص کے کردار (متغیر نمبر سے تبدیل شدہ) ظاہر کرنے کے لئے ڈسپلے کو بتانا جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = کاونٹا؛ // تیسرے اور چوتھے حروف میموری میں اپ ڈیٹ ہوتے ہیں جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = COUNTA؛ // پانچویں اور چھٹے حروف میموری میں اپ ڈیٹ ہوتے ہیں جبکہ (! (UCSRA & (1 <
{ } COUNTA = UDR؛ اٹو (کاؤنٹا ، شو ، 16)؛ ارسال_ا_سٹریننگ (شو)؛ میم = کاونٹا؛ // ساتویں اور آٹھ حروف میموری کو اپ ڈیٹ کر رہے ہیں ارسال_ا_سٹریننگ ("")؛ ارسال_ا_کمانڈ (0x80 + 0x40 + 0)؛ UCSRB & = ~ (1 <
(i = 0؛ i <5؛ i ++) کیلئے { اگر ((MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT) & (MEM == ADMIT)) {// میموری کے حروف کے ساتھ ایک وقت میں دو حرفوں کا موازنہ خریدنے کے لئے جانچ پڑتال کریں پورٹ بی - = (1 <
پورٹ بی اور = ~ (1 <
_ڈیلا_س (220)؛ // تاخیر _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ پورٹ بی - = (1 <
پورٹ بی اور = ~ (1 <
_ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ _ڈیلا_س (220)؛ پورٹ بی اور = ~ (1 <
پورٹ بی - = (1 <
} } UCSRB - = (1 <
} } باطل بھیج_ا_کمانڈ (دستخط شدہ چار کمانڈ) { پورٹا = کمانڈ؛ پورٹ اور = ~ (1 <
پورٹ - = 1 <
_ڈیلا_س (50)؛ پورٹ & = ~ 1 <
پورٹا = 0؛ } باطل بھیج _a_character (دستخط شدہ چار کردار) { پورٹا = کردار؛ پورٹ - = 1 <
پورٹ - = 1 <
_ڈیلا_س (50)؛ پورٹ & = ~ 1 <
پورٹا = 0؛ } باطل بھیجیں_یا_اسٹرنگ (چار * سٹرنگ_آف_چیکٹر) { جبکہ (* string_of_characters> 0) { ارسال_ا_چارٹر (* سٹرنگ_آف_چارٹر ++)؛ } } |