Camera LinkSprite JPEG SPARKFUN da homotix

Ciao, ho comprato una camera da homotix.
Sembra sia una LinkSprite rivenduta anche da SPARKFUN .

Ho trovato ed adattato il codice.
Scrivo su SD, ma il file non sembra un JPEG valido.

Che sbaglio?
Allego il codice.
Ciao
ConteCavour

/* Linksprite */

#include <SoftwareSerial.h>
 #include <SD.h>

byte incomingbyte;
SoftwareSerial mySerial(6,7);                     //Configure pin 4 and 5 as soft serial port
//NewSoftSerial mySerial(6,7);                     //Configure pin 4 and 5 as soft serial port
int a=0x0000,j=0,k=0,count=0;                    //Read Starting address       
uint8_t MH,ML;
boolean EndFlag=0;
                               
void SendResetCmd();
void SendTakePhotoCmd();
void SendReadDataCmd();
void StopTakePhotoCmd();

File imgFile, imgFile2, imgFile3, imgFile4;

void setup()
{ 
  Serial.begin(38400);
  mySerial.begin(38400);
  
   pinMode(10, OUTPUT);
   
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  
}

void loop() 
{
     SendResetCmd();
     delay(4000);             //After reset, wait 2-3 second to send take picture command
     
     imgFile = SD.open("nic20.jpg", FILE_WRITE);
     imgFile2 = SD.open("nic21.jpg", FILE_WRITE);
     imgFile3 = SD.open("nic22.jpg", FILE_WRITE);
     imgFile4 = SD.open("nic23.jpg", FILE_WRITE);
     
      
      SendTakePhotoCmd();

     while(mySerial.available()>0)
      {
        incomingbyte=mySerial.read();

      }   
      byte a[32];
      
      while(!EndFlag)
      {  
         j=0;
         k=0;
         count=0;
         SendReadDataCmd();

         delay(25);
          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);
              
              imgFile.print(a[j],HEX);
              imgFile2.write(byte(a[j]));              
              //imgFile3.print(byte(a[j]));              sembra sbagliato
              //imgFile4.print(a[j]);              sembra sbagliato
              
              Serial.print(" ");
          }                                       //Send jpeg picture over the serial port
          Serial.println();
      }      
      
     imgFile.close();
     imgFile2.close();
     imgFile3.close();
     imgFile4.close(); 
     while(1);
}

//Send Reset command
void SendResetCmd()
{
      mySerial.write(0x56);
      mySerial.write(byte(0x00));
      mySerial.write(0x26);
      mySerial.write(byte(0x00));
}

//Send take picture command
void SendTakePhotoCmd()
{
      mySerial.write(0x56);
      mySerial.write(byte(0x00));
      mySerial.write(0x36);
      mySerial.write(0x01);
      mySerial.write(byte(0x00));  
}

//Read data
void SendReadDataCmd()
{
      MH=a/0x100;
      ML=a%0x100;
      mySerial.write(0x56);
      mySerial.write(byte(0x00));
      mySerial.write(0x32);
      mySerial.write(0x0c);
      mySerial.write(byte(0x00)); 
      mySerial.write(0x0a);
      mySerial.write(byte(0x00));
      mySerial.write(byte(0x00));
      mySerial.write(MH);
      mySerial.write(ML);   
      mySerial.write(byte(0x00));
      mySerial.write(byte(0x00));
      mySerial.write(byte(0x00));
      mySerial.write(0x20);
      mySerial.write(byte(0x00));  
      mySerial.write(0x0a);
      a+=0x20;                            //address increases 32£¬set according to buffer size
}

void StopTakePhotoCmd()
{
      mySerial.write(0x56);
      mySerial.write(byte(0x00));
      mySerial.write(0x36);
      mySerial.write(0x01);
      mySerial.write(0x03);        
}

la scrittura su SD potrebbe essere troppo lenta. prova ad usare l'arduino solo come ponte camera/usb, e fare un programma lato PC che legge la seriale e salva la JPEG.

Ma perchè non mi è arrivata la notifica che mi avevi risposto?
Io comunque dovrei mandare il file completo ad un web server, ma non avrò un pc connesso

Che consigli?
Hai un esmpio comunque per leggere da seriale e scrivere il jpg?
Nic

ho letto di la che hai trovato un bug, ora scrivi correttamente su SD?

dubito che tutto il file ci stia in una sola richiesta POST, figuriamoci in una GET, you're gonna have a bad time :), la ricostruzione del dato da parte del server richiederà un bello scriptino.

mi spiace ma non ho mai lavorato con le camere e JPG con arduino.

contecavour:
Ma perchè non mi è arrivata la notifica che mi avevi risposto?

Clicca sul pulsante notify in fondo al topic :grin:

Grazie per la notifica.

Si riesco a scrivere su DT.
Tutto funziona, ma spesso nell'immagine jpg, vedo delle strisciate.
Direi quasi sempre.
Solo un paio no e a media risoluzione.

Avete idee?
Max mi ah detto che secondo lui è lenta la SD.

N