質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

0回答

621閲覧

arudinoで撮った写真をPCに保存したい。

totoro1212

総合スコア6

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2017/11/12 11:25

arudinoUNOとLinkSpriteシリアル接続JPEGカラーカメラとプロセッシングを用いてカメラの撮影をしています。
そこでカメラで撮った画像をSDカードに保存はできたんですが、パソコンにjpg画像を保存することはできましたが、
画像を開くことができません。
画像をテキストで開いたところバイナリーデータがでました。

#include <SoftwareSerial.h> #include <SD.h> byte ZERO = 0x00; byte incomingbyte; SoftwareSerial mySerial(5,6); // Set Arduino pin 4 and 5 as softserial long int a=0x0000,j=0,k=0,count=0,i=0; uint8_t MH,ML; boolean EndFlag=0; File myFile; void SendResetCmd(); void SetBaudRateCmd(); void SetImageSizeCmd(); void SendTakePhotoCmd(); void SendReadDataCmd(); void StopTakePhotoCmd(); void setup() { Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } mySerial.begin(38400); Serial.print("Initializing SD card..."); // On the Ethernet Shield, CS is pin 4. It's set as an output by default. // Note that even if it's not used as the CS pin, the hardware SS pin // (10 on most Arduino boards, 53 on the Mega) must be left as an output // or the SD library functions will not work. pinMode(10, OUTPUT); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); } void loop() { byte a[32]; int ii; SendResetCmd(); delay(4000); //Wait 2-3 second to send take picture command SendTakePhotoCmd(); while(mySerial.available()>0) { incomingbyte=mySerial.read(); } myFile = SD.open("pic58.jpg", FILE_WRITE); //<strong><span style="color: #ff0000;">The file name should not be too long</span></strong> while(!EndFlag) { j=0; k=0; count=0; SendReadDataCmd(); delay(20); //250 for regular while(mySerial.available()>0) { incomingbyte=mySerial.read(); k++; if((k>5)&&(j<32)&&(!EndFlag)) { a[j]=incomingbyte; if((a[j-1]==0xFF)&&(a[j]==0xD9)) //tell if the picture is finished EndFlag=1; j++; count++; } } for(j=0;j<count;j++) { if(a[j]<0x10) Serial.print("0"); Serial.print(a[j],HEX); // observe the image through serial port Serial.print(" "); } for(ii=0; ii<count; ii++) myFile.write(a[ii]); Serial.println(); i++; } myFile.close(); while(1); } void SendResetCmd() { mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x26); mySerial.write(ZERO); } void SetImageSizeCmd() { mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x31); mySerial.write(0x05); mySerial.write(0x04); mySerial.write(0x01); mySerial.write(ZERO); mySerial.write(0x19); mySerial.write(0x11); } void SetBaudRateCmd() { mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x24); mySerial.write(0x03); mySerial.write(0x01); mySerial.write(0x2A); mySerial.write(0xC8); } void SendTakePhotoCmd() { mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x36); mySerial.write(0x01); mySerial.write(ZERO); } void SendReadDataCmd() { MH=a/0x100; ML=a%0x100; mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x32); mySerial.write(0x0c); mySerial.write(ZERO); mySerial.write(0x0a); mySerial.write(ZERO); mySerial.write(ZERO); mySerial.write(MH); mySerial.write(ML); mySerial.write(ZERO); mySerial.write(ZERO); mySerial.write(ZERO); mySerial.write(0x20); mySerial.write(ZERO); mySerial.write(0x0a); a+=0x20; } void StopTakePhotoCmd() { mySerial.write(0x56); mySerial.write(ZERO); mySerial.write(0x36); mySerial.write(0x01); mySerial.write(0x03); } proccesing用 import processing.serial.*;//proccesingでシリアル通信を行う Serial myPort; String filename = "photo.jpg"; byte count = 0; byte[] photo = { }; Boolean readData = false; PImage captureImage; void setup() { size(640,480); println( Serial.list() ); //Serial.list()[3]は環境に合わせて変更すること。 myPort = new Serial( this, Serial.list()[0], 115200 ); } void draw() { byte[] buffer = new byte[64]; if( readData ) { while( myPort.available() > 0 ) { int readBytes = myPort.readBytes( buffer ); print( "Read " ); print( readBytes ); println( " bytes ..." ); for( int i = 0; i < readBytes; i++ ) { photo = append( photo, buffer[i] ); } } } else { while( myPort.available() > 0 ) { print( "COM Data: " ); println( myPort.readString() ); } } } void keyPressed() { if( photo.length > 0 ) { readData = false; print( "Writing to disk " ); print( photo.length ); println( " bytes ..." ); filename = "photo" + count + ".jpg"; saveBytes( filename, photo ); println( "DONE!" ); photo = new byte[0]; captureImage = loadImage(filename); image(captureImage, 0, 0); count++; } else { readData = true; myPort.write(0); println( "Waiting for data ..." ); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問