C言語覚書 (数値の表示)

2013/08/01


◆ 数値を文字列へ変換

センサー等を使用したプログラムを組む時にデバッグ用の出力が欲しい時がある。 Arduino であればシリアル通信でモニタできるが、ATtiny13A で Arduino の環境が使用できない場合どうしても LCD で確認する必要がある。

センサーで得た数値を表示させるには、数値を書式指定の文字列に変換する必要があり毎度毎度調べ直しているのでページにまとめておく。

現在、着手しているのは ATtiny13A で I2C 制御のセンサーを読み取り、同じく I2C 制御のミニ LCD で読取値を表示させたい。

読取値は最大 5 桁の整数の値と、最大 3 桁の整数の値である。 これを 8×2 の LCD に表示させる。

数値を文字列に変換するには、sprintf を使用する。 そのためには stdio.h をインクルードしなければならない。

以下は実際のプログラム例である。

#include <stdio.h>

char str[10];
uint16_t num = 12345;

sprintf(str, "%d", num);

基本は上記のプログラムなのだが、数値が毎度同じ桁で出力されるわけではないので、フォーマットをそろえる必要がある。

下のプログラムは文字数を 6 文字とし、数値のないところは空白となるようにする。

#include <stdio.h>

char str[10];
uint16_t num = 12345;

sprintf(str, "%6d", num);

先頭に文字を付け表示らしくしてみる。

#include <stdio.h>

char str[10];
uint16_t num = 12345;

sprintf(str, "V:%6d", num);

小数点を表示させたいとき。

#include <stdio.h>

char str[10];
float num = 12.34;

f\sprintf(str, "V:%6.3f", num);

◆ LCD の文字列出力関数

使用する LCD により命令は異なるが大差無いので Arduino のキャラクタ液晶のページで使用した文字列出力の関数をあげておく。

// 文字列の表示
void LCD_print(char *c) {
  while(*c) {
    writeData(1, *c++);
  }
}