概要

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にしており、黒から青に変化するようになっています。