极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8222|回复: 0

帮改个串口摄像头拍照的代码

[复制链接]
发表于 2014-7-13 22:37:01 | 显示全部楼层 |阅读模式
这里只能拍一张 代码就中止了 循环不起来
希望正常循环起来 每次拍一张 照片文件名编号递增...不熟悉c 自己改了半天 都不对:

// 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 <SD.h>   

byte ZERO=0x00;   
byte incomingbyte;
SoftwareSerial mySerial(5,6); // Set Arduino pin 5 and 6 as softserial   

long int a=0x0000,i=0,j=0,k=0,count=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(38400);

   /*wait for serial port to connect. Needed for Leonardo only
   while (!Serial)
   {
    ;
   }
   */

   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); //The file name should not be too long

   while(!EndFlag)
   {
     j=0;
     k=0;
     count=0;

     SendReadDataCmd();

     delay(20);           //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);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 19:44 , Processed in 0.034596 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表