7セグLED表示 その2 1文字でも情報は伝えられる

 室温であれば、24.5、時刻であれば12:09などと、4桁表示ができれば多くの情報を伝えやすいです。前回、1桁の7セグLEDの表示ができました。1桁で、温度を表示できないかトライします。

温度の測定

 アナログ温度センサのLM60BIZを利用します。小信号用のトランジスタのように3本脚です。

 電源VsはVin端子、GNDはGND端子、出力Voはアナログ入力A0へ挿し込みます。温度Tは測定した電圧Voから、

  T = ( Vo-424[mV] ) / 6.25[mV]

で求まります。

スケッチ

17行; analogRead(A0)でセンサを読みます。
18行; 電圧値voltageA0 に直します。
19行; 温度tempを計算します。室温2桁だと想定し、String(temp, DEC)で文字列に変換します。その文字列の1文字目はString(temp, DEC).charAt(0)で取り出せます。2文字目はString(temp, DEC).charAt(1)です。取り出した文字をString((String(temp, DEC).charAt(0))).toInt() で整数に直します。

24行; これを7セグ表示の文字列の引数に入れます。
  moji[String((String(temp, DEC).charAt(0))).toInt()]
 そうすると、7セグにその数字が表示されます。2文字目はドットとともに表示します。
  moji[String((String(temp, DEC).charAt(1))).toInt()] | B10000000

#include <SPI.h>
#define SS 10 // Chip Select
#define MOSI 11
#define SCK 13
char moji[16]{
B00111111, B00000110, B01011011, B01001111, B01100110, B01101101, B01111101, B00000111, B01111111, B01100111, B01011111, B01111100, B01011000, B01011110, B01111001, B01110001
// 0 1 2 3 ...
};

void setup() {
pinMode(SS,OUTPUT); digitalWrite(SS,1);
Serial.begin (9600);
SPI.begin();
}

void loop() {
int sensorValueA0 = analogRead(A0);
float voltageA0 = sensorValueA0 * (5 / 1023.0);
float temp=(voltageA0-0.424)/0.00625;
Serial.println(temp);
// Serial.println( String((String(temp, DEC).charAt(0))).toInt() );
// Serial.println( String((String(temp, DEC).charAt(1))).toInt() );
digitalWrite(SS,0);
SPI.transfer(moji[String((String(temp, DEC).charAt(0))).toInt()]);
digitalWrite(SS,1);
delay(1000);
digitalWrite(SS,0);
SPI.transfer(moji[String((String(temp, DEC).charAt(1))).toInt()] | B10000000);
digitalWrite(SS,1);
delay(2000);
}

 測定結果20℃を表示しています。


前へ

7セグLED表示 その1 1文字

次へ

7セグLED表示 その3 4文字