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

Committer:
FlorianZa
Date:
Thu Jun 21 10:22:06 2018 +0000
Revision:
1:8ce21f87a36e
Parent:
0:ef7767cb4b09
Version_Final_RGB

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FlorianZa 0:ef7767cb4b09 1 #include "mbed.h"
FlorianZa 0:ef7767cb4b09 2 #include "LCD_DISCO_F746NG.h"
FlorianZa 0:ef7767cb4b09 3 #include "TS_DISCO_F746NG.h"
FlorianZa 1:8ce21f87a36e 4 #include "math.h"
FlorianZa 0:ef7767cb4b09 5
FlorianZa 0:ef7767cb4b09 6 I2C i2c(I2C_SDA,I2C_SCL);
FlorianZa 0:ef7767cb4b09 7 LCD_DISCO_F746NG lcd;
FlorianZa 0:ef7767cb4b09 8 TS_DISCO_F746NG ts;
FlorianZa 0:ef7767cb4b09 9
FlorianZa 0:ef7767cb4b09 10 int main()
FlorianZa 0:ef7767cb4b09 11 {
FlorianZa 0:ef7767cb4b09 12
FlorianZa 0:ef7767cb4b09 13 TS_StateTypeDef TS_State;
FlorianZa 0:ef7767cb4b09 14 uint16_t x, y;
FlorianZa 0:ef7767cb4b09 15 char address ;
FlorianZa 0:ef7767cb4b09 16 uint8_t status;
FlorianZa 0:ef7767cb4b09 17
FlorianZa 0:ef7767cb4b09 18 char text[50];
FlorianZa 0:ef7767cb4b09 19 uint8_t idx;
FlorianZa 0:ef7767cb4b09 20 uint8_t cleared = 0;
FlorianZa 0:ef7767cb4b09 21 uint8_t prev_nb_touches = 0;
FlorianZa 1:8ce21f87a36e 22
FlorianZa 0:ef7767cb4b09 23 uint32_t couleur;
FlorianZa 0:ef7767cb4b09 24
FlorianZa 0:ef7767cb4b09 25 char control[3];
FlorianZa 0:ef7767cb4b09 26 char dataProx[2];
FlorianZa 0:ef7767cb4b09 27
FlorianZa 0:ef7767cb4b09 28 char dataR1[1];
FlorianZa 0:ef7767cb4b09 29 char dataR2[1];
FlorianZa 0:ef7767cb4b09 30
FlorianZa 0:ef7767cb4b09 31 char dataG1[1];
FlorianZa 0:ef7767cb4b09 32 char dataG2[1];
FlorianZa 0:ef7767cb4b09 33
FlorianZa 0:ef7767cb4b09 34 char dataB1[1];
FlorianZa 0:ef7767cb4b09 35 char dataB2[1];
FlorianZa 1:8ce21f87a36e 36
FlorianZa 0:ef7767cb4b09 37 int rayon;
FlorianZa 1:8ce21f87a36e 38
FlorianZa 1:8ce21f87a36e 39 int r,g,b,f;
FlorianZa 0:ef7767cb4b09 40
FlorianZa 0:ef7767cb4b09 41 address=0x72; //adresse du capteur sur 7 bits (0x39 sur 8 bits)
FlorianZa 0:ef7767cb4b09 42
FlorianZa 0:ef7767cb4b09 43 dataProx[0]=0x00;
FlorianZa 0:ef7767cb4b09 44
FlorianZa 0:ef7767cb4b09 45 status = ts.Init(lcd.GetXSize()+10, lcd.GetYSize()+10);
FlorianZa 0:ef7767cb4b09 46 lcd.Clear(0xFFFFFFF0);
FlorianZa 0:ef7767cb4b09 47 lcd.SetFont(&Font12);
FlorianZa 1:8ce21f87a36e 48 lcd.SetBackColor(0xFFFFFFFE);
FlorianZa 1:8ce21f87a36e 49 lcd.SetTextColor(LCD_COLOR_BLACK);
FlorianZa 0:ef7767cb4b09 50
FlorianZa 0:ef7767cb4b09 51 control[0]=0x80; //registre activation power / proximité / RGB
FlorianZa 0:ef7767cb4b09 52 control[1]=0x07; //commande d'activation proximité et RGB
FlorianZa 0:ef7767cb4b09 53 i2c.write(address, control, 2);
FlorianZa 0:ef7767cb4b09 54
FlorianZa 0:ef7767cb4b09 55 control[0]=0x8F; //registre led
FlorianZa 0:ef7767cb4b09 56 control[1]=0x07; //commande du gain
FlorianZa 0:ef7767cb4b09 57 i2c.write(address, control, 2);
FlorianZa 0:ef7767cb4b09 58
FlorianZa 1:8ce21f87a36e 59 while(1) {
FlorianZa 1:8ce21f87a36e 60
FlorianZa 1:8ce21f87a36e 61 control[0]=0x9C; //registre donnée proximité
FlorianZa 1:8ce21f87a36e 62 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 63 i2c.read(address,dataProx,1);
FlorianZa 1:8ce21f87a36e 64
FlorianZa 1:8ce21f87a36e 65 control[0]= 0x96; //registre donnée rouge partie 1
FlorianZa 1:8ce21f87a36e 66 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 67 i2c.read(address,dataR1,1);
FlorianZa 0:ef7767cb4b09 68
FlorianZa 1:8ce21f87a36e 69 control[0]= 0x97; //registre donnée rouge partie 2
FlorianZa 1:8ce21f87a36e 70 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 71 i2c.read(address,dataR2,1);
FlorianZa 0:ef7767cb4b09 72
FlorianZa 1:8ce21f87a36e 73 control[0]= 0x98; //registre donnée vert partie 1
FlorianZa 1:8ce21f87a36e 74 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 75 i2c.read(address,dataG1,1);
FlorianZa 1:8ce21f87a36e 76
FlorianZa 1:8ce21f87a36e 77 control[0]= 0x99; //registre donnée vert partie 2
FlorianZa 1:8ce21f87a36e 78 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 79 i2c.read(address,dataG2,1);
FlorianZa 0:ef7767cb4b09 80
FlorianZa 1:8ce21f87a36e 81 control[0]= 0x9A; //registre donnée bleu partie 1
FlorianZa 1:8ce21f87a36e 82 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 83 i2c.read(address,dataB1,1);
FlorianZa 0:ef7767cb4b09 84
FlorianZa 1:8ce21f87a36e 85 control[0]= 0x9B; //registre donnée bleu partie 2
FlorianZa 1:8ce21f87a36e 86 i2c.write(address, control, 1,true);
FlorianZa 1:8ce21f87a36e 87 i2c.read(address,dataB2,1);
FlorianZa 0:ef7767cb4b09 88
FlorianZa 1:8ce21f87a36e 89 r=/*dataR2[0] << 4 |*/ dataR1[0]*1.6; //composition de la valeur rouge
FlorianZa 1:8ce21f87a36e 90 g=/*dataG2[0] << 4 |*/ dataG1[0]*1.6; //composition de la valeur vert
FlorianZa 1:8ce21f87a36e 91 b=/*dataB2[0] << 4 |*/ dataB1[0]*1.6; //composition de la valeur bleu
FlorianZa 1:8ce21f87a36e 92 if (r>255) r=255;
FlorianZa 1:8ce21f87a36e 93 if (g>255) g=255;
FlorianZa 1:8ce21f87a36e 94 if (b>255) b=255;
FlorianZa 1:8ce21f87a36e 95 f=0xFF;
FlorianZa 0:ef7767cb4b09 96
FlorianZa 1:8ce21f87a36e 97 couleur = f << 24 | r << 16 | g << 8 | b; //combinaison des valeurs des couleur au format uint32_t rgb
FlorianZa 0:ef7767cb4b09 98
FlorianZa 1:8ce21f87a36e 99 lcd.SetTextColor(couleur);
FlorianZa 1:8ce21f87a36e 100 sprintf((char*)text, "couleur %0X P : %0X",couleur,dataProx[0]); // stockage du texte contenant toute les données
FlorianZa 1:8ce21f87a36e 101 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); //écriture de la valeur rgb de la couleur détectée
FlorianZa 0:ef7767cb4b09 102
FlorianZa 0:ef7767cb4b09 103 ts.GetState(&TS_State);
FlorianZa 0:ef7767cb4b09 104 if (TS_State.touchDetected) {
FlorianZa 0:ef7767cb4b09 105 // Clear lines corresponding to old touches coordinates
FlorianZa 0:ef7767cb4b09 106 if (TS_State.touchDetected < prev_nb_touches) {
FlorianZa 1:8ce21f87a36e 107 for (idx = (TS_State.touchDetected + 1); idx <= 2; idx++) {
FlorianZa 1:8ce21f87a36e 108 lcd.ClearStringLine(idx);
FlorianZa 0:ef7767cb4b09 109 }
FlorianZa 0:ef7767cb4b09 110 }
FlorianZa 0:ef7767cb4b09 111 prev_nb_touches = TS_State.touchDetected;
FlorianZa 0:ef7767cb4b09 112 cleared = 0;
FlorianZa 0:ef7767cb4b09 113
FlorianZa 0:ef7767cb4b09 114 for (idx = 0; idx < TS_State.touchDetected; idx++) {
FlorianZa 0:ef7767cb4b09 115 x = TS_State.touchX[idx]; //récupération de la position x de l'appui
FlorianZa 0:ef7767cb4b09 116 y = TS_State.touchY[idx]; //récupération de la position y de l'appui
FlorianZa 0:ef7767cb4b09 117 }
FlorianZa 1:8ce21f87a36e 118
FlorianZa 1:8ce21f87a36e 119
FlorianZa 1:8ce21f87a36e 120 rayon = ceil((float)dataProx[0]/255.0 * 15.0 +1.0);
FlorianZa 1:8ce21f87a36e 121 if((TS_State.touchY[0]-rayon>1)&&(TS_State.touchX[0]-rayon>1)) {
FlorianZa 1:8ce21f87a36e 122 lcd.FillCircle(TS_State.touchX[0], TS_State.touchY[0], rayon);
FlorianZa 1:8ce21f87a36e 123 }
FlorianZa 0:ef7767cb4b09 124 } else {
FlorianZa 0:ef7767cb4b09 125 if (!cleared) {
FlorianZa 1:8ce21f87a36e 126 //lcd.Clear(0xFFFFFFF0);
FlorianZa 0:ef7767cb4b09 127 cleared = 1;
FlorianZa 0:ef7767cb4b09 128 }
FlorianZa 0:ef7767cb4b09 129 }
FlorianZa 0:ef7767cb4b09 130 }
FlorianZa 0:ef7767cb4b09 131
FlorianZa 0:ef7767cb4b09 132
FlorianZa 0:ef7767cb4b09 133 }
FlorianZa 0:ef7767cb4b09 134
FlorianZa 0:ef7767cb4b09 135