Lepton sensor on the DISCO-F746NG board. Based on the rapberry_pi example code at https://github.com/groupgets/LeptonModule

Dependencies:   mbed-src BSP_DISCO_F746NG LCD_DISCO_F746NG

Revision:
7:c0f3fc856506
Parent:
6:5c25567a46df
Child:
8:f57dc76095f3
--- a/main.cpp	Wed Dec 09 14:19:28 2015 +0100
+++ b/main.cpp	Wed Dec 09 15:16:11 2015 +0000
@@ -1,5 +1,6 @@
 #include "mbed.h"
 #include "palettes.h"
+#include "LCD_DISCO_F746NG.h"
 
 #define BYTES_PER_PACKET (164)
 #define DATA_PER_PACKET (BYTES_PER_PACKET/2)
@@ -11,7 +12,7 @@
 LCD_DISCO_F746NG lcd;
 
 static uint8_t lepton_buffer[BYTES_PER_PACKET * PACKETS_PER_FRAME];
-static uint32_t lepton_image[80][80];
+static uint32_t lepton_image[80][60];
 
 void setup(void)
 {
@@ -26,24 +27,29 @@
 
 void get_frame(void)
 {
-	int p;
+    int p;
     int i;
     int packet_num;
-	
-	spi_cs = 0;
+
+    spi_cs = 0;
 
     // No error handling. Assume we don't loose any packets
-    for(p=0;p<PACKETS_PER_FRAME;p++){
-        for(i=0;i<BYTES_PER_PACKET;i++){
-         lepton_buffer[p*PACKETS_PER_FRAME + i] = lepton_spi.write(0x00);
+    for(p=0; p<PACKETS_PER_FRAME; p++) {
+        for(i=0; i<BYTES_PER_PACKET; i++) {
+            lepton_buffer[p*BYTES_PER_PACKET + i] = lepton_spi.write(0x00);
         }
-        packet_num = lepton_buffer[p*PACKETS_PER_FRAME + 1];
-        if(packet_num != p){
-            pc.printf("Packet problem\n");
+        packet_num = lepton_buffer[p*BYTES_PER_PACKET + 1];
+        if(packet_num != p) {
+            //pc.printf("-");
+            i = -1;
+            p = -1;
+            wait_ms(1);
+        } else {
+            //pc.printf("+");
         }
     }
 
-	spi_cs = 1;
+    spi_cs = 1;
 }
 
 void create_image(void)
@@ -54,40 +60,60 @@
     int column;
     int row;
     int i;
+    int p;
 
-    for(i=0;i<DATA_PER_PACKET;i++){
-        if(i % DATA_PER_PACKET < 2){
-            continue;
-        }
-        value = lepton_buffer[i*2] < 8 + lepton_buffer[i*2+1];
-        if(value > max_val) {
-            max_val = value;
-        }
-        if(value < min_val) {
-            min_val = value;
+    for(p=0; p<PACKETS_PER_FRAME; p++) {
+        for(i=0; i<DATA_PER_PACKET; i++) {
+            if(i % DATA_PER_PACKET < 2) {
+                continue;
+            }
+            value = lepton_buffer[p*BYTES_PER_PACKET+i*2+1] < 8 + lepton_buffer[p*BYTES_PER_PACKET+i*2+0];
+            if(value > max_val) {
+                max_val = value;
+            }
+            if(value < min_val) {
+                min_val = value;
+            }
         }
     }
-        
+
     float diff = max_val - min_val;
     float scale = 255/diff;
     uint8_t r;
     uint8_t g;
     uint8_t b;
 
-    for(i=0;i<DATA_PER_PACKET;i++){
-        if(i % DATA_PER_PACKET < 2){
-            continue;
+    for(p=0; p<PACKETS_PER_FRAME; p++) {
+        for(i=0; i<DATA_PER_PACKET; i++) {
+            if(i % DATA_PER_PACKET < 2) {
+                continue;
+            }
+#if 0
+            value = lepton_buffer[p*BYTES_PER_PACKET+i*2+1] < 8 + lepton_buffer[p*BYTES_PER_PACKET+i*2+0];
+            column = (i % DATA_PER_PACKET ) - 2;
+            row = i / DATA_PER_PACKET;
+
+            value = (value - min_val) / scale;
+            r = colormap_ironblack[3*value];
+            g = colormap_ironblack[3*value+1];
+            b = colormap_ironblack[3*value+2];
+
+            lepton_image[row][column] = (0xFF << 24) | (r << 16) | (g << 8) | b;
+#endif
+            lepton_image[row][column] = (0xFF << 24) | (value % 255) << 16 | (value % 255) << 8 | (value % 255);
         }
-        value = lepton_buffer[i*2] < 8 + lepton_buffer[i*2+1];
-        column = (i % DATA_PER_PACKET ) - 2;
-        row = i / DATA_PER_PACKET;
+    }
+}
 
-        value = (value - min_val) / scale;
-        r = colormap_ironblack[3*value];
-        g = colormap_ironblack[3*value+1];
-        b = colormap_ironblack[3*value+2];
+void dummy_image(void)
+{
+    int column;
+    int row;
 
-        lepton_image[row][column] = 0xFF << 24 | r << 16 | g << 8 | b;        
+    for(row=0; row<80; row++) {
+        for(column=0; column<60; column++) {
+            lepton_image[row][column] = (0xFF << 24) | (row << 16) | (column << 8);
+        }
     }
 }
 
@@ -96,14 +122,26 @@
     int column;
     int row;
 
-    for(row=0;row<80;row++){
-        for(column=0;column<80;column++){
+    for(row=0; row<80; row++) {
+        for(column=0; column<60; column++) {
             lcd.SetTextColor(lepton_image[row][column]);
-            lcd.FillRect(column*4, row*4, 4, 4);
+            lcd.FillRect(row*4, column*4, 4, 4);
         }
     }
 }
 
+void dump_frame(void)
+{
+    int i;
+    int p;
+
+    for(p=0; p<PACKETS_PER_FRAME; p++) {
+        pc.printf("\n\nPacket %d:\n", p);
+        for(i=0; i<DATA_PER_PACKET; i++) {
+        	pc.printf("%x ", lepton_buffer[p*BYTES_PER_PACKET+i]);
+        }
+    }
+}
 
 int main()
 {
@@ -111,10 +149,11 @@
     setup();
     pc.printf("Up...\n");
 
-    while(1){
+    while(1) {
         get_frame();
-        create_image();
+        dump_frame();
+        //create_image();
+        //dummy_image();
         show_image();
-        pc.printf(".");
     }
 }
\ No newline at end of file