
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:
- 1:8ce21f87a36e
- Parent:
- 0:ef7767cb4b09
diff -r ef7767cb4b09 -r 8ce21f87a36e main.cpp --- a/main.cpp Thu Jun 21 09:42:03 2018 +0000 +++ b/main.cpp Thu Jun 21 10:22:06 2018 +0000 @@ -1,7 +1,7 @@ #include "mbed.h" #include "LCD_DISCO_F746NG.h" #include "TS_DISCO_F746NG.h" - +#include "math.h" I2C i2c(I2C_SDA,I2C_SCL); LCD_DISCO_F746NG lcd; @@ -19,7 +19,7 @@ uint8_t idx; uint8_t cleared = 0; uint8_t prev_nb_touches = 0; - + uint32_t couleur; char control[3]; @@ -33,10 +33,10 @@ char dataB1[1]; char dataB2[1]; - + int rayon; - - uint8_t r,g,b,f; + + int r,g,b,f; address=0x72; //adresse du capteur sur 7 bits (0x39 sur 8 bits) @@ -45,8 +45,8 @@ status = ts.Init(lcd.GetXSize()+10, lcd.GetYSize()+10); lcd.Clear(0xFFFFFFF0); lcd.SetFont(&Font12); - lcd.SetBackColor(0xFFFFFFFE); - lcd.SetTextColor(LCD_COLOR_WHITE); + lcd.SetBackColor(0xFFFFFFFE); + lcd.SetTextColor(LCD_COLOR_BLACK); control[0]=0x80; //registre activation power / proximité / RGB control[1]=0x07; //commande d'activation proximité et RGB @@ -56,46 +56,56 @@ 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); - while(1) { - - control[0]=0x9C; //registre donnée proximité - i2c.write(address, control, 1,true); - i2c.read(address,dataProx,1); + control[0]= 0x97; //registre donnée rouge partie 2 + i2c.write(address, control, 1,true); + i2c.read(address,dataR2,1); - control[0]= 0x96; //registre donnée rouge partie 1 - i2c.write(address, control, 1,true); - i2c.read(address,dataR1,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]= 0x97; //registre donnée rouge partie 2 - i2c.write(address, control, 1,true); - i2c.read(address,dataR2,1); + control[0]= 0x9A; //registre donnée bleu partie 1 + i2c.write(address, control, 1,true); + i2c.read(address,dataB1,1); - control[0]= 0x98; //registre donnée vert partie 1 - i2c.write(address, control, 1,true); - i2c.read(address,dataG1,1); + control[0]= 0x9B; //registre donnée bleu partie 2 + i2c.write(address, control, 1,true); + i2c.read(address,dataB2,1); - control[0]= 0x99; //registre donnée vert partie 2 - i2c.write(address, control, 1,true); - i2c.read(address,dataG2,1); + r=/*dataR2[0] << 4 |*/ dataR1[0]*1.6; //composition de la valeur rouge + g=/*dataG2[0] << 4 |*/ dataG1[0]*1.6; //composition de la valeur vert + b=/*dataB2[0] << 4 |*/ dataB1[0]*1.6; //composition de la valeur bleu + if (r>255) r=255; + if (g>255) g=255; + if (b>255) b=255; + f=0xFF; - control[0]= 0x9A; //registre donnée bleu partie 1 - i2c.write(address, control, 1,true); - i2c.read(address,dataB1,1); + couleur = f << 24 | r << 16 | g << 8 | b; //combinaison des valeurs des couleur au format uint32_t rgb - control[0]= 0x9B; //registre donnée bleu partie 2 - i2c.write(address, control, 1,true); - i2c.read(address,dataB2,1); + lcd.SetTextColor(couleur); + 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 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); + for (idx = (TS_State.touchDetected + 1); idx <= 2; idx++) { + lcd.ClearStringLine(idx); } } prev_nb_touches = TS_State.touchDetected; @@ -105,24 +115,15 @@ 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); - + + + rayon = ceil((float)dataProx[0]/255.0 * 15.0 +1.0); + if((TS_State.touchY[0]-rayon>1)&&(TS_State.touchX[0]-rayon>1)) { + lcd.FillCircle(TS_State.touchX[0], TS_State.touchY[0], rayon); + } } else { if (!cleared) { - //lcd.Clear(0xFFFFFFF0); + //lcd.Clear(0xFFFFFFF0); cleared = 1; } }