Professional Documents
Culture Documents
This is a library for the openjumper TTL JPEG Camera (VC0706 chipset)
****************************************************/
#include "camera_VC0706.h"
void camera_VC0706::common_init(void) {
swSerial = NULL;
hwSerial = NULL;
frameptr = 0;
bufferLen = 0;
serialNum = 0;
}
// 硬件串口构造函数
camera_VC0706::camera_VC0706(HardwareSerial *ser) {
common_init(); // Set everything to common state, then...
hwSerial = ser; // ...override hwSerial with value passed.
}
// 初始化摄像头,通信波特率
boolean camera_VC0706::begin(uint16_t baud) {
if(swSerial) swSerial->begin(baud);
else hwSerial->begin(baud);
return reset();
}
//复位
boolean camera_VC0706::reset() {
uint8_t args[] = {0x0};
//动作检测
boolean camera_VC0706::motionDetected() {
if (readResponse(4, 200) != 4) {
return false;
}
if (! verifyResponse(VC0706_COMM_MOTION_DETECTED))
return false;
return true;
}
//设置动作状态
uint8_t camera_VC0706::setMotionStatus(uint8_t x, uint8_t d1, uint8_t d2) {
uint8_t args[] = {0x03, x, d1, d2};
//获取动作状态
uint8_t camera_VC0706::getMotionStatus(uint8_t x) {
uint8_t args[] = {0x01, x};
//打开动作检测
boolean camera_VC0706::setMotionDetect(boolean flag) {
if (! setMotionStatus(VC0706_MOTIONCONTROL,
VC0706_UARTMOTION, VC0706_ACTIVATEMOTION))
return false;
//获取检测状态
boolean camera_VC0706::getMotionDetect(void) {
uint8_t args[] = {0x0};
return camerabuff[5];
}
//获取图片大小
uint8_t camera_VC0706::getImageSize() {
uint8_t args[] = {0x4, 0x4, 0x1, 0x00, 0x19};
if (! runCommand(VC0706_READ_DATA, args, sizeof(args), 6))
return -1;
return camerabuff[5];
}
//设置图片尺寸
boolean camera_VC0706::setImageSize(uint8_t x) {
uint8_t args[] = {0x05, 0x04, 0x01, 0x00, 0x19, x};
uint8_t camera_VC0706::getDownsize(void) {
uint8_t args[] = {0x0};
if (! runCommand(VC0706_DOWNSIZE_STATUS, args, 1, 6))
return -1;
return camerabuff[5];
}
uint8_t args[17] = {strlen(str), strlen(str)-1, (y & 0xF) | ((x & 0x3) <<
4)};
args[3+i] = str[i];
}
boolean camera_VC0706::setCompression(uint8_t c) {
uint8_t args[] = {0x5, 0x1, 0x1, 0x12, 0x04, c};
return runCommand(VC0706_WRITE_DATA, args, sizeof(args), 5);
}
uint8_t camera_VC0706::getCompression(void) {
uint8_t args[] = {0x4, 0x1, 0x1, 0x12, 0x04};
runCommand(VC0706_READ_DATA, args, sizeof(args), 6);
printBuff();
return camerabuff[5];
}
w = camerabuff[5];
w <<= 8;
w |= camerabuff[6];
h = camerabuff[7];
h <<= 8;
h |= camerabuff[8];
wz = camerabuff[9];
wz <<= 8;
wz |= camerabuff[10];
hz = camerabuff[11];
hz <<= 8;
hz |= camerabuff[12];
pan = camerabuff[13];
pan <<= 8;
pan |= camerabuff[14];
tilt = camerabuff[15];
tilt <<= 8;
tilt |= camerabuff[16];
return true;
}
boolean camera_VC0706::takePicture() {
frameptr = 0;
return cameraFrameBuffCtrl(VC0706_STOPCURRENTFRAME);
}
boolean camera_VC0706::resumeVideo() {
return cameraFrameBuffCtrl(VC0706_RESUMEFRAME);
}
boolean camera_VC0706::TVon() {
uint8_t args[] = {0x1, 0x1};
return runCommand(VC0706_TVOUT_CTRL, args, sizeof(args), 5);
}
boolean camera_VC0706::TVoff() {
uint8_t args[] = {0x1, 0x0};
return runCommand(VC0706_TVOUT_CTRL, args, sizeof(args), 5);
}
uint32_t camera_VC0706::frameLength(void) {
uint8_t args[] = {0x01, 0x00};
if (!runCommand(VC0706_GET_FBUF_LEN, args, sizeof(args), 9))
return 0;
uint32_t len;
len = camerabuff[5];
len <<= 8;
len |= camerabuff[6];
len <<= 8;
len |= camerabuff[7];
len <<= 8;
len |= camerabuff[8];
return len;
}
uint8_t camera_VC0706::available(void) {
return bufferLen;
}
uint8_t * camera_VC0706::readPicture(uint8_t n) {
uint8_t args[] = {0x0C, 0x0, 0x0A,
0, 0, frameptr >> 8, frameptr & 0xFF,
0, 0, 0, n,
CAMERADELAY >> 8, CAMERADELAY & 0xFF
};
frameptr += n;
return camerabuff;
}
void camera_VC0706::printBuff() {
for (uint8_t i = 0; i< bufferLen; i++) {
Serial.print(" 0x");
Serial.print(camerabuff[i], HEX);
}
Serial.println();
}