Basic example showing how to drive the LCD.
Dependencies: BSP_DISCO_F746NG
Diff: main.cpp
- Revision:
- 5:9663124717ae
- Parent:
- 0:b045ca817e2c
--- a/main.cpp Thu Jun 08 13:47:01 2017 +0000 +++ b/main.cpp Tue Jan 14 09:07:37 2020 +0000 @@ -1,46 +1,110 @@ #include "mbed.h" #include "LCD_DISCO_F746NG.h" +#include "IOGS_LEnsE_GUI.hpp" LCD_DISCO_F746NG lcd; -DigitalOut led1(LED1); +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() -{ - led1 = 1; +{ + 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 *)"MBED EXAMPLE", CENTER_MODE); + 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) { - lcd.Clear(LCD_COLOR_BLUE); - lcd.SetBackColor(LCD_COLOR_BLUE); - lcd.SetTextColor(LCD_COLOR_WHITE); - wait(0.3); - lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"DISCOVERY STM32F746NG", CENTER_MODE); - wait(1); - - lcd.Clear(LCD_COLOR_GREEN); - - lcd.SetTextColor(LCD_COLOR_BLUE); - lcd.DrawRect(10, 20, 50, 50); - wait(0.1); - lcd.SetTextColor(LCD_COLOR_BROWN); - lcd.DrawCircle(80, 80, 50); - wait(0.1); - lcd.SetTextColor(LCD_COLOR_YELLOW); - lcd.DrawEllipse(150, 150, 50, 100); - wait(0.1); - lcd.SetTextColor(LCD_COLOR_RED); - lcd.FillCircle(200, 200, 40); - wait(1); - - lcd.SetBackColor(LCD_COLOR_ORANGE); - lcd.SetTextColor(LCD_COLOR_CYAN); - lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"HAVE FUN !!!", CENTER_MODE); - wait(1); - - led1 = !led1; + 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); } }