질문게시판 > 배열에 있는 값으로 jpg 파일 보는 법

TODAY475 TOTAL2,279,011
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 배열에 있는 값으로 jpg 파일 보는 법

페이지 정보

작성자 lshlsh3690 작성일2022-06-03 15:10 조회585회 댓글3건

본문

	

  

#include <ArduCAM.h>

#include <Wire.h>

#include <SPI.h>

#include <SD.h>

#include "memorysaver.h"

//This demo can only work on OV2640_MINI_2MP or OV5642_MINI_5MP or OV5642_MINI_5MP_BIT_ROTATION_FIXED platform.

#if !(defined OV5642_MINI_5MP || defined OV5642_MINI_5MP_BIT_ROTATION_FIXED || defined OV2640_MINI_2MP || defined OV3640_MINI_3MP)

  #error Please select the hardware platform and camera module in the ../libraries/ArduCAM/memorysaver.h file

#endif

//#define SD_CS 4

const int SPI_CS = 7;

#if defined (OV2640_MINI_2MP)

  ArduCAM myCAM( OV2640, SPI_CS );

#elif defined (OV3640_MINI_3MP)

  ArduCAM myCAM( OV3640, SPI_CS );

#else

  ArduCAM myCAM( OV5642, SPI_CS );

#endif

 

 

void myCAMSaveToSDFile(){

  char str[8];

  byte buf[256];

  static int i = 0;

  static int k = 0;

  uint8_t temp = 0,temp_last=0;

  uint32_t length = 0;

  bool is_header = false;

  int len = 0;

  File outFile;

  //Flush the FIFO

  myCAM.flush_fifo();

  //Clear the capture done flag

  myCAM.clear_fifo_flag();

  //Start capture

  myCAM.start_capture();

  Serial.println(F("start Capture"));

  while(!myCAM.get_bit(ARDUCHIP_TRIG , CAP_DONE_MASK));

  Serial.println(F("Capture Done."));  

  length = myCAM.read_fifo_length();

  len = length;

  Serial.print(F("The fifo length is :"));

  Serial.println(length, DEC);

  if (length >= MAX_FIFO_SIZE) //384K

  {

    Serial.println(F("Over size."));

    return ;

  }

  if (length == 0 ) //0 kb

  {

    Serial.println(F("Size is 0."));

    return ;

  }

  //Construct a file name

  k = k + 1;

  itoa(k, str, 10);

  strcat(str, ".jpg");

  //Open the new file

  /*outFile = SD.open(str, O_WRITE | O_CREAT | O_TRUNC);

  if(!outFile){

    Serial.println(F("File open faild"));

    return;

  }*/

  

  myCAM.CS_LOW();

  myCAM.set_fifo_burst();

  while ( length-- )

  {

    temp_last = temp;

    temp =  SPI.transfer(0x00);

    //Read JPEG data from FIFO

    if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while,

    {

      buf[i++] = temp;  //save the last  0XD9     

      //Write the remain bytes in the buffer

      myCAM.CS_HIGH();

      outFile.write(buf, i);    

      //Close the file

      outFile.close();

      Serial.println(F("Image save OK."));

      is_header = false;

      i = 0;

    }  

    if (is_header == true)

    { 

      //Write image data to buffer if not full

      if (i < 256)

      buf[i++] = temp;

      else

      {

        //Write 256 bytes image data to file

        myCAM.CS_HIGH();

        outFile.write(buf, 256);

        i = 0;

        buf[i++] = temp;

        myCAM.CS_LOW();

        myCAM.set_fifo_burst();

      }        

    }

    else if ((temp == 0xD8) & (temp_last == 0xFF))

    {

      is_header = true;

      buf[i++] = temp_last;

      buf[i++] = temp;   

    } 

  }

      i=0;

      

      while(len--)

      {

        

        Serial.print(buf[i++],HEX);

      }

      

      Serial.println(); 

}

 

void setup(){

uint8_t vid, pid;

uint8_t temp;

Wire.begin();

Serial.begin(115200);

Serial.println(F("ArduCAM Start!"));

//set the CS as an output:

pinMode(SPI_CS,OUTPUT);

digitalWrite(SPI_CS, HIGH);

// initialize SPI:

SPI.begin();

  

//Reset the CPLD

myCAM.write_reg(0x07, 0x80);

delay(100);

myCAM.write_reg(0x07, 0x00);

delay(100);

  

while(1){

  //Check if the ArduCAM SPI bus is OK

  myCAM.write_reg(ARDUCHIP_TEST1, 0x55);

  temp = myCAM.read_reg(ARDUCHIP_TEST1);

  

  if (temp != 0x55){

    Serial.println(F("SPI interface Error!"));

    delay(1000);continue;

  }else{

    Serial.println(F("SPI interface OK."));break;

  }

}

//Initialize SD Card

/*while(!SD.begin(SD_CS)){

  Serial.println(F("SD Card Error!"));delay(1000);

}

Serial.println(F("SD Card detected."));

*/

 

#if defined (OV2640_MINI_2MP)

  while(1){

    //Check if the camera module type is OV2640

    myCAM.wrSensorReg8_8(0xff, 0x01);

    myCAM.rdSensorReg8_8(OV2640_CHIPID_HIGH, &vid);

    myCAM.rdSensorReg8_8(OV2640_CHIPID_LOW, &pid);

    if ((vid != 0x26 ) && (( pid != 0x41 ) || ( pid != 0x42 ))){

      Serial.println(F("Can't find OV2640 module!"));

      delay(1000);continue;

    }

    else{

      Serial.println(F("OV2640 detected."));break;

    } 

  }

#elif defined (OV3640_MINI_3MP)

  while(1){

    //Check if the camera module type is OV3640

    myCAM.rdSensorReg16_8(OV3640_CHIPID_HIGH, &vid);

    myCAM.rdSensorReg16_8(OV3640_CHIPID_LOW, &pid);

    if ((vid != 0x36) || (pid != 0x4C)){

      Serial.println(F("Can't find OV3640 module!"));

      delay(1000);continue; 

    }else{

      Serial.println(F("OV3640 detected."));break;    

    }

 } 

#else

  while(1){

    //Check if the camera module type is OV5642

    myCAM.wrSensorReg16_8(0xff, 0x01);

    myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);

    myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);

    if((vid != 0x56) || (pid != 0x42)){

      Serial.println(F("Can't find OV5642 module!"));

      delay(1000);continue;

    }

    else{

      Serial.println(F("OV5642 detected."));break;

    } 

  }

#endif

myCAM.set_format(JPEG);

myCAM.InitCAM();

#if defined (OV2640_MINI_2MP)

  myCAM.OV2640_set_JPEG_size(OV2640_1024x768);

#elif defined (OV3640_MINI_3MP)

  myCAM.OV3640_set_JPEG_size(OV3640_320x240);

#else

  myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK);   //VSYNC is active HIGH

  myCAM.OV5642_set_JPEG_size(OV5642_320x240);

#endif

delay(1000);

}

void loop(){

myCAMSaveToSDFile();

delay(8000);

}

 

저는 아두캠 mini ov2640을 사용하고 있습니다.


buf배열안에 있는 캡처되있는 바이트를 16진수로 출력해서 웹사이트 hex to image에 들어갔는데 확인이 안되네요

실행할때마다 파일 길이는 달라져서 작동은 되는거 같은데 

어떻게 확인할 방법이 없네요

sd카드 없이 확인 할 수 있는 방법은 없나요?

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 3

조회수 585

master님의 댓글

master 작성일

https://cafe.naver.com/circuitsmanual/110402
아두이노도 아니고, 카메라도 다릅니다만
출력 포멧을 맞춘다면 이 프로그램을 활용 할 수 있을겁니다.
https://cafe.naver.com/circuitsmanual/110403
코드 분석 능력이 되셔야 도움이 될텐데요

lshlsh3690님의 댓글

lshlsh3690 댓글의 댓글 작성일

답변 감사합니다. 글을 읽고 이것저것 찾아보고 있는데 파일을 로드하는데 딜레이가 있으면 안되서요
아두이노 우노에 캡처를 하고 mqtt 통신을 해서 토픽이랑 같이 묶어서 보내려는데
딜레이는 없앨 수 없을까요? ov2640이 아니라 다른 모듈을 사용해도 상관 없습니다.

master님의 댓글

master 댓글의 댓글 작성일

지금이라도 능력좋은 라즈베리파이나 PC에서 화상을 직접 받아서 처리해야 하지 않나요?
어쩌려구 능력 떨어지는 아두이노에서 화상을 처리 할까요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
답변 답변글 답변 : 아두이노 코딩질문 master 22-06-14 1623
질문 심박수 측정값 오류 원인댓글[1] 이미지 카키 22-06-14 1231
질문 도트 매트릭스를 통한 장애물 피하기 게임 질문댓글[3] 끼룩 22-06-14 1305
질문 아두이노 센서3개와 모터제어 코딩 도와주세요!댓글[2] RLOP35 22-06-13 1391
질문 아두이노 도트 매트릭스 코딩댓글[1] 이미지첨부파일 끼룩 22-06-13 1042
질문 아두이노 레오나르도 업로딩 오류댓글[1] 면지지 22-06-13 1169
질문 통신에 대한 기초 책 추천댓글[2] 하리 22-06-13 1548
질문 스텝모터,릴레이모듈 9V 인가 (회로도 포함)댓글[1] 이미지첨부파일 아두이노대학 22-06-12 1345
질문 esp32댓글[1] 이미지첨부파일 ejdog 22-06-12 1409
질문 Simpletimer 라이브러리 질문입니다 홍머생 22-06-11 1383
답변 답변글 답변 : Simpletimer 라이브러리 질문입니다댓글[1] master 22-06-13 947
질문 millis()? 질문드립니다.댓글[3] 브링미히어 22-06-11 1794
답변 답변글 답변 : millis()? 질문드립니다.댓글[2] master 22-06-13 735
질문 토글스위치 질문드립니다.댓글[3] 412904 22-06-11 773
질문 조도센서로 서보모터 제어 질문입니다. 왕초보입니다 22-06-11 993
답변 답변글 답변 : 조도센서로 서보모터 제어 질문입니다.댓글[1] master 22-06-11 2014
질문 블루투스와 적외선센서댓글[1] 지훈 22-06-11 1185
질문 아두이노 수위센서 모터 3개 ...댓글[1] 고옹대 22-06-10 1534
질문 atmega128 인터럽트 이용한 dc모터 제어댓글[2] 이미지첨부파일 박맹 22-06-10 1942
질문 아두이노간 블루투스 질문 드립니다.댓글[8] 흐규흐규 22-06-10 2869
질문 토글스위치를 사용한 dc모터 정역회전 제어 부분에 있어서 질문드립니다...댓글[4] 쿤싼 22-06-10 1806
질문 atmega isp 연결관련해서 질문드려요댓글[3] 아트메가넘어려워 22-06-10 1720
질문 TFT LCD 이상이 있습니다댓글[4] 이미지 플립플롭 22-06-10 2106
질문 atmega128 순차적신호 질문있습니다댓글[1] 이미지첨부파일 졸업예정 22-06-10 1391
답변 답변글 답변 : atmega128 순차적신호 질문있습니다 master 22-06-10 1674
질문 아두이노 센서 3개와 모터 bldc연동 코딩 첨부파일 RLOP35 22-06-09 1144
답변 답변글 답변 : 아두이노 센서 3개와 모터 bldc연동 코딩댓글[4] master 22-06-09 1679
질문 atmega 128 led 순차적 제어입니다 졸업예정 22-06-09 1646
답변 답변글 답변 : atmega 128 led 순차적 제어입니다 master 22-06-09 1461
질문 ATMEGA128 인터럽트 관련질문입니다댓글[2] 짜요쩌요 22-06-09 1461
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기