putting strings to xbee
Dependencies: BMP085 SDFileSystem mbed JPEGCamera
Fork of SaibiCansat2014 by
FastJpegCamera.h@13:aa50109c4cae, 2014-07-20 (annotated)
- Committer:
- TakashiSasaki
- Date:
- Sun Jul 20 13:53:17 2014 +0000
- Revision:
- 13:aa50109c4cae
- Parent:
- 12:495d513bb022
fix bug related to humidity sensor
Who changed what in which revision?
User | Revision | Line number | New 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 |
TakashiSasaki | 6:9824d4e2f29b | 100 | //myled1 = 1; //show successful picture was taken |
TakashiSasaki | 6:9824d4e2f29b | 101 | //wait(2.0); |
TakashiSasaki | 6:9824d4e2f29b | 102 | //myled1 = 0; |
TakashiSasaki | 6:9824d4e2f29b | 103 | } else { |
TakashiSasaki | 7:cc8080b31ac5 | 104 | pc.printf("shot %s\n", filename); |
TakashiSasaki | 6:9824d4e2f29b | 105 | //myled3 = 1; //show picture take failed |
TakashiSasaki | 6:9824d4e2f29b | 106 | //wait(2.0); |
TakashiSasaki | 6:9824d4e2f29b | 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 |