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 09:42:03 2018 +0000
Revision:
0:ef7767cb4b09
Child:
1:8ce21f87a36e
RGB + dessin

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 0:ef7767cb4b09 4
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 0:ef7767cb4b09 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 0:ef7767cb4b09 36
FlorianZa 0:ef7767cb4b09 37 int rayon;
FlorianZa 0:ef7767cb4b09 38
FlorianZa 0:ef7767cb4b09 39 uint8_t 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 0:ef7767cb4b09 48 lcd.SetBackColor(0xFFFFFFFE);
FlorianZa 0:ef7767cb4b09 49 lcd.SetTextColor(LCD_COLOR_WHITE);
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 0:ef7767cb4b09 59 control[0]=0x90;
FlorianZa 0:ef7767cb4b09 60 control[1]=0x30;
FlorianZa 0:ef7767cb4b09 61 i2c.write(address, control, 2);
FlorianZa 0:ef7767cb4b09 62
FlorianZa 0:ef7767cb4b09 63 while(1) {
FlorianZa 0:ef7767cb4b09 64
FlorianZa 0:ef7767cb4b09 65 control[0]=0x9C; //registre donnée proximité
FlorianZa 0:ef7767cb4b09 66 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 67 i2c.read(address,dataProx,1);
FlorianZa 0:ef7767cb4b09 68
FlorianZa 0:ef7767cb4b09 69 control[0]= 0x96; //registre donnée rouge partie 1
FlorianZa 0:ef7767cb4b09 70 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 71 i2c.read(address,dataR1,1);
FlorianZa 0:ef7767cb4b09 72
FlorianZa 0:ef7767cb4b09 73 control[0]= 0x97; //registre donnée rouge partie 2
FlorianZa 0:ef7767cb4b09 74 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 75 i2c.read(address,dataR2,1);
FlorianZa 0:ef7767cb4b09 76
FlorianZa 0:ef7767cb4b09 77 control[0]= 0x98; //registre donnée vert partie 1
FlorianZa 0:ef7767cb4b09 78 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 79 i2c.read(address,dataG1,1);
FlorianZa 0:ef7767cb4b09 80
FlorianZa 0:ef7767cb4b09 81 control[0]= 0x99; //registre donnée vert partie 2
FlorianZa 0:ef7767cb4b09 82 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 83 i2c.read(address,dataG2,1);
FlorianZa 0:ef7767cb4b09 84
FlorianZa 0:ef7767cb4b09 85 control[0]= 0x9A; //registre donnée bleu partie 1
FlorianZa 0:ef7767cb4b09 86 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 87 i2c.read(address,dataB1,1);
FlorianZa 0:ef7767cb4b09 88
FlorianZa 0:ef7767cb4b09 89 control[0]= 0x9B; //registre donnée bleu partie 2
FlorianZa 0:ef7767cb4b09 90 i2c.write(address, control, 1,true);
FlorianZa 0:ef7767cb4b09 91 i2c.read(address,dataB2,1);
FlorianZa 0:ef7767cb4b09 92
FlorianZa 0:ef7767cb4b09 93 ts.GetState(&TS_State);
FlorianZa 0:ef7767cb4b09 94 if (TS_State.touchDetected) {
FlorianZa 0:ef7767cb4b09 95 // Clear lines corresponding to old touches coordinates
FlorianZa 0:ef7767cb4b09 96 if (TS_State.touchDetected < prev_nb_touches) {
FlorianZa 0:ef7767cb4b09 97 for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
FlorianZa 0:ef7767cb4b09 98 lcd.ClearStringLine(idx);
FlorianZa 0:ef7767cb4b09 99 }
FlorianZa 0:ef7767cb4b09 100 }
FlorianZa 0:ef7767cb4b09 101 prev_nb_touches = TS_State.touchDetected;
FlorianZa 0:ef7767cb4b09 102 cleared = 0;
FlorianZa 0:ef7767cb4b09 103
FlorianZa 0:ef7767cb4b09 104 for (idx = 0; idx < TS_State.touchDetected; idx++) {
FlorianZa 0:ef7767cb4b09 105 x = TS_State.touchX[idx]; //récupération de la position x de l'appui
FlorianZa 0:ef7767cb4b09 106 y = TS_State.touchY[idx]; //récupération de la position y de l'appui
FlorianZa 0:ef7767cb4b09 107 }
FlorianZa 0:ef7767cb4b09 108
FlorianZa 0:ef7767cb4b09 109 r=dataR2[0] << 4 | dataR1[0]; //composition de la valeur rouge
FlorianZa 0:ef7767cb4b09 110 g=dataG2[0] << 4 | dataG1[0]; //composition de la valeur vert
FlorianZa 0:ef7767cb4b09 111 b=dataB2[0] << 4 | dataB1[0]; //composition de la valeur bleu
FlorianZa 0:ef7767cb4b09 112 f=0xFF;
FlorianZa 0:ef7767cb4b09 113
FlorianZa 0:ef7767cb4b09 114 couleur = f << 24 | r << 16 | g << 8 | b; //combinaison des valeurs des couleur au format uint32_t rgb
FlorianZa 0:ef7767cb4b09 115
FlorianZa 0:ef7767cb4b09 116 sprintf((char*)text, "couleur %0X P : %0X",couleur,dataProx[0]); // stockage du texte contenant toute les données
FlorianZa 0:ef7767cb4b09 117 lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE); //écriture de la valeur rgb de la couleur détectée
FlorianZa 0:ef7767cb4b09 118
FlorianZa 0:ef7767cb4b09 119 lcd.SetTextColor(couleur);
FlorianZa 0:ef7767cb4b09 120 rayon = 15;
FlorianZa 0:ef7767cb4b09 121 lcd.FillCircle(TS_State.touchX[0], TS_State.touchY[0], rayon);
FlorianZa 0:ef7767cb4b09 122
FlorianZa 0:ef7767cb4b09 123 } else {
FlorianZa 0:ef7767cb4b09 124 if (!cleared) {
FlorianZa 0:ef7767cb4b09 125 //lcd.Clear(0xFFFFFFF0);
FlorianZa 0:ef7767cb4b09 126 cleared = 1;
FlorianZa 0:ef7767cb4b09 127 }
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