Basic example showing how to drive the LCD.

Dependencies:   BSP_DISCO_F746NG

main.cpp

Committer:
villemejane
Date:
2020-01-14
Revision:
5:9663124717ae
Parent:
0:b045ca817e2c

File content as of revision 5:9663124717ae:

#include "mbed.h"
#include "LCD_DISCO_F746NG.h"
#include "IOGS_LEnsE_GUI.hpp"

LCD_DISCO_F746NG lcd;

Serial pc(USBTX, USBRX);

/* 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);
}
char getStatusAMG8833(void){
    char data[1] = {AMG8833_STAT};          
    gridEye.write(AMG8833_ADR  << 1, data, 1);
    gridEye.read(AMG8833_ADR  << 1, data, 1);
    return data[1];
}
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);
        }
    }    
}

static const uint32_t image_data_test[] = {
    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0x000000FF, 0x0000FF00,
    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0x000000FF, 0x0000FF00,
    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0x000000FF, 0x0000FF00,
    0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FF00, 0x000000FF, 0x0000FF00};
const tImage my_img_test = { image_data_test, 6, 4, 32 };

/* MAIN FUNCTION */
int main()
{
    gridEye.frequency(400000);
    pc.baud(115200);
    /* Initialisation Grid Eye */
    initAMG8833();
    wait_ms(10);
    pc.printf("STAT = %d \r\n", getStatusAMG8833());
    wait_ms(10);
    pc.printf("STAT = %d \r\n", getThermAMG8833());
    wait_ms(100);  
    getMatriceTempAMG8833(matriceGridEye);
    DrawMatrice(&lcd);
    
    /* 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);
    
    lcd.Clear(LCD_COLOR_WHITE);
    lcd.SetBackColor(LCD_COLOR_WHITE);
   // DrawImage(my_logo, &lcd);
    wait(1);
    
    while(1)
    {
        getMatriceTempAMG8833(matriceGridEye);
        DrawMatrice(&lcd);
        for(int i = 1; i < 65; i++){
            pc.printf("%d : %d //", i, matriceGridEye[i-1]);
            if(i%8 == 0)    pc.printf("\r\n");
        }
        pc.printf("\r\n");
        wait(2);
    }
}