example for for using the flir lepton on the stm32nucleo_401re

Dependencies:   mbed

Revision:
0:4065e63beba6
Child:
1:dd6a90cf2191
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Sep 18 05:27:49 2014 +0000
@@ -0,0 +1,157 @@
+#include "mbed.h"
+
+Serial pc(SERIAL_TX, SERIAL_RX);
+SPI lepton_spi(SPI_MOSI, SPI_MISO, SPI_SCK);
+DigitalOut spi_cs(SPI_CS);
+ 
+//DigitalOut myled(LED1);
+
+#define VOSPI_FRAME_SIZE (164) 
+uint8_t lepton_frame_packet[VOSPI_FRAME_SIZE]; 
+int lepton_image[80][80];
+
+static void print_image_binary(void)
+{
+    int i;
+    int j;
+    
+    pc.putc(0xDE);
+    pc.putc(0xAD);
+    pc.putc(0xBE);
+    pc.putc(0xEF);
+    
+    for(i=0;i<60;i++)
+    {
+        for(j=0;j<80;j++)
+        {
+            while(pc.writeable() == 0);
+            pc.putc((lepton_image[i][j]>>8)&0xff);
+            while(pc.writeable() == 0);
+            pc.putc(lepton_image[i][j]&0xff);
+            wait_us(1);
+        }
+    }
+}
+
+int lost_frame_counter = 0;
+
+int last_frame_number;
+int frame_complete = 0;
+int start_image = 0;
+int need_resync = 0;
+int last_crc;
+int new_frame = 0;
+int frame_counter = 0;
+
+void transfer(void)
+{
+    int i;
+    int frame_number;
+
+    
+    spi_cs = 0;
+    for(i=0;i<VOSPI_FRAME_SIZE;i++)
+    {
+        lepton_frame_packet[i] = lepton_spi.write(0x55);
+    }
+    spi_cs = 1;
+    
+    //pc.printf("%x %x \n\r",lepton_frame_packet[0], lepton_frame_packet[1]);
+    
+    //for(i=0;i<VOSPI_FRAME_SIZE;i++)
+    //{
+    //    pc.printf("%x,",lepton_frame_packet[i]);
+   // }
+    //pc.printf("\n\r");
+
+    if(((lepton_frame_packet[0]&0xf) != 0x0f))
+    {
+        if(lepton_frame_packet[1] == 0  )
+        {
+            if(last_crc != (lepton_frame_packet[3]<<8 | lepton_frame_packet[4]))
+            {
+                new_frame = 1;
+            }
+            last_crc = lepton_frame_packet[3]<<8 | lepton_frame_packet[4];
+        }
+        frame_number = lepton_frame_packet[1];
+        if( (frame_number>0) && (frame_number<60))
+        {
+            pc.printf("%d\n\r",frame_number);
+        }
+
+        if(frame_number < 60 )
+        {
+            lost_frame_counter = 0;
+            for(i=0;i<80;i++)
+            {
+                lepton_image[frame_number][i] = (lepton_frame_packet[2*i+4] << 8 | lepton_frame_packet[2*i+5]);
+            }
+        }
+        if( frame_number == 59)
+        {
+            frame_complete = 1;
+            last_frame_number = 0;
+        }
+    }
+    else
+    {
+        wait_us(10);
+    }
+
+    lost_frame_counter++;
+    if(lost_frame_counter>1000)
+    {
+        need_resync = 1;
+        lost_frame_counter = 0;
+
+    }
+
+    if(need_resync)
+    {
+        pc.printf("resync\n\r");
+        wait_us(185);
+        need_resync = 0;
+    }
+
+
+    if(frame_complete)
+    {
+        if(new_frame)
+        {
+            frame_counter++;
+            {
+                if(frame_counter%9 ==0)
+                {
+                    //print_image_binary();
+                }
+                pc.printf("print_image_binary\n\r");
+            }
+            new_frame = 0;
+        }
+
+        frame_complete = 0;
+    }
+}
+ 
+ 
+int main() 
+{
+
+    //pc.baud(9600);
+  pc.baud(115200);
+  //pc.baud(1000000);
+  pc.printf("Hello World !\n");
+  lepton_spi.format(8,3);
+  lepton_spi.frequency(20000000);
+  spi_cs = 1;
+  
+  wait_us(185);
+  
+  while(1) 
+  { 
+      //myled = !myled;
+      transfer();
+  }
+}
+ 
\ No newline at end of file