example for for using the flir lepton on the stm32nucleo_401re
Dependencies: mbed
main.cpp@1:dd6a90cf2191, 2014-09-18 (annotated)
- Committer:
- pureengineering
- Date:
- Thu Sep 18 13:24:50 2014 +0000
- Revision:
- 1:dd6a90cf2191
- Parent:
- 0:4065e63beba6
- Child:
- 2:5daa51a2ce48
working
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 | 0:4065e63beba6 | 11 | static void print_image_binary(void) |
pureengineering | 0:4065e63beba6 | 12 | { |
pureengineering | 0:4065e63beba6 | 13 | int i; |
pureengineering | 0:4065e63beba6 | 14 | int j; |
pureengineering | 0:4065e63beba6 | 15 | |
pureengineering | 0:4065e63beba6 | 16 | pc.putc(0xDE); |
pureengineering | 0:4065e63beba6 | 17 | pc.putc(0xAD); |
pureengineering | 0:4065e63beba6 | 18 | pc.putc(0xBE); |
pureengineering | 0:4065e63beba6 | 19 | pc.putc(0xEF); |
pureengineering | 0:4065e63beba6 | 20 | |
pureengineering | 0:4065e63beba6 | 21 | for(i=0;i<60;i++) |
pureengineering | 0:4065e63beba6 | 22 | { |
pureengineering | 0:4065e63beba6 | 23 | for(j=0;j<80;j++) |
pureengineering | 0:4065e63beba6 | 24 | { |
pureengineering | 0:4065e63beba6 | 25 | while(pc.writeable() == 0); |
pureengineering | 0:4065e63beba6 | 26 | pc.putc((lepton_image[i][j]>>8)&0xff); |
pureengineering | 0:4065e63beba6 | 27 | while(pc.writeable() == 0); |
pureengineering | 0:4065e63beba6 | 28 | pc.putc(lepton_image[i][j]&0xff); |
pureengineering | 1:dd6a90cf2191 | 29 | //wait_us(1); |
pureengineering | 0:4065e63beba6 | 30 | } |
pureengineering | 0:4065e63beba6 | 31 | } |
pureengineering | 0:4065e63beba6 | 32 | } |
pureengineering | 0:4065e63beba6 | 33 | |
pureengineering | 1:dd6a90cf2191 | 34 | |
pureengineering | 1:dd6a90cf2191 | 35 | int print_image_binary_state =-1; |
pureengineering | 1:dd6a90cf2191 | 36 | int print_image_binary_i; |
pureengineering | 1:dd6a90cf2191 | 37 | int print_image_binary_j; |
pureengineering | 1:dd6a90cf2191 | 38 | |
pureengineering | 1:dd6a90cf2191 | 39 | static void print_image_binary_background(void) |
pureengineering | 1:dd6a90cf2191 | 40 | { |
pureengineering | 1:dd6a90cf2191 | 41 | if( print_image_binary_state == -1) |
pureengineering | 1:dd6a90cf2191 | 42 | { |
pureengineering | 1:dd6a90cf2191 | 43 | return; |
pureengineering | 1:dd6a90cf2191 | 44 | } |
pureengineering | 1:dd6a90cf2191 | 45 | else if( print_image_binary_state == 0) |
pureengineering | 1:dd6a90cf2191 | 46 | { |
pureengineering | 1:dd6a90cf2191 | 47 | pc.putc(0xDE); |
pureengineering | 1:dd6a90cf2191 | 48 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 49 | } |
pureengineering | 1:dd6a90cf2191 | 50 | else if( print_image_binary_state == 1) |
pureengineering | 1:dd6a90cf2191 | 51 | { |
pureengineering | 1:dd6a90cf2191 | 52 | pc.putc(0xAD); |
pureengineering | 1:dd6a90cf2191 | 53 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 54 | } |
pureengineering | 1:dd6a90cf2191 | 55 | else if( print_image_binary_state == 2) |
pureengineering | 1:dd6a90cf2191 | 56 | { |
pureengineering | 1:dd6a90cf2191 | 57 | pc.putc(0xBE); |
pureengineering | 1:dd6a90cf2191 | 58 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 59 | } |
pureengineering | 1:dd6a90cf2191 | 60 | else if( print_image_binary_state == 3) |
pureengineering | 1:dd6a90cf2191 | 61 | { |
pureengineering | 1:dd6a90cf2191 | 62 | pc.putc(0xEF); |
pureengineering | 1:dd6a90cf2191 | 63 | print_image_binary_state++; |
pureengineering | 1:dd6a90cf2191 | 64 | print_image_binary_i = 0; |
pureengineering | 1:dd6a90cf2191 | 65 | print_image_binary_j = 0; |
pureengineering | 1:dd6a90cf2191 | 66 | } |
pureengineering | 1:dd6a90cf2191 | 67 | else if( print_image_binary_state == 4) |
pureengineering | 1:dd6a90cf2191 | 68 | { |
pureengineering | 1:dd6a90cf2191 | 69 | while(pc.writeable() == 0); |
pureengineering | 1:dd6a90cf2191 | 70 | pc.putc((lepton_image[print_image_binary_i][print_image_binary_j]>>8)&0xff); |
pureengineering | 1:dd6a90cf2191 | 71 | while(pc.writeable() == 0); |
pureengineering | 1:dd6a90cf2191 | 72 | pc.putc(lepton_image[print_image_binary_i][print_image_binary_j]&0xff); |
pureengineering | 1:dd6a90cf2191 | 73 | |
pureengineering | 1:dd6a90cf2191 | 74 | print_image_binary_j++; |
pureengineering | 1:dd6a90cf2191 | 75 | if(print_image_binary_j>=80) |
pureengineering | 1:dd6a90cf2191 | 76 | { |
pureengineering | 1:dd6a90cf2191 | 77 | print_image_binary_j=0; |
pureengineering | 1:dd6a90cf2191 | 78 | print_image_binary_i++; |
pureengineering | 1:dd6a90cf2191 | 79 | if(print_image_binary_i>=60) |
pureengineering | 1:dd6a90cf2191 | 80 | { |
pureengineering | 1:dd6a90cf2191 | 81 | print_image_binary_state = -1; |
pureengineering | 1:dd6a90cf2191 | 82 | } |
pureengineering | 1:dd6a90cf2191 | 83 | } |
pureengineering | 1:dd6a90cf2191 | 84 | } |
pureengineering | 1:dd6a90cf2191 | 85 | |
pureengineering | 1:dd6a90cf2191 | 86 | } |
pureengineering | 1:dd6a90cf2191 | 87 | |
pureengineering | 1:dd6a90cf2191 | 88 | |
pureengineering | 1:dd6a90cf2191 | 89 | |
pureengineering | 0:4065e63beba6 | 90 | int lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 91 | |
pureengineering | 0:4065e63beba6 | 92 | int last_frame_number; |
pureengineering | 0:4065e63beba6 | 93 | int frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 94 | int start_image = 0; |
pureengineering | 0:4065e63beba6 | 95 | int need_resync = 0; |
pureengineering | 0:4065e63beba6 | 96 | int last_crc; |
pureengineering | 0:4065e63beba6 | 97 | int new_frame = 0; |
pureengineering | 0:4065e63beba6 | 98 | int frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 99 | |
pureengineering | 0:4065e63beba6 | 100 | void transfer(void) |
pureengineering | 0:4065e63beba6 | 101 | { |
pureengineering | 0:4065e63beba6 | 102 | int i; |
pureengineering | 0:4065e63beba6 | 103 | int frame_number; |
pureengineering | 0:4065e63beba6 | 104 | |
pureengineering | 0:4065e63beba6 | 105 | |
pureengineering | 0:4065e63beba6 | 106 | spi_cs = 0; |
pureengineering | 0:4065e63beba6 | 107 | for(i=0;i<VOSPI_FRAME_SIZE;i++) |
pureengineering | 0:4065e63beba6 | 108 | { |
pureengineering | 1:dd6a90cf2191 | 109 | lepton_frame_packet[i] = lepton_spi.write(0x00); |
pureengineering | 0:4065e63beba6 | 110 | } |
pureengineering | 0:4065e63beba6 | 111 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 112 | |
pureengineering | 0:4065e63beba6 | 113 | |
pureengineering | 0:4065e63beba6 | 114 | if(((lepton_frame_packet[0]&0xf) != 0x0f)) |
pureengineering | 0:4065e63beba6 | 115 | { |
pureengineering | 0:4065e63beba6 | 116 | if(lepton_frame_packet[1] == 0 ) |
pureengineering | 0:4065e63beba6 | 117 | { |
pureengineering | 0:4065e63beba6 | 118 | if(last_crc != (lepton_frame_packet[3]<<8 | lepton_frame_packet[4])) |
pureengineering | 0:4065e63beba6 | 119 | { |
pureengineering | 0:4065e63beba6 | 120 | new_frame = 1; |
pureengineering | 0:4065e63beba6 | 121 | } |
pureengineering | 0:4065e63beba6 | 122 | last_crc = lepton_frame_packet[3]<<8 | lepton_frame_packet[4]; |
pureengineering | 0:4065e63beba6 | 123 | } |
pureengineering | 0:4065e63beba6 | 124 | frame_number = lepton_frame_packet[1]; |
pureengineering | 1:dd6a90cf2191 | 125 | |
pureengineering | 0:4065e63beba6 | 126 | if(frame_number < 60 ) |
pureengineering | 0:4065e63beba6 | 127 | { |
pureengineering | 0:4065e63beba6 | 128 | lost_frame_counter = 0; |
pureengineering | 1:dd6a90cf2191 | 129 | if(print_image_binary_state == -1) |
pureengineering | 0:4065e63beba6 | 130 | { |
pureengineering | 1:dd6a90cf2191 | 131 | for(i=0;i<80;i++) |
pureengineering | 1:dd6a90cf2191 | 132 | { |
pureengineering | 1:dd6a90cf2191 | 133 | lepton_image[frame_number][i] = (lepton_frame_packet[2*i+4] << 8 | lepton_frame_packet[2*i+5]); |
pureengineering | 1:dd6a90cf2191 | 134 | } |
pureengineering | 0:4065e63beba6 | 135 | } |
pureengineering | 0:4065e63beba6 | 136 | } |
pureengineering | 1:dd6a90cf2191 | 137 | else |
pureengineering | 1:dd6a90cf2191 | 138 | { |
pureengineering | 1:dd6a90cf2191 | 139 | lost_frame_counter++; |
pureengineering | 1:dd6a90cf2191 | 140 | } |
pureengineering | 0:4065e63beba6 | 141 | if( frame_number == 59) |
pureengineering | 0:4065e63beba6 | 142 | { |
pureengineering | 0:4065e63beba6 | 143 | frame_complete = 1; |
pureengineering | 0:4065e63beba6 | 144 | last_frame_number = 0; |
pureengineering | 0:4065e63beba6 | 145 | } |
pureengineering | 0:4065e63beba6 | 146 | } |
pureengineering | 0:4065e63beba6 | 147 | else |
pureengineering | 0:4065e63beba6 | 148 | { |
pureengineering | 1:dd6a90cf2191 | 149 | if(last_frame_number ==0) |
pureengineering | 1:dd6a90cf2191 | 150 | { |
pureengineering | 1:dd6a90cf2191 | 151 | //wait_us(10); |
pureengineering | 1:dd6a90cf2191 | 152 | //pc.printf("."); |
pureengineering | 1:dd6a90cf2191 | 153 | } |
pureengineering | 0:4065e63beba6 | 154 | } |
pureengineering | 0:4065e63beba6 | 155 | |
pureengineering | 0:4065e63beba6 | 156 | lost_frame_counter++; |
pureengineering | 1:dd6a90cf2191 | 157 | if(lost_frame_counter>100) |
pureengineering | 0:4065e63beba6 | 158 | { |
pureengineering | 0:4065e63beba6 | 159 | need_resync = 1; |
pureengineering | 0:4065e63beba6 | 160 | lost_frame_counter = 0; |
pureengineering | 0:4065e63beba6 | 161 | |
pureengineering | 0:4065e63beba6 | 162 | } |
pureengineering | 0:4065e63beba6 | 163 | |
pureengineering | 0:4065e63beba6 | 164 | if(need_resync) |
pureengineering | 0:4065e63beba6 | 165 | { |
pureengineering | 1:dd6a90cf2191 | 166 | wait_ms(185); |
pureengineering | 0:4065e63beba6 | 167 | need_resync = 0; |
pureengineering | 0:4065e63beba6 | 168 | } |
pureengineering | 0:4065e63beba6 | 169 | |
pureengineering | 0:4065e63beba6 | 170 | |
pureengineering | 0:4065e63beba6 | 171 | if(frame_complete) |
pureengineering | 0:4065e63beba6 | 172 | { |
pureengineering | 0:4065e63beba6 | 173 | if(new_frame) |
pureengineering | 0:4065e63beba6 | 174 | { |
pureengineering | 0:4065e63beba6 | 175 | frame_counter++; |
pureengineering | 0:4065e63beba6 | 176 | { |
pureengineering | 1:dd6a90cf2191 | 177 | if(frame_counter%18 ==0) |
pureengineering | 0:4065e63beba6 | 178 | { |
pureengineering | 1:dd6a90cf2191 | 179 | print_image_binary_state = 0; |
pureengineering | 0:4065e63beba6 | 180 | } |
pureengineering | 0:4065e63beba6 | 181 | } |
pureengineering | 0:4065e63beba6 | 182 | new_frame = 0; |
pureengineering | 0:4065e63beba6 | 183 | } |
pureengineering | 0:4065e63beba6 | 184 | frame_complete = 0; |
pureengineering | 0:4065e63beba6 | 185 | } |
pureengineering | 0:4065e63beba6 | 186 | } |
pureengineering | 0:4065e63beba6 | 187 | |
pureengineering | 0:4065e63beba6 | 188 | |
pureengineering | 0:4065e63beba6 | 189 | int main() |
pureengineering | 0:4065e63beba6 | 190 | { |
pureengineering | 0:4065e63beba6 | 191 | pc.baud(115200); |
pureengineering | 0:4065e63beba6 | 192 | lepton_spi.format(8,3); |
pureengineering | 0:4065e63beba6 | 193 | lepton_spi.frequency(20000000); |
pureengineering | 0:4065e63beba6 | 194 | spi_cs = 1; |
pureengineering | 1:dd6a90cf2191 | 195 | spi_cs = 0; |
pureengineering | 1:dd6a90cf2191 | 196 | spi_cs = 1; |
pureengineering | 0:4065e63beba6 | 197 | |
pureengineering | 1:dd6a90cf2191 | 198 | wait_ms(185); |
pureengineering | 0:4065e63beba6 | 199 | |
pureengineering | 0:4065e63beba6 | 200 | while(1) |
pureengineering | 0:4065e63beba6 | 201 | { |
pureengineering | 0:4065e63beba6 | 202 | transfer(); |
pureengineering | 1:dd6a90cf2191 | 203 | print_image_binary_background(); |
pureengineering | 0:4065e63beba6 | 204 | } |
pureengineering | 0:4065e63beba6 | 205 | } |
pureengineering | 0:4065e63beba6 | 206 |