PICSYS24-COREに、CLCD-BOOSTERを搭載し、CLCD-BOOSTERに搭載されている温度センサーと光センサーを読み取って、文字LCDに値を出力すると例をPICSYS24でスケッチしてみました。
PICSYS24-COREでCLCD-BOOSTERを利用したスケッチの実行例
上の写真を見てください。ArduinoにCLCD-BOOSTERを乗せたもの???ではありません。ベースのボードが黒く微妙にArduinoと異なってますよね。PICSYS24-COREです。:-)
CLCD-BOOSTERのジャンパーの設定は以下の通りです。
以下のスケッチとほぼ同じ機能のArduinoのスケッチと見比べてみると、類似と相違が見て取れて面白いかもしれません。
#include "picsys24.h"
#include <stdio.h> // sprintf
char buf1[10] ;
void
setup()
{
pinMode(DX6, INPUT) ; // SW1
pinMode(DX7, INPUT) ; // SW2
pinMode(DX8, INPUT) ; // SW3
pinMode(DX13, OUTPUT) ; // LED1
pinMode(DX10, OUTPUT) ; // LED2
analogReference(EXTERNAL) ; // 2.5Vの電圧リファレンスを利用
// 文字LCDを初期化
CLCD_init(CLCD_RS, CLCD_E, CLCD_DB4, CLCD_DB5, CLCD_DB6, CLCD_DB7) ;
// 起動メッセージ
CLCD_puts("PICSYS24+BOOSTER") ;
CLCD_pos(1, 8) ;
CLCD_puts("MicroFan") ;
delayMilliseconds(5000) ;
}
void
loop()
{
int v ;
float temp ;
// SWの内容をLEDに反映させる
digitalWrite(DX13, !digitalRead(DX6)) ;
digitalWrite(DX10, !digitalRead(DX7)) ;
CLCD_clear() ; // 文字LCDのクリア
v = analogRead(AX4) ; // 光センサの読み取り
CLCD_pos(0, 0) ;
CLCD_puts("\261\266\331\273 ") ; // アカルサ
sprintf(buf1, "%4d", v) ; // 4文字分の枠を取って整数値で出力
CLCD_puts(buf1) ;
v = analogRead(AX5) ; // 温度センサの読み取り
temp = 2.5 / 1024 * v ; // 読み取った値を電圧に換算
temp -= 0.4 ; // 温度センサーの0度のオフセット:400mV
temp /= 0.01953 ; // 1度あたり19.53mVの電圧増加
CLCD_pos(1, 0) ;
CLCD_puts("\265\335\304\336 ") ; // オンド
sprintf(buf1, "%4d", v) ; // 温度センサの生の値
CLCD_puts(buf1) ;
CLCD_pos(1, 10) ;
sprintf(buf1, "%.1f", temp) ; // 小数点以下1桁の実数値で出力
CLCD_puts(buf1) ;
delayMilliseconds(100) ;
}
文字LCDへの出力では、バックスラッシュもしくは円マークで始まるわけのわからない?数字の文字列を出力していますが、これは文字コードを8進数であらわしたもので、メッセージの出力に文字LCDのカタカナフォントを表示するために使っています。
温度センサーの出力値の温度への換算法は、スケッチに書いている通りです。 :-)
CLCD-BOOSTERに利用しているマイクロチップ社の温度センサーMCP9701は、温度の絶対精度は少し甘いのですが、1度あたりの電圧の変化量が19.53mVと、よく利用されているLM35DZに比べるとほぼ2倍と大きいので、オペアンプなどで増幅しなくてもそれなりに楽しめます。