カメラ

カメラを使うためのライブラリです。

ライブラリを使用するためには、#include <Camera.h>を記述してください。

Camera()

概要
Cameraクラスのコンストラクタです。オブジェクト生成時にオプションで取得画像サイズを指定できます。
文法
Camera camera
Camera camera(uint16_t width, uint16_t height)
パラメータ
width: 横幅(オプション、デフォルト 640)
height: 縦幅(オプション、デフォルト 480)

begin

概要
カメラで画像取得を開始します。
文法
begin()
パラメータ
なし
戻り値
なし

getImageAdr

概要
画像のアドレスを取得します。
文法
uint8_t* getImageAdr()
パラメータ
なし
戻り値
画像のアドレス
補足
画像はYUV422形式で格納されます。Y0, U, Y1, Vの順に格納されます。形式の変更はできません。

getWidth

概要
設定された横幅を取得します。
文法
uint16_t getWidth()
パラメータ
なし
戻り値
横幅

getHeight

概要
設定された縦幅を取得します。
文法
uint16_t getHeight()
パラメータ
なし
戻り値
縦幅

createJpeg

概要
Compress the image to JPEG format.
文法
size_t createJpeg()
size_t createJpeg(uint16_t width, uint16_t height, uint8_t* buf, uint8_t format = FORMAT_YUV422);
パラメータ
何も指定しない場合はカメラからの取得画像を変換します。
width: 横幅
height: 縦幅
buf: 格納アドレス
format: 元画像の形式(FORMAT_YUV422, FORMAT_RGB888, FORMAT_GRAY)
戻り値
画像サイズ

getJpegAdr

概要
JPEGデータの格納アドレスを取得します。
文法
uint8_t* getJpegAdr()
パラメータ
なし
戻り値
格納アドレス

stop

概要
画像の取得をストップします。
文法
stop()
パラメータ
なし
戻り値
なし

restart

概要
画像の取得を再開します。
文法
restart()
パラメータ
なし
戻り値
なし

サンプルプログラム

カメラで撮った画像をSDに保存します。


#include <Arduino.h>
#include <Camera.h>
#include <SD.h>
#include <SPI.h>
#include <RTC.h>
Camera camera(640, 480);
RTC rtc;
 
void dateTime(uint16_t* date, uint16_t* time) {
  int year, mon, day, hour, min, sec, week;
  rtc.getDateTime(year, mon, day, hour, min, sec, week);
  *date = FAT_DATE(year, mon, day);
  *time = FAT_TIME(hour, min, sec);
}
void setup() {
 
  Serial.begin(9600);
  Serial.println("start");
  pinMode(PIN_SW0, INPUT);
  pinMode(PIN_SW1, INPUT);
  pinMode(PIN_LED_GREEN, OUTPUT);
  pinMode(PIN_LED_YELLOW, OUTPUT);
  pinMode(PIN_LED_ORANGE, OUTPUT);
  pinMode(PIN_LED_RED, OUTPUT);
 
  camera.begin();
  rtc.begin();
 
  rtc.setDateTime(2017, 6, 17, 14, 1, 0);
  SdFile::dateTimeCallback(&dateTime);
 
  if (!SD.begin()) {
    Serial.println("Card failed, or not present.");
    digitalWrite(PIN_LED_RED, HIGH);
    while (1)
      ;
  }
  else {
    Serial.println("Card founded.");
  }
  Serial.println("Click button0 to take a picture.");
  digitalWrite(PIN_LED_GREEN, HIGH);
 
}
 
void loop() {
  static int count = 0;
  if (digitalRead(PIN_SW0) == 0) {
    char filename[13];
    sprintf(filename, "image%d.jpg", count);
    File file = SD.open(filename, FILE_WRITE);
    if (file) {
      digitalWrite(PIN_LED_ORANGE, HIGH);
      size_t size = camera.createJpeg();
      uint8_t* adr = camera.getJpegAdr();
      for (size_t i = 0; i < size; i++) {
        file.write(*adr);
        adr++;
      }
      file.close();
      Serial.print("Saved a picture as ");
      Serial.println(filename);
      digitalWrite(PIN_LED_ORANGE, LOW);
      count++;
    }
    else {
      Serial.println("Failed to open file.");
      digitalWrite(PIN_LED_RED, HIGH);
      while (1)
        ;
    }
  }
 
}