
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
main.cpp@1:8ce21f87a36e, 2018-06-21 (annotated)
- 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?
User | Revision | Line number | New 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 |