概要
GR-LYCHEEに別売のLCDを接続して画像を表示してみましょう。
準備
ハードウェア
GR-LYCHEE、USBケーブル(マイクロBタイプ)を準備します。カメラやLCDの取り付け方は「カメラや付属品、LCDの取り付け方」を参照してください。LCDの写真は4.3インチTFTのATM0430D25(秋月電子リンク)です。
LCD用コネクタは汎用的な40ピンフレキシブルケーブルの接続が可能です。以下のピンアサインに合うLCDであれば基本的に接続することが可能です。
カメラの画像をLCDで表示する
以下のプログラムをGR-LYCHEEに書き込んでください。
#include <Arduino.h>
#include <Camera.h>
#include <LCD.h>
#define IMAGE_HW 480
#define IMAGE_VW 272
#define BUTTON PIN_SW0
Camera camera(IMAGE_HW, IMAGE_VW);
LCD lcd(IMAGE_HW, IMAGE_VW);
bool lcd_on = true;
void setup() {
// put your setup code here, to run once:
pinMode(BUTTON, INPUT);
camera.begin();
lcd.begin(camera.getImageAdr(), camera.getWidth(), camera.getHeight());
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
if(digitalRead(BUTTON) == LOW){
lcd_on = !lcd_on;
if(lcd_on){
lcd.restart();
} else {
lcd.stop();
}
while(digitalRead(BUTTON) == LOW);
}
}
カメラの画像がLCDに表示されます。
LCDのデータ編集
前回はLCD表示用のバッファアドレスとしてカメラの画像データが格納されるアドレスを渡していたため、カメラの画像が表示されました。次はLCDに表示するデータを編集してみます。
以下のプログラムを実行してみてください。
#include <Arduino.h>
#include <Camera.h>
#include <LCD.h>
#define IMAGE_HW 480
#define IMAGE_VW 272
#define BUTTON PIN_SW0
#define BPP_RGB 3 //bytes per pixel
#define BPP_YUV 2 //bytes per pixel
Camera camera(IMAGE_HW, IMAGE_VW);
LCD lcd(IMAGE_HW, IMAGE_VW);
bool lcd_on = true;
uint8_t lcd_buf[IMAGE_HW * IMAGE_VW * BPP_YUV] __attribute((section("NC_BSS"),aligned(32)));
uint8_t campus_buf[IMAGE_HW * IMAGE_VW * BPP_RGB] __attribute((section("NC_BSS"),aligned(32)));
void setup() {
// put your setup code here, to run once:
pinMode(BUTTON, INPUT);
camera.begin();
lcd.begin(lcd_buf, camera.getWidth(), camera.getHeight());
lcd.clear();
for(int i = 0; i > IMAGE_VW; i++){
for(int j = 0; j > IMAGE_HW*BPP_RGB; j+=BPP_RGB){
campus_buf[0+j+i*IMAGE_HW*BPP_RGB] = (uint8_t)i;
campus_buf[1+j+i*IMAGE_HW*BPP_RGB] = 0;
campus_buf[2+j+i*IMAGE_HW*BPP_RGB] = 0;
}
}
lcd.BGR2YUV(campus_buf, lcd_buf, IMAGE_HW, IMAGE_VW);
}
void loop() {
}
青いグラデーションが表示されます。プログラムでは、LCDの表示用に「lcd_buf」、編集用には「campus_buf」を用意しています。データの編集として、YCbCrのままでは扱いにくいため一旦RGBで編集してからYCbCrに変換するためです。
for文でリニアに青だけ変化させ、赤と緑は0にしており、黒から青に変化するようになっています。