Jenny Plunkett
/
CameraOV528-Example
Hello World example program for the OV528 Camera Module
main.cpp@4:327a3341b5f3, 2017-07-07 (annotated)
- Committer:
- jplunkett
- Date:
- Fri Jul 07 20:43:28 2017 +0000
- Revision:
- 4:327a3341b5f3
- Parent:
- 1:67a9d5cee87c
- Child:
- 6:9f5ecac1118f
Bug fixes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jplunkett | 4:327a3341b5f3 | 1 | #include "mbed.h" |
jplunkett | 1:67a9d5cee87c | 2 | #include "CameraOV528.h" |
jplunkett | 0:ac819fa0198f | 3 | #include "FATFileSystem.h" |
jplunkett | 0:ac819fa0198f | 4 | #include "SDBlockDevice.h" |
jplunkett | 0:ac819fa0198f | 5 | #include <stdio.h> |
jplunkett | 0:ac819fa0198f | 6 | |
jplunkett | 4:327a3341b5f3 | 7 | CameraOV528 camera(D1, D0); // DX, RX |
jplunkett | 0:ac819fa0198f | 8 | SDBlockDevice bd(PTE3, PTE1, PTE2, PTE4); // MOSI, MISO, SCLK, CS |
jplunkett | 0:ac819fa0198f | 9 | FATFileSystem fs("fs"); |
jplunkett | 0:ac819fa0198f | 10 | DigitalOut led(LED_GREEN); |
jplunkett | 0:ac819fa0198f | 11 | DigitalIn btn(SW2); |
jplunkett | 0:ac819fa0198f | 12 | int picture_count; |
jplunkett | 0:ac819fa0198f | 13 | |
jplunkett | 4:327a3341b5f3 | 14 | int format_fs() { |
jplunkett | 0:ac819fa0198f | 15 | int error = 0; |
jplunkett | 0:ac819fa0198f | 16 | printf("Welcome to the filesystem example.\r\n" |
jplunkett | 0:ac819fa0198f | 17 | "Formatting a FAT, RAM-backed filesystem. "); |
jplunkett | 0:ac819fa0198f | 18 | error = FATFileSystem::format(&bd); |
jplunkett | 0:ac819fa0198f | 19 | if (error) |
jplunkett | 0:ac819fa0198f | 20 | printf("Failure. %d\r\n", error); |
jplunkett | 0:ac819fa0198f | 21 | else |
jplunkett | 0:ac819fa0198f | 22 | printf("done.\r\n"); |
jplunkett | 0:ac819fa0198f | 23 | return error; |
jplunkett | 0:ac819fa0198f | 24 | } |
jplunkett | 0:ac819fa0198f | 25 | |
jplunkett | 0:ac819fa0198f | 26 | int mount_fs() { |
jplunkett | 0:ac819fa0198f | 27 | printf("Mounting the filesystem on \"/fs\". "); |
jplunkett | 0:ac819fa0198f | 28 | int error = fs.mount(&bd); |
jplunkett | 0:ac819fa0198f | 29 | if (error) |
jplunkett | 0:ac819fa0198f | 30 | printf("Failure. %d\r\n", error); |
jplunkett | 0:ac819fa0198f | 31 | else |
jplunkett | 0:ac819fa0198f | 32 | printf("done.\r\n"); |
jplunkett | 0:ac819fa0198f | 33 | return error; |
jplunkett | 0:ac819fa0198f | 34 | } |
jplunkett | 0:ac819fa0198f | 35 | |
jplunkett | 0:ac819fa0198f | 36 | void init_fs() { |
jplunkett | 0:ac819fa0198f | 37 | if (mount_fs()) { |
jplunkett | 0:ac819fa0198f | 38 | format_fs(); |
jplunkett | 0:ac819fa0198f | 39 | mount_fs(); |
jplunkett | 0:ac819fa0198f | 40 | } |
jplunkett | 0:ac819fa0198f | 41 | } |
jplunkett | 0:ac819fa0198f | 42 | |
jplunkett | 0:ac819fa0198f | 43 | void blink() { |
jplunkett | 0:ac819fa0198f | 44 | led = !led; |
jplunkett | 0:ac819fa0198f | 45 | } |
jplunkett | 0:ac819fa0198f | 46 | |
jplunkett | 0:ac819fa0198f | 47 | void take_and_store_photo() { |
jplunkett | 0:ac819fa0198f | 48 | blink(); |
jplunkett | 0:ac819fa0198f | 49 | |
jplunkett | 0:ac819fa0198f | 50 | if(camera.take_picture() == 0) { |
jplunkett | 0:ac819fa0198f | 51 | printf("Picture taken.\r\n"); |
jplunkett | 0:ac819fa0198f | 52 | |
jplunkett | 0:ac819fa0198f | 53 | uint32_t size = camera.get_picture_size(); |
jplunkett | 0:ac819fa0198f | 54 | uint8_t* data_buff = (uint8_t*)malloc(size); |
jplunkett | 0:ac819fa0198f | 55 | uint32_t bytes_read = camera.read_picture_data(data_buff, size); |
jplunkett | 0:ac819fa0198f | 56 | char filename[30]; |
jplunkett | 0:ac819fa0198f | 57 | sprintf(filename, "/fs/img%d.jpg", picture_count++); |
jplunkett | 0:ac819fa0198f | 58 | |
jplunkett | 0:ac819fa0198f | 59 | printf("Opening a new file, %s.\r\n", filename); |
jplunkett | 0:ac819fa0198f | 60 | |
jplunkett | 0:ac819fa0198f | 61 | FILE* fd = fopen(filename, "wb"); |
jplunkett | 0:ac819fa0198f | 62 | fwrite(data_buff, sizeof(uint8_t), bytes_read, fd); |
jplunkett | 0:ac819fa0198f | 63 | fclose(fd); |
jplunkett | 0:ac819fa0198f | 64 | |
jplunkett | 0:ac819fa0198f | 65 | printf("Picture saved.\r\n\n"); |
jplunkett | 0:ac819fa0198f | 66 | |
jplunkett | 0:ac819fa0198f | 67 | free(data_buff); |
jplunkett | 0:ac819fa0198f | 68 | } |
jplunkett | 0:ac819fa0198f | 69 | else { |
jplunkett | 0:ac819fa0198f | 70 | printf("Failed to take photo.\r\n\n"); |
jplunkett | 0:ac819fa0198f | 71 | } |
jplunkett | 0:ac819fa0198f | 72 | } |
jplunkett | 0:ac819fa0198f | 73 | |
jplunkett | 0:ac819fa0198f | 74 | int main() { |
jplunkett | 0:ac819fa0198f | 75 | picture_count = 0; |
jplunkett | 0:ac819fa0198f | 76 | init_fs(); |
jplunkett | 0:ac819fa0198f | 77 | camera.powerup(); |
jplunkett | 0:ac819fa0198f | 78 | while (true) { |
jplunkett | 0:ac819fa0198f | 79 | if (!btn.read()) { |
jplunkett | 0:ac819fa0198f | 80 | take_and_store_photo(); |
jplunkett | 0:ac819fa0198f | 81 | } |
jplunkett | 0:ac819fa0198f | 82 | } |
jplunkett | 0:ac819fa0198f | 83 | } |