example for for using the flir lepton on the stm32nucleo_401re

Dependencies:   mbed

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?

UserRevisionLine numberNew 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