Hey, thanks for answer Isaac96!!
I'm not sure. As far as i have understood, it is possible to have it connected to the USB at the same time (the example code feature serial.print(); commands, which otherwise would be quite useless. Also they're useing software serial, so not pin 0 and 1 (when I tried those it worked even worse then now). Last time I tried the setup I don't think it became very hot, altough warm which I suppose is normal for a GPU?
The code does create a file on the SD card, but nothing is written to the file (0kb). Also when I have the serial open, the initialization starts fine and then it just writes a massive amount of blank spaces, for several minutes, possibly forver? I haven't had it come to an end yet... As far as I understand, there should be a HEX code where there is now only blank spaces...
This is one of the example codes i've been trying:
//*******************************************************
// www.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>
SoftwareSerial mySerial(10,11); // Set Arduino pin 4 and 5 as softserial
byte ZERO = 0x00;
byte incomingbyte;
long int j=0,k=0,count=0,i=0x0000;
uint8_t MH,ML;
boolean EndFlag=0;
File myFile;
int SecondPic=0;
int TakePic=0;
void SendResetCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x26);
mySerial.write(ZERO);
}
/*************************************/
/* Set ImageSize :
/* <1> 0x22 : 160*120
/* <2> 0x11 : 320*240
/* <3> 0x00 : 640*480
/* <4> 0x1D : 800*600
/* <5> 0x1C : 1024*768
/* <6> 0x1B : 1280*960
/* <7> 0x21 : 1600*1200
/************************************/
void SetImageSizeCmd(byte Size)
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x54);
mySerial.write(0x01);
mySerial.write(Size);
}
/*************************************/
/* Set BaudRate :
/* <1>¡¡0xAE : 9600
/* <2>¡¡0x2A : 38400
/* <3>¡¡0x1C : 57600
/* <4>¡¡0x0D : 115200
/* <5>¡¡0xAE : 128000
/* <6>¡¡0x56 : 256000
/*************************************/
void SetBaudRateCmd(byte baudrate)
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x24);
mySerial.write(0x03);
mySerial.write(0x01);
mySerial.write(baudrate);
}
void SendTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(ZERO);
i+=0x0000;
}
void SendReadDataCmd()
{
MH=i/0x100;
ML=i%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);
i+=0x20;
}
void StopTakePhotoCmd()
{
mySerial.write(0x56);
mySerial.write(ZERO);
mySerial.write(0x36);
mySerial.write(0x01);
mySerial.write(0x03);
SecondPic = HIGH;
}
void setup()
{
TakePic=1;
}
void loop()
{
if (TakePic == 1) {
CameraSetup();
}
}
void CameraSetup()
{
Serial.begin(38400);
pinMode(53, OUTPUT);
while (!Serial)
Serial.print("Initializing SD card...");
if (!SD.begin(53))
{
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
Serial.println("please waiting ....");
mySerial.begin(38400);
delay(100);
SendResetCmd();
delay(2000);
SetBaudRateCmd(0x2A);
delay(500);
SetImageSizeCmd(0x22);
delay(500);
mySerial.begin(38400);
delay(100);
CameraLoop();
}
void CameraLoop ()
{
byte a[32];
int ii;
SendResetCmd();
delay(2000); //Wait 2-3 second to send take picture command
SendTakePhotoCmd();
delay(1000);
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
}
if (SecondPic == LOW) {
myFile = SD.open("pic1.jpg", FILE_WRITE); //The file name should not be too long
}
else {
myFile = SD.open("pic2.jpg", FILE_WRITE); //The file name should not be too long
}
while(!EndFlag)
{
j=0;
k=0;
count=0;
SendReadDataCmd();
delay(20);
while(mySerial.available()>0)
{
incomingbyte=mySerial.read();
k++;
delay(1); //250 for regular
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();
}
myFile.close();
Serial.print("Finished writing data to file");
delay(500);
StopTakePhotoCmd();
delay(500);
SendResetCmd();
EndFlag=0;
delay(5000);
if (SecondPic=HIGH){
CameraSetup();
SecondPic=LOW;
TakePic=0;
}
while(1);
}
I don't quite understand how and where in the code i set baudrate and picture size. I can se the codes posted but have no clue where to insert that info? Also this code seems to be for LinkSprite's 2MP camera, so it's not quite the same as mine (640x480) but I think it uses the same processor, LS-Y201. The product number of my version is SEN-10061, it's an older and seemingly outdated model...
It also says the format of the SD card is imporant, and I formatted it as FAT (used to be FAT64) with my computer , but I don't know what type of FAT it is now. It just says FAT, and no number. Must be 32 right, 16 is not commonly used anymore I think?
Do you think a picture is still needed? Currently my arduino is hooked to my main project and I'll get back with a pic as soon as I found the time to tinker some more with it.