example for for using the flir lepton on the stm32nucleo_401re

Dependencies:   mbed

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?

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