Basé sur un projet ProTIS / 2A

Objectifs

  • Utiliser une matrice de capteurs infrarouges de type GridEye / I2C
  • Visualiser cette matrice à l’aide d’un écran LCD TFT

Matériel

Capteur GridEye / Mode I2C

A venir

Interface graphique sur Disco F746NG

A venir

Exemple d’application

Code complet

#include "mbed.h"
#include "LCD_DISCO_F746NG.h"

LCD_DISCO_F746NG lcd;

/* Grid Eye on I2C */
I2C gridEye(I2C_SDA, I2C_SCL);

#define     AMG8833_ADR     0x68
#define     AMG8833_PCTL    0x00
#define     AMG8833_RST     0x01
#define     AMG8833_FPSC    0x02
#define     AMG8833_STAT    0x04
#define     AMG8833_THERM   0x0E
#define     AMG8833_PIX1    0x80
#define     AMG8833_NB_PIX  64

void initAMG8833(void){
    char data[2] = {AMG8833_PCTL, 0};       // Normal Mode -> PCTL
    gridEye.write(AMG8833_ADR  << 1, data, 2);
}
int getThermAMG8833(void){
    char data[2] = {AMG8833_THERM, 0};          
    gridEye.write(AMG8833_ADR  << 1, data, 1);
    gridEye.read(AMG8833_ADR  << 1, data, 2);
    int k = data[0] + data[1]*256;
    return k;
}
void getMatriceTempAMG8833(int *t){
    char data[AMG8833_NB_PIX*2] = {0};      
    data[0] = AMG8833_PIX1;    
    gridEye.write(AMG8833_ADR  << 1, data, 1);
    gridEye.read(AMG8833_ADR  << 1, data, AMG8833_NB_PIX*2);
    for(int i = 0; i < AMG8833_NB_PIX; i++){
        t[i] = data[2*i] + data[2*i+1]*256;
    }
}

int matriceGridEye[AMG8833_NB_PIX] = {0};

void DrawMatrice(LCD_DISCO_F746NG *lcd){
    int x, y, x_max, y_max;
    int taille_pixel = 30;
    x_max = 8;
    y_max = 8;
    for(y = 0; y < y_max; y++){
        for(x = 0; x < x_max; x++){
            uint32_t col = matriceGridEye[x + y*x_max] * 0x00000100 + 0xFF000000;
            lcd->SetTextColor(col);
            lcd->FillRect(x*taille_pixel, y*taille_pixel, taille_pixel, taille_pixel);
        }
    }    
}

/* MAIN FUNCTION */
int main()
{
    gridEye.frequency(400000);
    pc.baud(115200);
    /* Initialisation Grid Eye */
    initAMG8833();
    wait_ms(100);  

    /* Initialisation LCD */      
    lcd.Clear(LCD_COLOR_BLACK);
    lcd.SetBackColor(LCD_COLOR_BLACK);
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"Grid EYE Sensor / I2C", CENTER_MODE);
    wait(1);
    
    while(1)
    {
        getMatriceTempAMG8833(matriceGridEye);
        DrawMatrice(&lcd);
        wait(1);
    }
}
Image thermique à l’aide d’un capteur GridEye