工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoで作る電卓 - 16x2 LCDと4x4キーパッドで四則演算

必要な部品と材料

部品 数量
Arduino Uno(互換機可) 1
16×2 キャラクターLCD(HD44780互換) 1
4×4 マトリックスキーパッド 1
9V電池(またはUSB給電) 1
ブレッドボード & ジャンパーワイヤー 1式

プロジェクト概要

Arduino Uno、16×2 LCD、4×4キーパッドを用いて、四則演算(加減乗除)が可能なスタンドアロン電卓を作ります。LiquidCrystal ライブラリと Keypad ライブラリを使用することで、比較的簡単に実装できます。Arduinoプログラミングの基礎(変数、条件分岐、ループ、関数、ライブラリ利用)を学ぶのに最適なプロジェクトです。

必要な材料

ピン接続

Arduinoピン 接続先
D0 〜 D7 キーパッド 1〜8番ピン(行/列)
D8 LCD RS (ピン4)
D9 LCD Enable (ピン6)
D10 LCD D4 (ピン11)
D11 LCD D5 (ピン12)
D12 LCD D6 (ピン13)
D13 LCD D7 (ピン14)
5V LCD VDD (ピン2), キーパッド共通
GND LCD VSS/VEE/RW (ピン1,3,5), キーパッド共通

注意: 一部のArduinoボードでは、ピン0(D0)とピン1(D1)に配線があるとスケッチアップロード時にエラーになることがあります。その場合はアップロード時にキーパッドを外してください。

Arduinoで作る電卓 - 16x2 LCDと4x4キーパッドで四則演算
配線完了後の様子

コード解説

主な処理フロー:

  1. setup():LCD初期化、起動メッセージ表示
  2. loop():キーパッド入力をポーリングし、DetectButtons() でキー判定
  3. 数字キー:入力中の数値を桁上げして構築(Number = Number*10 + digit)
  4. 演算子キー(A:+, B:-, C:*, D:/):第一オペランド Num1 確定、演算子 action 記録、入力バッファクリア
  5. # キー:第二オペランド Num2 確定、計算フラグ result=true
  6. * キー:全クリア(リセット)
  7. CalculateResult():演算子に応じて四則演算実行
  8. DisplayResult():LCDに式と結果を表示

完全なArduinoスケッチ

/* Arduino Keypad Calculator */
#include <LiquidCrystal.h>
#include <Keypad.h>

const byte ROWS = 4;
const byte COLS = 4;

char keys[ROWS][COLS] = {
  {'7','8','9','D'},
  {'4','5','6','C'},
  {'1','2','3','B'},
  {'*','0','#','A'}
};

byte rowPins[ROWS] = {0, 1, 2, 3};
byte colPins[COLS] = {4, 5, 6, 7};

Keypad kpd = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

long Num1, Num2, Number;
char key, action;
boolean result = false;

void setup() {
  lcd.begin(16, 2);
  lcd.print("DIY Calculator");
  lcd.setCursor(0, 1);
  lcd.print("-CircuitDigest");
  delay(2000);
  lcd.clear();
}

void loop() {
  key = kpd.getKey();
  if (key != NO_KEY) DetectButtons();
  if (result == true) CalculateResult();
  DisplayResult();
}

void DetectButtons() {
  lcd.clear();
  if (key == '*') { Number = Num1 = Num2 = 0; result = false; return; }

  if (key >= '0' && key <= '9') {
    if (Number == 0) Number = key - '0';
    else Number = Number * 10 + (key - '0');
  }

  if (key == '#') { Num2 = Number; result = true; }

  if (key == 'A' || key == 'B' || key == 'C' || key == 'D') {
    Num1 = Number;
    Number = 0;
    if (key == 'A') action = '+';
    if (key == 'B') action = '-';
    if (key == 'C') action = '*';
    if (key == 'D') action = '/';
    delay(100);
  }
}

void CalculateResult() {
  if (action == '+') Number = Num1 + Num2;
  if (action == '-') Number = Num1 - Num2;
  if (action == '*') Number = Num1 * Num2;
  if (action == '/') Number = (Num2 != 0) ? Num1 / Num2 : 0; // ゼロ除算ガード
}

void DisplayResult() {
  lcd.setCursor(0, 0);
  lcd.print(Num1);
  lcd.print(action);
  lcd.print(Num2);
  if (result) { lcd.print(" ="); lcd.print(Number); }
  lcd.setCursor(0, 1);
  lcd.print(Number);
}

※元コードの冗長な if 連なりを簡潔化しています。動作は同等です。

回路図

Arduinoで作る電卓 - 16x2 LCDと4x4キーパッドで四則演算
Fritzing等で作成された回路図

学習ポイント

製造プロセス

  1. ローラーピン:エトルリア起源から現代の職人技へ
  2. 現代ボウリングピンの進化と職人技
  3. USB HID 攻撃の防止:Arduino Leonardo キーボードエクスプロイト実演
  4. Arduino UnoでAtmel AT89シリーズを簡単プログラミング──ステップバイステップガイド
  5. Bluetooth操作のArduinoスパイボットを自作する
  6. ArduinoでRC受信機のPPM信号をデコードする──ステップバイステップガイド
  7. FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
  8. 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
  9. 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
  10. MIDIキーボードをArduino・LED・MuseScoreでスマートピアノチューターに変身
  11. Arduino Unoで25kHz 4ピンPWMファンを制御 – 製作・コード・テスト