example for for using the flir lepton on the stm32nucleo_401re
Dependencies: mbed
main.cpp@3:c8b4b823b01c, 2014-09-20 (annotated)
- Committer:
- pureengineering
- Date:
- Sat Sep 20 04:08:12 2014 +0000
- Revision:
- 3:c8b4b823b01c
- Parent:
- 2:5daa51a2ce48
changed name
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pureengineering | 0:4065e63beba6 | 1 | #include "mbed.h" |
pureengineering | 0:4065e63beba6 | 2 | |
pureengineering | 0:4065e63beba6 | 3 | Serial pc(SERIAL_TX, SERIAL_RX); |
pureengineering | 0:4065e63beba6 | 4 | SPI lepton_spi(SPI_MOSI, SPI_MISO, SPI_SCK); |
pureengineering | 0:4065e63beba6 | 5 | DigitalOut spi_cs(SPI_CS); |
pureengineering | 0:4065e63beba6 | 6 | |
pureengineering | 0:4065e63beba6 | 7 | #define VOSPI_FRAME_SIZE (164) |
pureengineering | 0:4065e63beba6 | 8 | uint8_t lepton_frame_packet[VOSPI_FRAME_SIZE]; |
pureengineering | 0:4065e63beba6 | 9 | int lepton_image[80][80]; |
pureengineering | 0:4065e63beba6 | 10 | |
pureengineering | 1:dd6a90cf2191 | 11 | |
pureengineering | 1:dd6a90cf2191 | 12 | int print_image_binary_state =-1; |
pureengineering | 1:dd6a90cf2191 | 13 | int print_image_binary_i; |
pureengineering | 1:dd6a90cf2191 | 14 | int print_image_binary_j; |
pureengineering | 1:dd6a90cf2191 | 15 | |
pureengineering | 1:dd6a90cf2191 | 16 | static void print_image_binary_background(void) |
pureengineering | 1:dd6a90cf2191 | 17 | { |
pureengineering | 1:dd6a90cf2191 | 18 | if( print_image_binary_state == -1) |
pureengineering | 1:dd6a90cf2191 | 19 | { |
pureengineering | 1:dd6a90cf2191 | 20 | return; |
pureengineering | 1:dd6a90cf2191 | 21 | } |
pureengineering | 1:dd6a90cf2191 | 22 | else if( print_image_binary_state == 0) |
pureengineering | 1:dd6a90cf2191 | 23 | { |
pureengineering | 1:dd6a90cf2191 | 24 | pc.putc(0xDE); |
pureengineering | 1:dd6a90cf2191 | 25 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 26 | } |
pureengineering | 1:dd6a90cf2191 | 27 | else if( print_image_binary_state == 1) |
pureengineering | 1:dd6a90cf2191 | 28 | { |
pureengineering | 1:dd6a90cf2191 | 29 | pc.putc(0xAD); |
pureengineering | 1:dd6a90cf2191 | 30 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 31 | } |
pureengineering | 1:dd6a90cf2191 | 32 | else if( print_image_binary_state == 2) |
pureengineering | 1:dd6a90cf2191 | 33 | { |
pureengineering | 1:dd6a90cf2191 | 34 | pc.putc(0xBE); |
pureengineering | 1:dd6a90cf2191 | 35 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 36 | } |
pureengineering | 1:dd6a90cf2191 | 37 | else if( print_image_binary_state == 3) |
pureengineering | 1:dd6a90cf2191 | 38 | { |
pureengineering | 1:dd6a90cf2191 | 39 | pc.putc(0xEF); |
pureengineering | 1:dd6a90cf2191 | 40 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 41 | print_image_binary_i = 0; |
pureengineering | 1:dd6a90cf2191 | 42 | print_image_binary_j = 0; |
pureengineering | 1:dd6a90cf2191 | 43 | } |
pureengineering | 1:dd6a90cf2191 | 44 | else if( print_image_binary_state == 4) |
pureengineering | 1:dd6a90cf2191 | 45 | { |
pureengineering | 1:dd6a90cf2191 | 46 | while(pc.writeable() == 0); |
pureengineering | 1:dd6a90cf2191 | 47 | pc.putc((lepton_image[print_image_binary_i][print_image_binary_j]>>8)&0xff); |
pureengineering | 1:dd6a90cf2191 | 48 | while(pc.writeable() == 0); |
pureengineering | 1:dd6a90cf2191 | 49 | pc.putc(lepton_image[print_image_binary_i][print_image_binary_j]&0xff); |
pureengineering | 1:dd6a90cf2191 | 50 | |
pureengineering | 1:dd6a90cf2191 | 51 | print_image_binary_j++; |
pureengineering | 1:dd6a90cf2191 | 52 | if(print_image_binary_j>=80) |
pureengineering | 1:dd6a90cf2191 | 53 | { |
pureengineering | 1:dd6a90cf2191 | 54 | print_image_binary_j=0; |
pureengineering | 1:dd6a90cf2191 | 55 | print_image_binary_i++; |
pureengineering | 1:dd6a90cf2191 | 56 | if(print_image_binary_i>=60) |
pureengineering | 1:dd6a90cf2191 | 57 | { |
pureengineering | 1:dd6a90cf2191 | 58 | print_image_binary_state = -1; |
pureengineering | 1:dd6a90cf2191 | 59 | } |
pureengineering | 1:dd6a90cf2191 | 60 | } |
pureengineering | 1:dd6a90cf2191 | 61 | } |
pureengineering | 1:dd6a90cf2191 | 62 | |
pureengineering | 1:dd6a90cf2191 | 63 | } |
pureengineering | 1:dd6a90cf2191 | 64 | |
pureengineering | 1:dd6a90cf2191 | 65 | |
pureengineering | 1:dd6a90cf2191 | 66 | |
pureengineering | 0:4065e63beba6 | 67 | int lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 68 | |
pureengineering | 0:4065e63beba6 | 69 | int last_frame_number; |
pureengineering | 0:4065e63beba6 | 70 | int frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 71 | int start_image = 0; |
pureengineering | 0:4065e63beba6 | 72 | int need_resync = 0; |
pureengineering | 0:4065e63beba6 | 73 | int last_crc; |
pureengineering | 0:4065e63beba6 | 74 | int new_frame = 0; |
pureengineering | 0:4065e63beba6 | 75 | int frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 76 | |
pureengineering | 0:4065e63beba6 | 77 | void transfer(void) |
pureengineering | 0:4065e63beba6 | 78 | { |
pureengineering | 0:4065e63beba6 | 79 | int i; |
pureengineering | 0:4065e63beba6 | 80 | int frame_number; |
pureengineering | 0:4065e63beba6 | 81 | |
pureengineering | 0:4065e63beba6 | 82 | |
pureengineering | 0:4065e63beba6 | 83 | spi_cs = 0; |
pureengineering | 0:4065e63beba6 | 84 | for(i=0;i<VOSPI_FRAME_SIZE;i++) |
pureengineering | 0:4065e63beba6 | 85 | { |
pureengineering | 1:dd6a90cf2191 | 86 | lepton_frame_packet[i] = lepton_spi.write(0x00); |
pureengineering | 0:4065e63beba6 | 87 | } |
pureengineering | 0:4065e63beba6 | 88 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 89 | |
pureengineering | 0:4065e63beba6 | 90 | |
pureengineering | 0:4065e63beba6 | 91 | if(((lepton_frame_packet[0]&0xf) != 0x0f)) |
pureengineering | 0:4065e63beba6 | 92 | { |
pureengineering | 0:4065e63beba6 | 93 | if(lepton_frame_packet[1] == 0 ) |
pureengineering | 0:4065e63beba6 | 94 | { |
pureengineering | 0:4065e63beba6 | 95 | if(last_crc != (lepton_frame_packet[3]<<8 | lepton_frame_packet[4])) |
pureengineering | 0:4065e63beba6 | 96 | { |
pureengineering | 0:4065e63beba6 | 97 | new_frame = 1; |
pureengineering | 0:4065e63beba6 | 98 | } |
pureengineering | 0:4065e63beba6 | 99 | last_crc = lepton_frame_packet[3]<<8 | lepton_frame_packet[4]; |
pureengineering | 0:4065e63beba6 | 100 | } |
pureengineering | 0:4065e63beba6 | 101 | frame_number = lepton_frame_packet[1]; |
pureengineering | 1:dd6a90cf2191 | 102 | |
pureengineering | 0:4065e63beba6 | 103 | if(frame_number < 60 ) |
pureengineering | 0:4065e63beba6 | 104 | { |
pureengineering | 0:4065e63beba6 | 105 | lost_frame_counter = 0; |
pureengineering | 1:dd6a90cf2191 | 106 | if(print_image_binary_state == -1) |
pureengineering | 0:4065e63beba6 | 107 | { |
pureengineering | 1:dd6a90cf2191 | 108 | for(i=0;i<80;i++) |
pureengineering | 1:dd6a90cf2191 | 109 | { |
pureengineering | 1:dd6a90cf2191 | 110 | lepton_image[frame_number][i] = (lepton_frame_packet[2*i+4] << 8 | lepton_frame_packet[2*i+5]); |
pureengineering | 1:dd6a90cf2191 | 111 | } |
pureengineering | 0:4065e63beba6 | 112 | } |
pureengineering | 0:4065e63beba6 | 113 | } |
pureengineering | 1:dd6a90cf2191 | 114 | else |
pureengineering | 1:dd6a90cf2191 | 115 | { |
pureengineering | 1:dd6a90cf2191 | 116 | lost_frame_counter++; |
pureengineering | 1:dd6a90cf2191 | 117 | } |
pureengineering | 0:4065e63beba6 | 118 | if( frame_number == 59) |
pureengineering | 0:4065e63beba6 | 119 | { |
pureengineering | 0:4065e63beba6 | 120 | frame_complete = 1; |
pureengineering | 0:4065e63beba6 | 121 | last_frame_number = 0; |
pureengineering | 0:4065e63beba6 | 122 | } |
pureengineering | 0:4065e63beba6 | 123 | } |
pureengineering | 0:4065e63beba6 | 124 | else |
pureengineering | 0:4065e63beba6 | 125 | { |
pureengineering | 1:dd6a90cf2191 | 126 | if(last_frame_number ==0) |
pureengineering | 1:dd6a90cf2191 | 127 | { |
pureengineering | 1:dd6a90cf2191 | 128 | } |
pureengineering | 0:4065e63beba6 | 129 | } |
pureengineering | 0:4065e63beba6 | 130 | |
pureengineering | 0:4065e63beba6 | 131 | lost_frame_counter++; |
pureengineering | 1:dd6a90cf2191 | 132 | if(lost_frame_counter>100) |
pureengineering | 0:4065e63beba6 | 133 | { |
pureengineering | 0:4065e63beba6 | 134 | need_resync = 1; |
pureengineering | 0:4065e63beba6 | 135 | lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 136 | |
pureengineering | 0:4065e63beba6 | 137 | } |
pureengineering | 0:4065e63beba6 | 138 | |
pureengineering | 0:4065e63beba6 | 139 | if(need_resync) |
pureengineering | 0:4065e63beba6 | 140 | { |
pureengineering | 1:dd6a90cf2191 | 141 | wait_ms(185); |
pureengineering | 0:4065e63beba6 | 142 | need_resync = 0; |
pureengineering | 0:4065e63beba6 | 143 | } |
pureengineering | 0:4065e63beba6 | 144 | |
pureengineering | 0:4065e63beba6 | 145 | |
pureengineering | 0:4065e63beba6 | 146 | if(frame_complete) |
pureengineering | 0:4065e63beba6 | 147 | { |
pureengineering | 0:4065e63beba6 | 148 | if(new_frame) |
pureengineering | 0:4065e63beba6 | 149 | { |
pureengineering | 0:4065e63beba6 | 150 | frame_counter++; |
pureengineering | 0:4065e63beba6 | 151 | { |
pureengineering | 3:c8b4b823b01c | 152 | if(frame_counter%12 ==0) |
pureengineering | 0:4065e63beba6 | 153 | { |
pureengineering | 1:dd6a90cf2191 | 154 | print_image_binary_state = 0; |
pureengineering | 0:4065e63beba6 | 155 | } |
pureengineering | 0:4065e63beba6 | 156 | } |
pureengineering | 0:4065e63beba6 | 157 | new_frame = 0; |
pureengineering | 0:4065e63beba6 | 158 | } |
pureengineering | 0:4065e63beba6 | 159 | frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 160 | } |
pureengineering | 0:4065e63beba6 | 161 | } |
pureengineering | 0:4065e63beba6 | 162 | |
pureengineering | 0:4065e63beba6 | 163 | |
pureengineering | 0:4065e63beba6 | 164 | int main() |
pureengineering | 0:4065e63beba6 | 165 | { |
pureengineering | 0:4065e63beba6 | 166 | pc.baud(115200); |
pureengineering | 0:4065e63beba6 | 167 | lepton_spi.format(8,3); |
pureengineering | 0:4065e63beba6 | 168 | lepton_spi.frequency(20000000); |
pureengineering | 0:4065e63beba6 | 169 | spi_cs = 1; |
pureengineering | 1:dd6a90cf2191 | 170 | spi_cs = 0; |
pureengineering | 1:dd6a90cf2191 | 171 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 172 | |
pureengineering | 1:dd6a90cf2191 | 173 | wait_ms(185); |
pureengineering | 0:4065e63beba6 | 174 | |
pureengineering | 0:4065e63beba6 | 175 | while(1) |
pureengineering | 0:4065e63beba6 | 176 | { |
pureengineering | 0:4065e63beba6 | 177 | transfer(); |
pureengineering | 1:dd6a90cf2191 | 178 | print_image_binary_background(); |
pureengineering | 0:4065e63beba6 | 179 | } |
pureengineering | 0:4065e63beba6 | 180 | } |
pureengineering | 0:4065e63beba6 | 181 |