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
Diff: main.cpp
- 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