SmartWheels self-driving race car. Designed for NXP Cup. Uses FRDM-KL25Z, area-scan camera, and simple image processing to detect and navigate any NXP spec track.

Dependencies:   TSI USBDevice mbed-dev

Fork of SmartWheels by haofan Zheng

Committer:
hazheng
Date:
Tue Mar 14 23:36:13 2017 +0000
Revision:
37:7074a6118d03
Parent:
36:7e747e19f660
Child:
38:0fb273b28cee
Added support for OV7670.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hazheng 28:271fc8445e89 1 #pragma once
hazheng 28:271fc8445e89 2 #ifndef ARDU_CAM_H
hazheng 28:271fc8445e89 3 #define ARDU_CAM_H
hazheng 28:271fc8445e89 4
hazheng 29:f87d8790f57d 5 #include <mbed.h>
hazheng 28:271fc8445e89 6 #include "PinAssignment.h"
hazheng 28:271fc8445e89 7
hazheng 37:7074a6118d03 8 #define RESOLUTION_WIDTH 320
hazheng 37:7074a6118d03 9 #define RESOLUTION_HEIGHT 240
hazheng 36:7e747e19f660 10
hazheng 36:7e747e19f660 11 //=====Must pick one and only one here!=====
hazheng 37:7074a6118d03 12 //#define ARDUCAM_SHIELD_OV2640
hazheng 36:7e747e19f660 13 //#define ARDUCAM_SHIELD_OV7725
hazheng 37:7074a6118d03 14 #define ARDUCAM_SHIELD_OV7670
hazheng 36:7e747e19f660 15 //#define ARDUCAM_MINI_OV2640
hazheng 36:7e747e19f660 16 //==========================================
hazheng 36:7e747e19f660 17
hazheng 37:7074a6118d03 18 #define MANUAL_REDUCE_RESULOTION_BY2
hazheng 37:7074a6118d03 19
hazheng 37:7074a6118d03 20 #if defined(ARDUCAM_SHIELD_OV2640) || defined(ARDUCAM_SHIELD_OV7725) || defined(ARDUCAM_SHIELD_OV7670)
hazheng 36:7e747e19f660 21 #define ARDUCAM_SHIELD
hazheng 36:7e747e19f660 22 #elif defined(ARDUCAM_MINI_OV2640)
hazheng 36:7e747e19f660 23 #define ARDUCAM_MINI
hazheng 36:7e747e19f660 24 #else
hazheng 36:7e747e19f660 25 #error Must pick one and only one ArduCam type!
hazheng 36:7e747e19f660 26 #endif
hazheng 36:7e747e19f660 27
hazheng 36:7e747e19f660 28 #if defined(ARDUCAM_SHIELD_OV2640) || defined(ARDUCAM_MINI_OV2640)
hazheng 36:7e747e19f660 29 #define ARDUCAM_OV2640
hazheng 36:7e747e19f660 30 #elif defined(ARDUCAM_SHIELD_OV7725)
hazheng 36:7e747e19f660 31 #define ARDUCAM_OV7725
hazheng 37:7074a6118d03 32 #elif defined(ARDUCAM_SHIELD_OV7670)
hazheng 37:7074a6118d03 33 #define ARDUCAM_OV7670
hazheng 36:7e747e19f660 34 #else
hazheng 36:7e747e19f660 35 #error Must pick one and only one ArduCam type!
hazheng 36:7e747e19f660 36 #endif
hazheng 36:7e747e19f660 37
hazheng 36:7e747e19f660 38 #if defined(ARDUCAM_OV2640)
hazheng 36:7e747e19f660 39 #include "OV2640RegProg.h"
hazheng 36:7e747e19f660 40 using namespace OV2640Prog;
hazheng 36:7e747e19f660 41 #elif defined(ARDUCAM_OV7725)
hazheng 36:7e747e19f660 42 #include "OV7725RegProg.h"
hazheng 36:7e747e19f660 43 using namespace OV7725Prog;
hazheng 37:7074a6118d03 44 #elif defined(ARDUCAM_OV7670)
hazheng 37:7074a6118d03 45 #include "OV7670RegProg.h"
hazheng 37:7074a6118d03 46 using namespace OV7670Prog;
hazheng 36:7e747e19f660 47 #endif
hazheng 36:7e747e19f660 48
hazheng 36:7e747e19f660 49 #if defined(ARDUCAM_SHIELD)
hazheng 36:7e747e19f660 50 #define ARDUCHIP_VER_NUM 0x61
hazheng 36:7e747e19f660 51 #elif defined(ARDUCAM_MINI)
hazheng 36:7e747e19f660 52 #define ARDUCHIP_VER_NUM 0x55
hazheng 36:7e747e19f660 53 #endif
hazheng 36:7e747e19f660 54
hazheng 29:f87d8790f57d 55 #define ARDUCHIP_TEST1 0x00 //TEST register
hazheng 29:f87d8790f57d 56 #define ARDUCHIP_TEST_MSG 0x72
hazheng 29:f87d8790f57d 57
hazheng 29:f87d8790f57d 58 #define ARDUCHIP_CAP_CTRL 0x01 //Capture Control Register
hazheng 29:f87d8790f57d 59
hazheng 29:f87d8790f57d 60 #define ARDUCHIP_MODE 0x02 //Mode register
hazheng 29:f87d8790f57d 61 //#define MCU2LCD_MODE 0x00
hazheng 29:f87d8790f57d 62 //#define CAM2LCD_MODE 0x01
hazheng 29:f87d8790f57d 63 #define MCU2LCD_MODE 0x01
hazheng 29:f87d8790f57d 64 #define CAM2LCD_MODE 0x02
hazheng 29:f87d8790f57d 65 //#define LCD2MCU_MODE 0x04
hazheng 29:f87d8790f57d 66
hazheng 29:f87d8790f57d 67 #define ARDUCHIP_FIFO 0x04 //FIFO and I2C control
hazheng 29:f87d8790f57d 68 #define FIFO_CLEAR_MASK 0x01
hazheng 29:f87d8790f57d 69 #define FIFO_START_MASK 0x02
hazheng 29:f87d8790f57d 70 #define FIFO_RDPTR_RST_MASK 0x10
hazheng 29:f87d8790f57d 71 #define FIFO_WRPTR_RST_MASK 0x20
hazheng 29:f87d8790f57d 72
hazheng 32:5badeff825dc 73 #define FIFO_SIZE1 0x42 //Camera write FIFO size[7:0] for burst to read
hazheng 32:5badeff825dc 74 #define FIFO_SIZE2 0x43 //Camera write FIFO size[15:8]
hazheng 32:5badeff825dc 75 #define FIFO_SIZE3 0x44 //Camera write FIFO size[18:16
hazheng 32:5badeff825dc 76
hazheng 32:5badeff825dc 77 #define BURST_FIFO_READ 0x3C //Burst FIFO read operation
hazheng 32:5badeff825dc 78 #define SINGLE_FIFO_READ 0x3D //Single FIFO read operation
hazheng 29:f87d8790f57d 79
hazheng 28:271fc8445e89 80 bool ardu_cam_init();
hazheng 28:271fc8445e89 81
hazheng 29:f87d8790f57d 82 void ardu_cam_set_mode(uint8_t mode);
hazheng 29:f87d8790f57d 83
hazheng 29:f87d8790f57d 84 void ardu_cam_start_capture();
hazheng 29:f87d8790f57d 85
hazheng 32:5badeff825dc 86 uint32_t ardu_cam_get_fifo_length();
hazheng 32:5badeff825dc 87
hazheng 32:5badeff825dc 88 void ardu_cam_print_debug();
hazheng 32:5badeff825dc 89
hazheng 34:f79db3bc2f86 90 //uint8_t ardu_cam_read_reg(uint8_t addr);
hazheng 34:f79db3bc2f86 91
hazheng 34:f79db3bc2f86 92 //void ardu_cam_write_reg(uint8_t addr, uint8_t data);
hazheng 34:f79db3bc2f86 93
hazheng 34:f79db3bc2f86 94 //int ardu_cam_bus_write(int address, int value);
hazheng 34:f79db3bc2f86 95
hazheng 34:f79db3bc2f86 96 //uint8_t ardu_cam_bus_read(int address);
hazheng 34:f79db3bc2f86 97
hazheng 28:271fc8445e89 98 #endif //ARDU_CAM_H