
Dessin avec couleur du capteur rgb et taille de pinceau dépendant de la proximité
Dependencies: BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG mbed
Diff: main.cpp
- Revision:
- 0:ef7767cb4b09
- Child:
- 1:8ce21f87a36e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jun 21 09:42:03 2018 +0000 @@ -0,0 +1,134 @@ +#include "mbed.h" +#include "LCD_DISCO_F746NG.h" +#include "TS_DISCO_F746NG.h" + + +I2C i2c(I2C_SDA,I2C_SCL); +LCD_DISCO_F746NG lcd; +TS_DISCO_F746NG ts; + +int main() +{ + + TS_StateTypeDef TS_State; + uint16_t x, y; + char address ; + uint8_t status; + + char text[50]; + uint8_t idx; + uint8_t cleared = 0; + uint8_t prev_nb_touches = 0; + + uint32_t couleur; + + char control[3]; + char dataProx[2]; + + char dataR1[1]; + char dataR2[1]; + + char dataG1[1]; + char dataG2[1]; + + char dataB1[1]; + char dataB2[1]; + + int rayon; + + uint8_t r,g,b,f; + + address=0x72; //adresse du capteur sur 7 bits (0x39 sur 8 bits) + + dataProx[0]=0x00; + + status = ts.Init(lcd.GetXSize()+10, lcd.GetYSize()+10); + lcd.Clear(0xFFFFFFF0); + lcd.SetFont(&Font12); + lcd.SetBackColor(0xFFFFFFFE); + lcd.SetTextColor(LCD_COLOR_WHITE); + + control[0]=0x80; //registre activation power / proximité / RGB + control[1]=0x07; //commande d'activation proximité et RGB + i2c.write(address, control, 2); + + control[0]=0x8F; //registre led + control[1]=0x07; //commande du gain + i2c.write(address, control, 2); + + control[0]=0x90; + control[1]=0x30; + i2c.write(address, control, 2); + + while(1) { + + control[0]=0x9C; //registre donnée proximité + i2c.write(address, control, 1,true); + i2c.read(address,dataProx,1); + + control[0]= 0x96; //registre donnée rouge partie 1 + i2c.write(address, control, 1,true); + i2c.read(address,dataR1,1); + + control[0]= 0x97; //registre donnée rouge partie 2 + i2c.write(address, control, 1,true); + i2c.read(address,dataR2,1); + + control[0]= 0x98; //registre donnée vert partie 1 + i2c.write(address, control, 1,true); + i2c.read(address,dataG1,1); + + control[0]= 0x99; //registre donnée vert partie 2 + i2c.write(address, control, 1,true); + i2c.read(address,dataG2,1); + + control[0]= 0x9A; //registre donnée bleu partie 1 + i2c.write(address, control, 1,true); + i2c.read(address,dataB1,1); + + control[0]= 0x9B; //registre donnée bleu partie 2 + i2c.write(address, control, 1,true); + i2c.read(address,dataB2,1); + + ts.GetState(&TS_State); + if (TS_State.touchDetected) { + // Clear lines corresponding to old touches coordinates + if (TS_State.touchDetected < prev_nb_touches) { + for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) { + lcd.ClearStringLine(idx); + } + } + prev_nb_touches = TS_State.touchDetected; + cleared = 0; + + for (idx = 0; idx < TS_State.touchDetected; idx++) { + x = TS_State.touchX[idx]; //récupération de la position x de l'appui + y = TS_State.touchY[idx]; //récupération de la position y de l'appui + } + + r=dataR2[0] << 4 | dataR1[0]; //composition de la valeur rouge + g=dataG2[0] << 4 | dataG1[0]; //composition de la valeur vert + b=dataB2[0] << 4 | dataB1[0]; //composition de la valeur bleu + f=0xFF; + + couleur = f << 24 | r << 16 | g << 8 | b; //combinaison des valeurs des couleur au format uint32_t rgb + + sprintf((char*)text, "couleur %0X P : %0X",couleur,dataProx[0]); // stockage du texte contenant toute les données + lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); //écriture de la valeur rgb de la couleur détectée + + lcd.SetTextColor(couleur); + rayon = 15; + lcd.FillCircle(TS_State.touchX[0], TS_State.touchY[0], rayon); + + } else { + if (!cleared) { + //lcd.Clear(0xFFFFFFF0); + cleared = 1; + } + } + } + + +} + +