• Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors
HomeJPEG CameraThe solution for the code of the post“ Photograph ...
Previous Next

The solution for the code of the post“ Photograph with JPEG Color Camera by Arduino” can’t run on Arduino IDE 1.5

Posted by: admin , March 6, 2014

[vc_row][vc_column width=”1/1″][vc_tour][vc_tab title=”Problem analysis” tab_id=”1394075736-1-34″][vc_column_text]

QQ图片20140305185517

From the figure we could find that we do not define the SPI. To solve this problem , I will add the “#include<SPI.h>”before the code.

The another problem is that we can’t read the figure data, the progress of reading data goes wrong,

because the waiting time after the host send a name is not long enough to read the data, lead to read no data or incomplete data,

and we can’t see the data in the SD card, to solve this problem, we need to last the delay time ,change the 20 to 200 in the “delay(20);//250 for regular”[/vc_column_text][/vc_tab][vc_tab title=”The modified source code” tab_id=”1394075736-2-93″][vc_column_text]

// LinkSprite.com
// Note:
// 1. SD must be formated to FAT16
// 2. As the buffer of softserial has 64 bytes, so the code read 32 bytes each time

// 3. Please add the libaray to the lib path

//  * SD card attached to SPI bus as follows:
//** MOSI - pin 11
// ** MISO - pin 12
// ** CLK - pin 13
// ** CS - pin 4

#include <SoftwareSerial.h>
#include <SPI.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("pic.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(200); //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();

Serial.print("Finished writing data to file");

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);
}

[/vc_column_text][/vc_tab][/vc_tour][/vc_column][/vc_row]

Tags: JPEG Camera

Share!
Tweet

admin

About the author

Leave a Reply Cancel reply

You must be logged in to post a comment.

Category

  • Home
  • pcDuino
  • WiKi
  • Store
  • Distributors