
به نام خدا
ماشین حساب آردوینو با استفاده از صفحه کلید ۴×۴ بسازید

در این آموزش ما ماشین حساب خود را با آردوینو ساخته ایم، اعداد را میتوان از طریق یک صفحه کلید (صفحه کلید ۴×۴) ارسال کرد و حاصل آن را روی یک صفحه نمایش LCD 2*16 مشاهده کرد .این ماشین حساب می تواند عملیات ساده ای مانند جمع ،تفریق، ضرب و تقسیم را با اعداد صحیح انجام داد.
قطعات مورد نیاز:
۱-آردوینو UNO
۲-LCD 16×2
۳- صفحه کلید ۴×۴
۴- باتری ۹V
۵-برد بورد
۶-سیم بردبورد

مدار پروژه :
ما LCD را به صورت ۴ بیتی راه اندازی می کنیم ، بنابراین تنها چهار پین آخر برای ارسال داده به LCD به آردوینو وصل می شود. صفحه کلید دارای ۸ پین خروجی است که به پین ۰ تا پین ۷ آردوینو متصل می شود، شما می توانید از جدول زیر برای اتصال صفحه کلید به آردوینو استفاده کنید.
| پین آردوینو: | متصل به: |
| D0 | اولین پین از کیبورد |
| D1 | دومین پین از کیبورد |
| D2 | سومین پین از کیبورد |
| D3 | چهارمین پین از کیبورد |
| D4 | پنجمین پین از کیبورد |
| D5 | ششمین پین از کیبورد |
| D6 | هفتمین پین از کیبورد |
| D7 | هشتمین پین از کیبورد |
| D8 | پین RS از پین های LCD (پین ۴) |
| D9 | پین E از پین های LCD |
| D10 | پین D4 از LCD |
| D11 | پین D5 از LCD |
| D12 | پین D6 از LCD |
| D13 | پین D7 از LCD |
| +۵V | وصل شود به پین vdd از LCD |
| زمین | وصل شود به پین های VSS ،VEE و RW از LCD (پین های ۱،۳و۵) |
در هنگام آپلود برنامه بر روی برد آردوینو ممکن است خطایی نشان داده شود ، این خطا به دلیل اتصال پین ۰ و ۱ آردوینو به یک قطعه الکترونیکی است. بنابراین هنگام آپلود برنامه به برد، صفحه کلید خود را از برد جدا کنید . ( پین های ۰ و ۱ آردوینو UNO موقع پروگرام کردن نباید به جایی متصل باشند )

شبیه سازی ماشین حساب آردوینو:
ما میتوانیم با استفاده از نرم افزار poroteus پروژه ی خود را شبیه سازی کنیم وآن را مورد بررسی قرار دهیم .
در صورتی که نرم افزار porteus شما برد آردوینو را ندارد، میتوان به راحتی کتابخانه ی مربوط به آن را دانلود کرده و به کتابخانه های proteus خود اضافه کرد.
هنگامی که برد آردوینو را در proteus دارید کافی است keypad و alphanomic LCD را اضافه کنید و اتصالات لازم را انجام دهید.

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

از آنجا که صفحه کلید مورد استفاده در این جا دارای نشانه های مناسب نیست. کاراکترهایی را به عنوان معرفی می کنیم.
| کارکتر های کیبورد | کارکتر فرض شده |
| “A” | جمع (+) |
| “B” | تفریق (-) |
| “C” | ضرب (*) |
| “D” | تقسیم (/) |
| “*” | پاک کردن (C) |
| “#” | مساوی (=) |
دانلود کد برنامه :
دانلود فایل
/*
* Arduino Keypad calculator Program
*/
#include <LiquidCrystal.h> //
#include <Keypad.h> //
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'۷','۸','۹','D'},
{'۴','۵','۶','C'},
{'۱','۲','۳','B'},
{'*','۰','#','A'}
};
byte rowPins[ROWS] = { 0, 1, 2, 3 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 4, 5, 6, 7 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // Create the Keypad
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
long Num1,Num2,Number;
char key,action;
boolean result = false;
void setup() {
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.print("DIY Calculator"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("-CircuitDigest"); //Display a intro message
delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}
void loop() {
key = kpd.getKey(); //storing pressed key value in a char
if (key!=NO_KEY)
DetectButtons();
if (result==true)
CalculateResult();
DisplayResult();
}
void DetectButtons()
{
lcd.clear(); //Then clean it
if (key=='*') //If cancel Button is pressed
{Serial.println ("Button Cancel"); Number=Num1=Num2=0; result=false;}
if (key == '1') //If Button 1 is pressed
{Serial.println ("Button 1");
if (Number==0)
Number=1;
else
Number = (Number*10) + 1; //Pressed twice
}
if (key == '4') //If Button 4 is pressed
{Serial.println ("Button 4");
if (Number==0)
Number=4;
else
Number = (Number*10) + 4; //Pressed twice
}
if (key == '7') //If Button 7 is pressed
{Serial.println ("Button 7");
if (Number==0)
Number=7;
else
Number = (Number*10) + 7; //Pressed twice
}
if (key == '0')
{Serial.println ("Button 0"); //Button 0 is Pressed
if (Number==0)
Number=0;
else
Number = (Number*10) + 0; //Pressed twice
}
if (key == '2') //Button 2 is Pressed
{Serial.println ("Button 2");
if (Number==0)
Number=2;
else
Number = (Number*10) + 2; //Pressed twice
}
if (key == '5')
{Serial.println ("Button 5");
if (Number==0)
Number=5;
else
Number = (Number*10) + 5; //Pressed twice
}
if (key == '8')
{Serial.println ("Button 8");
if (Number==0)
Number=8;
else
Number = (Number*10) + 8; //Pressed twice
}
if (key == '#')
{Serial.println ("Button Equal");
Num2=Number;
result = true;
}
if (key == '3')
{Serial.println ("Button 3");
if (Number==0)
Number=3;
else
Number = (Number*10) + 3; //Pressed twice
}
if (key == '6')
{Serial.println ("Button 6");
if (Number==0)
Number=6;
else
Number = (Number*10) + 6; //Pressed twice
}
if (key == '9')
{Serial.println ("Button 9");
if (Number==0)
Number=9;
else
Number = (Number*10) + 9; //Pressed twice
}
if (key == 'A' || key == 'B' || key == 'C' || key == 'D') //Detecting Buttons on Column 4
{
Num1 = Number;
Number =0;
if (key == 'A')
{Serial.println ("Addition"); action = '+';}
if (key == 'B')
{Serial.println ("Subtraction"); action = '-'; }
if (key == 'C')
{Serial.println ("Multiplication"); action = '*';}
if (key == 'D')
{Serial.println ("Devesion"); action = '/';}
delay(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); // set the cursor to column 0, line 1
lcd.print(Num1); lcd.print(action); lcd.print(Num2);
if (result==true)
{lcd.print(" ="); lcd.print(Number);} //Display the result
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print(Number); //Display the result
}
دیدگاهها (0)