無線ブログ集
メイン | 簡易ヘッドライン |
愛知タワー風速値表示追加その5 (2023/1/31 6:19:43)
ArduinoNanoでTFT液晶表示のスケルトンまでできたので、実際に7ビットのポート入力のデコード部をスケッチしました。スケッチはオリジナルのwebスケッチに下記のデコードの部分を付け足しています。
オリジナルからの変更追加箇所です。
・TFT液晶display
の表記とRSTポートの変更D8→D15(D2〜D8)を連続で並べる為の変更)
#define TFT_SCLK 13
#define TFT_MLSI 11
#define TFT_CS 10
#define TFT_DC 9
//#define TFT_RST 8
#define TFT_RST 14
#define TFT_MLSI 11
#define TFT_CS 10
#define TFT_DC 9
//#define TFT_RST 8
#define TFT_RST 14
int16_t windvalue;
char ce[6];
char ce[6];
ポート定義部追加
#define WIND0 2 //D2 binary 1 (0,1)
#define WIND1 3 //D3 binary 2 (0,1)
#define WIND2 4 //D4 binary 4 (0,1)
#define WIND3 5 //D5 binary 8 (0,1)
#define WIND4 6 //D6 binary 16 (0,1)
#define WIND5 7 //D7 binary 32 (0,1)
#define WIND6 8 //D8 binary 64 (0,1)
#define WIND1 3 //D3 binary 2 (0,1)
#define WIND2 4 //D4 binary 4 (0,1)
#define WIND3 5 //D5 binary 8 (0,1)
#define WIND4 6 //D6 binary 16 (0,1)
#define WIND5 7 //D7 binary 32 (0,1)
#define WIND6 8 //D8 binary 64 (0,1)
void setup(void) {
Serial.begin( 115200 );
Serial.begin( 115200 );
pinMode(pinLed,OUTPUT);
/ /Port D2-D8 input setting (0-127)
pinMode(WIND0, INPUT); //D2 Port normally LOW
pinMode(WIND1, INPUT); //D3 Port normally LOW
pinMode(WIND2, INPUT); //D4 Port normally LOW
pinMode(WIND3, INPUT); //D5 Port normally LOW
pinMode(WIND4, INPUT); //D6 Port normally LOW
pinMode(WIND5, INPUT); //D7 Port normally LOW
pinMode(WIND6, INPUT); //D8 Port normally LOW
〜
pinMode(WIND0, INPUT); //D2 Port normally LOW
pinMode(WIND1, INPUT); //D3 Port normally LOW
pinMode(WIND2, INPUT); //D4 Port normally LOW
pinMode(WIND3, INPUT); //D5 Port normally LOW
pinMode(WIND4, INPUT); //D6 Port normally LOW
pinMode(WIND5, INPUT); //D7 Port normally LOW
pinMode(WIND6, INPUT); //D8 Port normally LOW
〜
省略
}
void loop() {
// put your main code here, to
run repeatedly:
if(((((((digitalRead(WIND0)==LOW)
and(digitalRead(WIND1)==LOW)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 0;
}
else
{
if(((((((digitalRead(WIND0)==HIGH)
and(digitalRead(WIND1)==LOW)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 1;
}
}
if(((((((digitalRead(WIND0)==LOW)
and(digitalRead(WIND1)==HIGH)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 2;
}
if(((((((digitalRead(WIND0)==LOW)
and(digitalRead(WIND1)==LOW)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 0;
}
else
{
if(((((((digitalRead(WIND0)==HIGH)
and(digitalRead(WIND1)==LOW)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 1;
}
}
if(((((((digitalRead(WIND0)==LOW)
and(digitalRead(WIND1)==HIGH)
and(digitalRead(WIND2)==LOW)
and(digitalRead(WIND3)==LOW)
and(digitalRead(WIND4)==LOW)
and(digitalRead(WIND5)==LOW)
and(digitalRead(WIND6)==LOW)))))))
{
windvalue = 2;
}
〜
省略(延々とwindvalue=127まで同じスケッチでLOW,HIGH設定)
〜
tft.setTextColor(ST7735_YELLOW);
tft.setCursor (30, 95);
//tft.print(windvalue);
//tft.print ("038");
sprintf(ce,"%3d",windvalue);
tft.print(ce);
delay(150);
tft.setTextSize(4);
tft.setCursor(30,95);
tft.setTextColor(ST7735_BLACK);
tft.print(ce);
//tft.print(" ");
delay(10);
}
■デコード部詳細
バイナリー出力を受ける入力ポート(D0〜D8)のデコード部は0〜127までのカウンタ出力の瞬間値7ビット入力値を判断し表示用カウント変数のwindvalueにカウンタ値のデコード値を入れるスケッチです。
■TFT液晶Display表示部詳細
フォント色を黄色、サイズ4に設定しchar変数ce
をsprintf書式で3桁の数値の右詰めでtft.setCursorでの設定位置にデコードカウント値を表示します。表示後は時間をおいて、フォント色、黒色、サイズ4で同じ位置に再度ceを上書きして表示を消しています。これをしないと文字が残りどんどん重なり黄色の■になります。
実際のカウントデコード値表示動画
カウント値が上がっていくLED発光ダイオードとTFT液晶Displayのカウント表示です。
入力信号D2ポート波形
単に入力ポートに信号が来てるかの確認の為、撮ったものです。
カウンタでの信号パルス(OSCからの信号)でスケルトンで作製しTFT液晶に仮表示してた”038"固定数値をバイナリーデコード値に変えて表示することができました。
表示までは上手くこぎつけましたが、若干気になっている事があります。
現状の入力値に対しての表示部との時間関係で周波数が上がった時(風速が早くなった時)に0から順番に表示されず、数値が飛んでしまう現象があります。時間のデレー設定が固定なので、全部の風速スピードで表示出来るタイミングでない事によるものです。
次の画像の表示に変更して対策を行なっています。どのように対応を検討してるかは次回に!
つづく?
execution time : 0.019 sec