فهرست مطالب:

آردوینو ماشین حساب: 6 مرحله
آردوینو ماشین حساب: 6 مرحله

تصویری: آردوینو ماشین حساب: 6 مرحله

تصویری: آردوینو ماشین حساب: 6 مرحله
تصویری: The Sinclair Scientific Calculator has 6 digits of precision, 5 are shown on the display. 2024, اکتبر
Anonim
ماشین حساب آردوینو
ماشین حساب آردوینو

اگر تازه در حال برنامه نویسی جاسازی شده هستید ، برنامه نویسی همیشه سرگرم کننده است و Arduino یک بستر فوق العاده است. در این آموزش ما ماشین حساب خود را با آردوینو می سازیم. مقادیر را می توان از طریق یک صفحه کلید (صفحه کلید 4 × 4) ارسال کرد و نتیجه را می توان بر روی یک صفحه LCD (ماتریس نقطه × 2 16 16) مشاهده کرد. این ماشین حساب می تواند عملیات ساده مانند جمع ، تفریق ، ضرب و تقسیم را با اعداد کامل انجام دهد. اما وقتی مفهوم را درک کردید ، می توانید حتی توابع علمی را با توابع داخلی آردوینو پیاده سازی کنید. در پایان این پروژه ، نحوه استفاده از LCD 16x2 و صفحه کلید با آردوینو و همچنین برنامه ریزی آسان آنها را با استفاده آسان می دانید. کتابخانه های موجود همچنین خواهید فهمید که چگونه Arduino خود را برای انجام یک کار خاص برنامه ریزی کنید.

مرحله 1: موارد مورد نیاز

Arduino Uno (هر نسخه ای کار می کند) 16 × 2 LCD Display 4 × 4 Keypad 9V باتری 9 صفحه تخته و اتصال سیم

مرحله 2: نمودار مدار

مدار
مدار

مرحله 3: برنامه ماشین حساب Arduino

برنامه کامل آردوینو برای این پروژه در پایان این پروژه ارائه شده است. کد به قطعات کوچک معنی دار تقسیم شده است و در زیر توضیح داده شده است. همانطور که قبلاً گفته شد ما قصد داریم با استفاده از کتابخانه ها یک LCD و صفحه کلید را با Arduino وصل کنیم. بنابراین بگذارید ابتدا آنها را به Arduino IDE خود اضافه کنیم. کتابخانه برای LCD به طور پیش فرض در Arduino شما موجود است ، بنابراین لازم نیست نگران آن باشیم. برای کتابخانه صفحه کلید روی پیوند کلیک کنید تا از Github بارگیری شود. یک فایل ZIP دریافت خواهید کرد ، سپس این lib را با Sketch به Arduino اضافه کنید -> شامل کتابخانه -> فایل. ZIP را اضافه کرده و مکان را به این فایل بارگیری شده نشان دهید. پس از اتمام کار ، همه ما برای برنامه نویسی آماده شده ایم. اگرچه ما از کتابخانه ای برای استفاده از صفحه کلید استفاده کرده ایم ، اما باید چند جزئیات (در زیر نشان داده شده) در مورد صفحه کلید Arduino ذکر کنیم. متغیر ROWS و COLS نشان می دهد که صفحه کلید ما چند سطر و ستون دارد و نقشه کلید ترتیب قرار گرفتن کلیدها در صفحه کلید را نشان می دهد. صفحه کلیدی که من در این پروژه از آن استفاده می کنم به نظر می رسد که در زیر نشان داده شده است. نقشه کلید نیز همان را نشان می دهد. در ادامه اشاره کردیم که صفحه کلید با استفاده از متغیر rowPins و colPins به کدام پایه متصل شده است. بایت ROWS = 4؛ // چهار ردیف کنایت بایت COLS = 4؛ // سه ستون // تعریف کلیدهای Keymapchar [ROWS] [COLS] = {{'1'، '2'، '3'، 'A'}، {'4'، '5'، '6'، ' B '} ، {' 7 '،' 8 '،' 9 '،' C '} ، {'*'،' 0 '،'#'،' D '}} ؛ بایت rowPins [ROWS] = {0 ، 1 ، 2 ، 3} ؛ // صفحه کلید ROW0 ، ROW1 ، ROW2 و ROW3 را به این پین های آردوینو وصل کنید. byte colPins [COLS] = {4 ، 5 ، 6 ، 7} ؛ // صفحه کلید COL0 ، COL1 و COL2 را به این پین های آردوینو وصل کنید. هنگامی که ما از نوع صفحه کلیدی که استفاده می کنیم و نحوه اتصال آن اشاره کردیم ، می توانیم با استفاده از این جزئیات صفحه کلید را با استفاده از خط زیر ایجاد کنیم Keypad kpd = Keypad (makeKeymap) ، rowPins ، colPins ، ROWS ، COLS) ؛ // صفحه کلید را ایجاد کنید به طور مشابه ، ما همچنین باید بگوییم که LCD به کدام پین های Arduino متصل است. طبق نمودار مدار ما ، تعاریف مانند زیر int rs = 8 ، en = 9 ، d4 = 10 ، d5 = 11 ، d6 = 12 ، d7 = 13 خواهد بود. // پین هایی که LCD به آنها متصل است LiquidCrystal LCD (rs، en، d4، d5، d6، d7) ؛ // در داخل تابع راه اندازی ، ما فقط نام پروژه را نمایش می دهیم و سپس به حلقه while در جایی که پروژه اصلی قرار دارد ، ادامه می دهیم. اساساً ، ما باید بررسی کنیم که آیا چیزی روی صفحه کلید تایپ می شود ، اگر تایپ شده باشد ، باید تشخیص دهیم آنچه که تایپ می شود و سپس با فشار دادن "=" آن را به یک متغیر تبدیل می کنیم ، باید نتیجه را محاسبه کرده و در نهایت آن را روی LCD نمایش دهیم. این دقیقاً همان کاری است که در داخل تابع حلقه انجام می شود مانند تصویر زیر keykey = kpd.getKey ()؛ // ذخیره مقدار کلید فشرده شده در یک charif (key! = NO_KEY) DetectButtons () ؛ if (result == true) CalculateResult () ؛ DisplayResult () ؛ آنچه در داخل هر تابع اتفاق می افتد با استفاده از خطوط نظر توضیح داده می شود ، کد کامل زیر را مرور کنید ، با آن کنار بیایید تا نحوه عملکرد آن را بفهمید. اگر در مورد خط خاصی شک دارید ، می توانید از بخش نظرات یا انجمن ها استفاده کنید.

مرحله 4:

مرحله 5: کار با ماشین حساب آردوینو

کار با ماشین حساب آردوینو
کار با ماشین حساب آردوینو

اتصالات را مطابق نمودار مدار انجام دهید و کد زیر را بارگذاری کنید. اگر خطا نشان می دهد ، مطمئن شوید که کتابخانه را طبق دستورالعمل بالا اضافه کرده اید. همچنین می توانید شبیه سازی را امتحان کنید تا بررسی کنید که آیا مشکل از سخت افزار شما است. اگر همه چیز مطابق آنچه باید انجام شود ، انجام می شود ، سخت افزار شما در زیر با LCD نمایش داده می شود که این ماشین حساب آردوینو را با استفاده از صفحه کلید 4x4 در حال اجرا نشان می دهد از آنجا که صفحه کلید مورد استفاده در اینجا علامت گذاری مناسب بر روی آن ندارد ، من فرض کردم که حروف به عنوان عملگر هستند در زیر ذکر شده است شخصیت روی صفحه فرض بر این است که "A" اضافه (+) "B" تفریق (-) "C" ضرب (*) "D" (() "*" Clear (C) "#" برابر (=) شما می توانید از نشانگر برای نوشتن آنچه که هر دکمه در واقع نشان می دهد استفاده کنید. با انجام این کار ، می توانید مستقیماً از ماشین حساب استفاده کنید. عدد را تایپ می کند و در خط دوم ظاهر می شود عملوند را فشار دهید و شماره دوم خود را تایپ کنید و در نهایت کلید "#" را فشار دهید تا نتیجه خود را بگیرید. همچنین می توانید این ماشین حساب Arduino مبتنی بر صفحه لمسی را امتحان کنید.

مرحله 6: کد

/ * * برنامه ماشین حساب صفحه کلید آردوینو */#شامل // فایل هدر برای LCD از https://www.arduino.cc/fa/Reference/LiquidCrystal#include // فایل سربرگ برای صفحه کلید از https://github.com/ کریس-A/Keypadconst byte ROWS = 4؛ // چهار ردیف کنایت بایت COLS = 4؛ // سه ستون // تعریف کلیدهای Keymapchar [ROWS] [COLS] = {{'7'، '8'، '9'، 'D'}، {'4'، '5'، '6'، ' C '}، {' 1 '،' 2 '،' 3 '،' B '}، {'*'،' 0 '،'#'،' A '}}؛ byte rowPins [ROWS] = {0، 1 ، 2 ، 3} ؛ // صفحه کلید ROW0 ، ROW1 ، ROW2 و ROW3 را به این پین های آردوینو وصل کنید. byte colPins [COLS] = {4 ، 5 ، 6 ، 7} ؛ // صفحه کلید COL0 ، COL1 و COL2 را به این پین های آردوینو وصل کنید. Keypad kpd = Keypad (makeKeymap (keys) ، rowPins ، colPins ، ROWS ، COLS) ؛ // ایجاد صفحه کلید int rs = 8 ، en = 9 ، d4 = 10 ، d5 = 11 ، d6 = 12 ، d7 = 13 ؛ // پین هایی که LCD به آنها متصل است LiquidCrystal LCD (rs، en، d4، d5، d6، d7) ؛ طولانی Num1 ، Num2 ، Number ؛ کلید char ، اقدام ؛ boolean result = false؛ void setup () {lcd.begin (16، 2)؛ // ما از یک صفحه LCD 16*2 lcd.print ("ماشین حساب DIY") استفاده می کنیم. // نمایش یک پیام مقدماتی lcd.setCursor (0 ، 1) ؛ // مکان نما را روی ستون 0 ، خط 1 lcd.print ("-CircuitDigest") تنظیم کنید ؛ // نمایش تاخیر پیام مقدماتی (2000) ؛ // منتظر بمانید تا اطلاعات نمایش داده شود lcd.clear ()؛ // سپس آن را تمیز کنید} void loop () {key = kpd.getKey ()؛ // ذخیره مقدار کلید فشرده شده در یک charif (key! = NO_KEY) DetectButtons () ؛ if (result == true) CalculateResult () ؛ DisplayResult () ؛ } void DetectButtons () {lcd.clear ()؛ // سپس آن را تمیز کنید اگر (کلید == '*') // اگر دکمه لغو {Serial.println ("لغو دکمه") فشار داده می شود ؛ تعداد = Num1 = Num2 = 0 ؛ result = false؛} if (key == '1') // If Button 1 is pressed {Serial.println ("Button 1")؛ اگر (تعداد == 0) شماره = 1 ؛ else شماره = (شماره*10) + 1؛ // دو بار}} فشار دهید (کلید == '4') // اگر دکمه 4 {Serial.println ("دکمه 4") فشار داده شود ؛ اگر (تعداد == 0) شماره = 4 ؛ else شماره = (شماره*10) + 4 ؛ // دو بار} if (key == '7') // اگر دکمه 7 فشرده شود {Serial.println ("Button 7") ؛ اگر (تعداد == 0) شماره = 7 ؛ else شماره = (شماره*10) + 7 ؛ // دو بار} if (key == '0') {Serial.println ("Button 0")؛ // دکمه 0 فشار داده می شود اگر (تعداد == 0) شماره = 0 ؛ else شماره = (شماره*10) + 0 ؛ // دو بار} اگر (کلید == '2') // دکمه 2 فشرده شود {Serial.println ("دکمه 2") ؛ اگر (تعداد == 0) شماره = 2 ؛ else شماره = (شماره*10) + 2؛ // دو بار} if (key == '5') {Serial.println ("Button 5")؛ اگر (تعداد == 0) شماره = 5 ؛ else شماره = (شماره*10) + 5؛ // دو بار} if (key == '8') {Serial.println ("Button 8")؛ اگر (تعداد == 0) شماره = 8 ؛ else شماره = (شماره*10) + 8؛ // دو بار} if (key == '#') {Serial.println ("Button Equal") فشار داده شده است؛ Num2 = تعداد ؛ نتیجه = درست ؛ } if (key == '3') {Serial.println ("Button 3")؛ اگر (تعداد == 0) شماره = 3 ؛ else شماره = (شماره*10) + 3؛ // دو بار} if (key == '6') {Serial.println ("Button 6")؛ اگر (تعداد == 0) شماره = 6 ؛ else شماره = (شماره*10) + 6 ؛ // دو بار} if (key == '9') {Serial.println ("Button 9")؛ اگر (تعداد == 0) شماره = 9 ؛ else شماره = (شماره*10) + 9 ؛ // دو بار} if (key == 'A' || key == 'B' || key == 'C' || key == 'D') فشار داده شده است // تشخیص دکمه ها در ستون 4 {Num1 = Number؛ تعداد = 0 ؛ if (key == 'A') {Serial.println ("Add")؛ action = '+'؛} if (key == 'B') {Serial.println ("تفریق")؛ action = '-'؛ } if (key == 'C') {Serial.println ("ضرب")؛ action = '*'؛} if (key == 'D') {Serial.println ("Devesion")؛ action = '/'؛} تاخیر (100)؛ }} void CalculateResult () {if (action == '+') Number = Num1+Num2؛ if (action == '-') Number = Num1-Num2؛ if (action == '*') Number = Num1*Num2؛ if (action == '/') Number = Num1/Num2؛ } void DisplayResult () {lcd.setCursor (0، 0)؛ // مکان نما را روی ستون 0 ، خط 1 lcd.print (Num1) تنظیم کنید ؛ lcd.print (action) ؛ lcd.print (Num2) ؛ if (result == true) {lcd.print ("=")؛ lcd.print (Number)؛} // نمایش نتیجه lcd.setCursor (0، 1)؛ // مکان نما را روی ستون 0 ، خط 1 lcd.print (Number) تنظیم کنید ؛ // نمایش نتیجه}

توصیه شده: