Thanks for answering strykeroz. For the project, I am not looking to upload any data on a webpage. I was trying to create a TCP Server which fetches information being sent over a port. The server works fine as long as I am transferring strings of code using the wifi shield.
After having tried that, I learned about Processing, and thought I could use it to capture the images stored on the SD card and generate them on PC. But that does not seem to be working as well.
I was able to get the following code to generate HEX version of an image (I am using an uno and hence thought of using the SoftSerial) but it generates nothing useful. And after I am able to generate the HEX of the image, I also need to write them to the server.
#include <SoftwareSerial.h>
#include <SD.h>
byte incomingbyte;
SoftwareSerial mySerial(4,5); //Configure pin 4 and 5 as soft serial port
int a=0x0000,j=0,k=0,count=0,i=0,p=0; //Read Starting address
uint8_t MH = 0x00,ML = 0x00;
boolean EndFlag=0,HeaderFlag=0;
int chipSelect = 4;
File logfile;
void SendResetCmd();
void SetBaudRateCmd();
void SetImageSizeCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();
void setup()
{
Serial.begin(115200);
mySerial.begin(115200);
a-=0x20;
pinMode(10, OUTPUT);
//see if the card is present and can be initialized
if (!SD.begin(chipSelect)) {
Serial.print("Card failed, or not present");
return;
}
Serial.println("card initialized.");
// create a new file
char filename[] = "Test1.jpg";
for (uint8_t i = 0; i < 100; i++) {
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
// only open a new file if it doesn't exist
logfile = SD.open(filename, FILE_WRITE);
break; // leave the loop!
}
}
Serial.print("Logging to: ");
Serial.println(filename);
}
void loop()
{
Serial.println("about to take picture...");
byte a[32];
p=0;
SendResetCmd();
delay(4000); //After reset, wait 2-3 second to send take picture command
SendTakePhotoCmd();
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}
while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();
delay(20);
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)) //Check if the picture is over
EndFlag=1;
j++;
count++;
}
}
for(j=0;j<count;j++)
{ if(a[j]<0x10)
Serial.print("0");
Serial.print(a[j], HEX);
Serial.print(" ");
} //Send jpeg picture over the serial port
if(((a[j-32]==0xFF)&&(a[j-31]==0xD8))||(p))
{
logfile.print((char*)a);
Serial.println();
p=1;
}
}
logfile.close();
Serial.print("Finished writing data to file");
while(1);
}
//-----------------
//Camera functions
//Send Reset command
void SendResetCmd()
{
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x26);
mySerial.write((byte)0x0);
}
void SetImageSizeCmd()
{
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x31);
mySerial.write(0x05);
mySerial.write(0x04);
mySerial.write(0x01);
mySerial.write((byte)0x0);
mySerial.write(0x19);
mySerial.write(0x22);
}
void SetBaudRateCmd()
{
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(0xAE);
mySerial.write(0xC8);
}
//Send take picture command
void SendTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write((byte)0x0);
}
//Read data
void SendReadDataCmd()
{
MH=a/0x100;
ML=a%0x100;
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x32);
mySerial.write(0x0c);
mySerial.write((byte)0x0);
mySerial.write(0x0a);
mySerial.write((byte)0x0);
mySerial.write((byte)0x0);
mySerial.write(MH);
mySerial.write(ML);
mySerial.write((byte)0x0);
mySerial.write((byte)0x0);
mySerial.write((byte)0x0);
mySerial.write(0x20);
mySerial.write((byte)0x0);
mySerial.write(0x0a);
a+=0x20; //address increases 32£¬set according to buffer size
}
void StopTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write((byte)0x0);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
}