GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
GR-LYCHEE付属カメラで撮影し、opencvで輪郭検出してその検出後画像をjpgで重心値をcsvにしてSDカードに保存というプログラムを開発しています。
そこで、原因不明のSD初期化エラーが出たためご質問させていただきました。
ソースコードの問題も考えられたため、サンプルのDigitalCameraでも試しましたが同様の現象が起こりました。
手元にあった新品のGR-LYCHEE,新品のSDカードでも試しましたが同様でした。
IDEで開発を進めており、現状そこで何か起こっているのかとも思っています。
あいまいかつ初歩的な質問で申し訳ございませんが、その他確認箇所などご教授いただけないでしょうか。
【サンプルDigitalCameraでエラーが起こる箇所】
>if (!SD.begin()) {>Serial.println("Card failed, or not present.");
このプリント分が出ています。
【この現象に至るまでの補足】
・DigitalCameraのサンプルは正常に動作することは以前に確認済み(SDにも保存できていました)
・元々開発していたプログラムで、以前は画像とcsvともに保存できていた
(ただし、タイミング調整の問題で画像が全面保存されない(半分が単色で塗りつぶされる)ということが数枚起こっていました)
・元々開発していたプログラムはデバック途中で、一時的にクロック毎にSDを開き画像を保存SDを閉じるということをしてしまっていた
・以前開発していたプログラムで、EEPROMに書き込むようなソースを書き込んだことがある(ライブラリの問題等でデバックできずエラーを残したまま断念)
IDEとはIDE for GRですかね?
一応こちらでIDE for GR V1.12で試してみましたが、DigitalCameraのサンプルは動作しました。
ただサンプルがGR-PEACH用にLEDとボタンの名称が間違っていたので、その点は修正しました。
一応確認したものを貼り付けます。
// Sample for GR-PEACH, GR-LYCHEE//// Required hardware: Camera, SD//// Public Domain#include <Camera.h>#include <SD.h>#include <SPI.h>#include <RTC.h>Camera camera(640, 480);//Camera camera(640, 480, 0); // specify 0 for CVBS with GR-PEACH//Camera camera(640, 480, 2); // specify 2 for Wireless Camera shieldRTC 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_LED_GREEN, OUTPUT); pinMode(PIN_LED_GREEN, 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 button 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_GREEN, 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_GREEN, LOW); count++; } else { Serial.println("Failed to open file."); digitalWrite(PIN_LED_RED, HIGH); while (1) ; } }}