基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
カメラ
サーボモーター
ステッピングモーター
キャラクタ液晶表示
SPI通信
I2C通信(Wire)
SD
SD(File操作)
周期処理(MsTimer2)
時計(RTC)
Mbed Tips
カメラ
カメラを使うためのライブラリです。
ライブラリを使用するためには、#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)
;
}
}
}