Toma de foto y descomprimir en HEX

Dependencies:   JPEGCamera SDFileSystem mbed

Fork of SaibiCansat2014 by Takashi SASAKI

Committer:
SolManB
Date:
Tue Nov 10 16:48:05 2015 +0000
Revision:
14:f97c682b6fe5
Parent:
12:495d513bb022
foto;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TakashiSasaki 6:9824d4e2f29b 1 #ifndef FAST_JPEG_CAMERA_H
TakashiSasaki 6:9824d4e2f29b 2 #define FAST_JPEG_CAMERA_H
TakashiSasaki 6:9824d4e2f29b 3
TakashiSasaki 6:9824d4e2f29b 4 #include "JPEGCamera/JPEGCamera.h"
TakashiSasaki 6:9824d4e2f29b 5
TakashiSasaki 10:337ccaaec39c 6 #define FILENAME "/sd/pic%05d.jpg"
TakashiSasaki 6:9824d4e2f29b 7
TakashiSasaki 9:3a2d25f4700b 8 #define min(x, y) ((x) < (y)) ? (x) : (y)
TakashiSasaki 9:3a2d25f4700b 9
TakashiSasaki 6:9824d4e2f29b 10 class FastJpegCamera : public JPEGCamera {
TakashiSasaki 6:9824d4e2f29b 11 public:
TakashiSasaki 6:9824d4e2f29b 12 DigitalOut myled1; //show successful picture was taken
TakashiSasaki 6:9824d4e2f29b 13 int baudrate;
TakashiSasaki 6:9824d4e2f29b 14 Serial pc;
TakashiSasaki 9:3a2d25f4700b 15 Serial& xbee;
TakashiSasaki 6:9824d4e2f29b 16
TakashiSasaki 9:3a2d25f4700b 17 FastJpegCamera(PinName tx, PinName rx, Serial& xbee) : JPEGCamera(tx,rx), baudrate(38400), pc(USBTX, USBRX), myled1(LED1), xbee(xbee){
TakashiSasaki 8:3230ddd3a3d1 18 this->baud115200();
TakashiSasaki 6:9824d4e2f29b 19 };
TakashiSasaki 6:9824d4e2f29b 20
TakashiSasaki 6:9824d4e2f29b 21 void baud115200(){
TakashiSasaki 6:9824d4e2f29b 22 char buf[7] = {0x56, 0x00, 0x24, 0x03, 0x01, 0x0d, 0xa6};
TakashiSasaki 6:9824d4e2f29b 23 //char buf[5] = {0x56, 0x00, 0x34, 0x0d, 0xa6};
TakashiSasaki 6:9824d4e2f29b 24 //int ret = sendReceive(buf, sizeof buf, 5);
TakashiSasaki 6:9824d4e2f29b 25 for (int i = 0; i < sizeof buf; i++) putc(buf[i]);
TakashiSasaki 8:3230ddd3a3d1 26 wait(0.5);
TakashiSasaki 6:9824d4e2f29b 27 this->baudrate = 115200;
TakashiSasaki 6:9824d4e2f29b 28 this->baud(this->baudrate);
TakashiSasaki 6:9824d4e2f29b 29 wait(4);
TakashiSasaki 6:9824d4e2f29b 30 //this->reset();
TakashiSasaki 6:9824d4e2f29b 31 receive(buf, 5, 500);
TakashiSasaki 6:9824d4e2f29b 32 pc.printf("%02x %02x %02x %02x %02x", buf[0], buf[1], buf[2], buf[3], buf[4]);
TakashiSasaki 6:9824d4e2f29b 33 };
TakashiSasaki 6:9824d4e2f29b 34
TakashiSasaki 6:9824d4e2f29b 35 void baud57600(){
TakashiSasaki 6:9824d4e2f29b 36 char buf[7] = {0x56, 0x00, 0x24, 0x03, 0x01, 0x1c, 0x4c};
TakashiSasaki 6:9824d4e2f29b 37 int ret = sendReceive(buf, sizeof buf, 5);
TakashiSasaki 6:9824d4e2f29b 38 wait(0.5);
TakashiSasaki 6:9824d4e2f29b 39 this->reset();
TakashiSasaki 6:9824d4e2f29b 40 this->baudrate = 57600;
TakashiSasaki 6:9824d4e2f29b 41 this->baud(this->baudrate);
TakashiSasaki 6:9824d4e2f29b 42 };
TakashiSasaki 6:9824d4e2f29b 43
TakashiSasaki 6:9824d4e2f29b 44
TakashiSasaki 6:9824d4e2f29b 45 void baud38400(){
TakashiSasaki 6:9824d4e2f29b 46 char buf[7] = {0x56, 0x00, 0x24, 0x03, 0x01, 0x2a, 0xf2};
TakashiSasaki 8:3230ddd3a3d1 47 //int ret = sendReceive(buf, sizeof buf, 5);
TakashiSasaki 8:3230ddd3a3d1 48 for (int i = 0; i < sizeof buf; i++) putc(buf[i]);
TakashiSasaki 6:9824d4e2f29b 49 wait(0.5);
TakashiSasaki 6:9824d4e2f29b 50 //this->reset();
TakashiSasaki 6:9824d4e2f29b 51 this->baudrate = 38400;
TakashiSasaki 6:9824d4e2f29b 52 this->baud(this->baudrate);
TakashiSasaki 8:3230ddd3a3d1 53 wait(4);
TakashiSasaki 8:3230ddd3a3d1 54 //this->reset();
TakashiSasaki 8:3230ddd3a3d1 55 receive(buf, 5, 500);
TakashiSasaki 6:9824d4e2f29b 56 pc.printf("%02x %02x %02x %02x %02x", buf[0], buf[1], buf[2], buf[3], buf[4]);
TakashiSasaki 6:9824d4e2f29b 57 };
TakashiSasaki 6:9824d4e2f29b 58
TakashiSasaki 9:3a2d25f4700b 59 bool processPicture() {
TakashiSasaki 9:3a2d25f4700b 60 if (state == PROCESSING) {
TakashiSasaki 9:3a2d25f4700b 61 if (address < imageSize) {
TakashiSasaki 9:3a2d25f4700b 62 char data[1024];
TakashiSasaki 9:3a2d25f4700b 63 int size = readData(data, min(sizeof(data), imageSize - address), address);
TakashiSasaki 9:3a2d25f4700b 64 int ret = fwrite(data, size, 1, fp);
TakashiSasaki 9:3a2d25f4700b 65 if (ret > 0)
TakashiSasaki 9:3a2d25f4700b 66 address += size;
TakashiSasaki 9:3a2d25f4700b 67 if (ret == 0 || address >= imageSize) {
TakashiSasaki 9:3a2d25f4700b 68 stopPictures();
TakashiSasaki 9:3a2d25f4700b 69 fclose(fp);
TakashiSasaki 9:3a2d25f4700b 70 wait(0.1); // ????
TakashiSasaki 9:3a2d25f4700b 71 state = ret > 0 ? READY : ERROR;
TakashiSasaki 9:3a2d25f4700b 72 }//if
TakashiSasaki 12:495d513bb022 73 //for(int i=0; i<sizeof data; ++i){
TakashiSasaki 12:495d513bb022 74 // xbee.putc(data[i]);
TakashiSasaki 12:495d513bb022 75 // //pc.printf("%02x ", data[i]);
TakashiSasaki 12:495d513bb022 76 //}//for
TakashiSasaki 9:3a2d25f4700b 77 }//if
TakashiSasaki 9:3a2d25f4700b 78 }//if
TakashiSasaki 9:3a2d25f4700b 79 return state == PROCESSING || state == READY;
TakashiSasaki 9:3a2d25f4700b 80 }//processPicture
TakashiSasaki 9:3a2d25f4700b 81
TakashiSasaki 6:9824d4e2f29b 82 void shoot(int i){
TakashiSasaki 6:9824d4e2f29b 83
TakashiSasaki 6:9824d4e2f29b 84 if (!this->isReady()) {
TakashiSasaki 7:cc8080b31ac5 85 pc.printf("show camera is not ready\n");
TakashiSasaki 6:9824d4e2f29b 86 //myled4 = 1; //show camera is not ready
TakashiSasaki 6:9824d4e2f29b 87 //wait(2.0);
TakashiSasaki 6:9824d4e2f29b 88 //myled4 = 0;
TakashiSasaki 6:9824d4e2f29b 89 return;
TakashiSasaki 6:9824d4e2f29b 90 }//if
TakashiSasaki 6:9824d4e2f29b 91
TakashiSasaki 6:9824d4e2f29b 92 char filename[32];
TakashiSasaki 6:9824d4e2f29b 93 sprintf(filename, FILENAME, i);
TakashiSasaki 6:9824d4e2f29b 94 printf("Picture: %s ", filename);
TakashiSasaki 6:9824d4e2f29b 95 myled1 = 1;
TakashiSasaki 6:9824d4e2f29b 96 if (this->takePicture(filename)) {
TakashiSasaki 6:9824d4e2f29b 97 while (this->isProcessing()) {
TakashiSasaki 6:9824d4e2f29b 98 this->processPicture();
TakashiSasaki 6:9824d4e2f29b 99 }//while
SolManB 14:f97c682b6fe5 100 myled1 = 1; //show successful picture was tak€en
TakashiSasaki 6:9824d4e2f29b 101 //wait(2.0);
SolManB 14:f97c682b6fe5 102 myled1 = 0;
TakashiSasaki 6:9824d4e2f29b 103 } else {
TakashiSasaki 7:cc8080b31ac5 104 pc.printf("shot %s\n", filename);
SolManB 14:f97c682b6fe5 105 // myled3 = 1; //show picture take failed
TakashiSasaki 6:9824d4e2f29b 106 //wait(2.0);
SolManB 14:f97c682b6fe5 107 // myled3 = 0;
TakashiSasaki 6:9824d4e2f29b 108 }//if
TakashiSasaki 7:cc8080b31ac5 109 this->stopPictures();
TakashiSasaki 6:9824d4e2f29b 110 myled1 = 0;
TakashiSasaki 6:9824d4e2f29b 111 };//shoot
TakashiSasaki 6:9824d4e2f29b 112
TakashiSasaki 9:3a2d25f4700b 113
TakashiSasaki 6:9824d4e2f29b 114 };//FastJpegCamera
TakashiSasaki 6:9824d4e2f29b 115
TakashiSasaki 6:9824d4e2f29b 116 #endif