ArduinoでAQM1602を 使う

arduino AQM1602 使う
スポンサーリンク

AQM1602は、16列×2行の文字を表示できるLCDモジュールです。今回は2024年10月現在の情報で、アルディーノでAQM1602の使いかたについていろいろ説明して行きたいと思います。

スポンサーリンク

動作環境

  • アルディーノIDE2.3.3最新版
  • アルディーノ uno ,nano , megaTinyCore
  • Windows11

接続図

今回はnanoを使って試してみましたので下図のように接続します。

ライブラリーを使う方法

まずライブラリー(ST7032_asukiaaa.h)を使って簡単に表示させてみたいと思います。
このライブラリーのインストール方法は私のこちらのブログに書かれておりますのでご確認ください。

サンプルプログラム

GitHubに載っていた、ライブラリーを使ったサンプルプログラムです。

#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd(0x3E);  // アドレスを指定しなくても動きます
//ST7032_asukiaaa lcd;
void setup() {
  lcd.begin(16, 2); // LCD columns and rows.
  lcd.setContrast(10);
  // If lcd become black, reduced value for contrast
  // lcd.setContrast(10);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}

実行すると下図のように液晶が表示されます。

このライブラリーはシンプルで非常に使いやすいのでこれが一番かもしれませんが、カタカナは表示できないようです。

ライブラリーを説明します

主に使う関数は下記の3つぐらいのようです。
● lcd.setCursor(0, 1); 表示させる行と列を指定します。
● lcd.print(“abcd”); 引数は、文字列、整数、float整数、などが使えるようです。
● lcd.clear();全画面をクリアします。

私は列を指定して全画面ではなく列をクリアする関数を一つ追加しておきました。
● rows_clear(0);引数にゼロを入れると1行目、1を入れると2行目がだけがクリアされます。
以下がそのプログラムです。

#include <ST7032_asukiaaa.h>

ST7032_asukiaaa lcd(0x3E);  // アドレスを指定しなくても動きます
//ST7032_asukiaaa lcd;
void setup() {
  lcd.begin(16, 2); // LCD columns and rows.
  lcd.setContrast(10);
  // If lcd become black, reduced value for contrast
  // lcd.setContrast(10);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}
//  追加した関数です
void rows_clear(int x) {
  lcd.setCursor(0, x);
  lcd.print("                ");
  lcd.setCursor(0, x);
}

ライブラリーを使わず自分でプログラムする方法(2025・2月改良)

私はardinoのプログラム(C++)にあまり詳しくありませんが、秋月秋月電子の使用説明書を参考に自分なりに作ってみました。
表示できるのは、文字列、整数型変数、float変数(整数部6桁小数部2桁)でカタカナを簡易的に表示できます。

#include <Wire.h>
#define LCD_ADRS 0x3E
int kana[] = { 0, 1, 2, 3, 4 };
String text = "Arduino";
float yy = 123.456;
void setup() {
  Wire.begin();
  init_LCD();
  write_char("A");
  write_num(456);
  set_cursor(0, 1);
  write_kana(kana, 5);
  write_char(" ");
  write_floatnum(yy);
}
//データ書き込み
void writeData(byte t_data) {
  Wire.beginTransmission(LCD_ADRS);
  Wire.write(0x40);
  Wire.write(t_data);
  Wire.endTransmission();
  delay(10);
}
//コマンド書き込み
void writeCommand(byte t_command) {
  Wire.beginTransmission(LCD_ADRS);
  Wire.write(0x00);
  Wire.write(t_command);
  Wire.endTransmission();
  delay(10);
}
void init_LCD() {
  delay(100);
  writeCommand(0x38);
  delay(20);
  writeCommand(0x39);
  delay(20);
  writeCommand(0x14);
  delay(20);
  writeCommand(0x73);
  delay(20);
  writeCommand(0x52);
  delay(20);
  writeCommand(0x6C);
  delay(20);
  writeCommand(0x38);
  delay(20);
  writeCommand(0x01);
  delay(20);
  writeCommand(0x0C);
  delay(20);
}
void write_char(String text) {
  for (int i = 0; i < text.length(); i++) {
    writeData(text[i]);
  }
}
void write_num(int x) {
  String text = String(x);
  for (int i = 0; i < text.length(); i++) {
    writeData(text[i]);
  }
}
void write_floatnum(float x) {
  char buffer[10];
  dtostrf(x, 9, 2, buffer);
  for (int i = 0; i < strlen(buffer); i++) {
    if (buffer[i] != 0x20) {
      writeData(buffer[i]);
    }
  }
}
void write_kana(int x[], int y) {
  for (int i = 0; i < y; i++) {
    writeData(x[i] + 0xb1);
  }
}
void set_cursor(int x, int y) {
  if (y == 0) {
    writeCommand((x + 0x40) + 0x40);
  }
  if (y == 1) {
    writeCommand((x + 0x40) + 0x80);
  }
}
void lcd_clear() {
  writeCommand(0x01);
}
void loop() {
}

主な使いかたを説明します。
● set_cursor(0, 0); カーソルの行と列を指定します。
●  lcd_clear(); 全画面をクリアします
●  write_num(k); 整数を指定できます。
●  write_floatnum(float);floatタイプ
●  write_char(“ABC”, 3); 最初に文字列または文字変数、次にその文字列の長さを指定します。
私の知識では文字列の長さまで指定しないとうまく表示できませんでした。

● write_char(“ABC”); 文字列の長さを指定しないように改良しました(2025・2・9)。
● write_kana(kana, 5); カタカナを簡易的に表示させてみました。
表示させるのは下記のルールに従って表示させます。
アイウエオ・・・・ン アは0番目、イは1番目、ウは2番目・・・ンは45番目、のルールで
変数の配列で(インデックス)指定します。
アイウエオの場合は
int aiueo[ ] = {0,1,2,3,4}; 最後のン は45番目です。
write_kana(aiueo, 5); 引数は、aiueo 、次に文字数、2つでアイウエオが表示されます。

表示画像です(上記のプログラムの表示ではありません)

今回は以上です興味があった方は試してみてください。

タイトルとURLをコピーしました