「I2C LCD Brakout」を使ってみた。という記事があるのですが、この記事を読んでくださった方から「文字だけじゃなくて、int型変数の中身も表示したい!」というお声をいただきました。と言うわけで、過去の記事のプログラムに少しだけ追記をしてみました。
追加したのは以下の関数です。
void lcd_printInt(int num) { char int2str[10]; sprintf(int2str,"%d",num); lcd_printStr(int2str); }
sprintf関数を使ってint変数の中身をchar配列に変えてるだけですね。
この関数を追加した全文が次のプログラムです。
#include <Wire.h> #define vddPin 16 // ArduinoA2 #define gndPin 17 // ArduinoA3 #define sdaPin 18 // ArduinoA4 #define sclPin 19 // ArduinoA5 #define I2Cadr 0x3e // 固定 byte contrast = 35; // コントラスト(0~63) void setup() { pinMode(gndPin, OUTPUT); digitalWrite(gndPin, LOW); pinMode(vddPin, OUTPUT); digitalWrite(vddPin, HIGH); delay(500); Wire.begin(); lcd_cmd(0b00111000); // function set lcd_cmd(0b00111001); // function set lcd_cmd(0b00000100); // EntryModeSet lcd_cmd(0b00010100); // interval osc lcd_cmd(0b01110000 | (contrast & 0xF)); // contrast Low lcd_cmd(0b01011100 | ((contrast >> 4) & 0x3)); // contast High/icon/power lcd_cmd(0b01101100); // follower control delay(200); lcd_cmd(0b00111000); // function set lcd_cmd(0b00001100); // Display On lcd_cmd(0b00000001); // Clear Display delay(2); } void loop() { static int count = 0; lcd_clear(); lcd_setCursor(0, 0); lcd_printStr("SWITCH"); lcd_setCursor(1, 1); lcd_printInt(count); delay(1000); count++; } void lcd_cmd(byte x) { Wire.beginTransmission(I2Cadr); Wire.write(0b00000000); // CO = 0,RS = 0 Wire.write(x); Wire.endTransmission(); } void lcd_clear() { lcd_cmd(0b00000001); } void lcd_contdata(byte x) { Wire.write(0b11000000); // CO = 1, RS = 1 Wire.write(x); } void lcd_lastdata(byte x) { Wire.write(0b01000000); // CO = 0, RS = 1 Wire.write(x); } // 文字の表示 void lcd_printStr(const char *s) { Wire.beginTransmission(I2Cadr); while (*s) { if (*(s + 1)) { lcd_contdata(*s); } else { lcd_lastdata(*s); } s++; } Wire.endTransmission(); } // 表示位置の指定 void lcd_setCursor(byte x, byte y) { lcd_cmd(0x80 | (y * 0x40 + x)); } void lcd_printInt(int num) { char int2str[10]; sprintf(int2str,"%d",num); lcd_printStr(int2str); }
このプログラムを実行すると1秒ごとに数値がカウントアップしている様子がLCDで確認できると思います。
一応「int型の変数の中身を表示したい!」というお声には答えられたかと思いますが、おそらくこのままでは「やりたいこととちょっと違う」という事態になるかもしれません。
そんな時は追加した関数をちょこっといじれば、目的の形になると思いますのでぜひ挑戦してみて下さい。