SRF08 sur STM32f746NG en I2C avec configuration des registres. Affichage des boutons de réglage et des valeurs de luminosité et de distance

Dependencies:   BSP_DISCO_F746NG LCD_DISCO_F746NG SRF08 TS_DISCO_F746NG mbed

Committer:
dommbed
Date:
Tue Jun 14 15:38:53 2016 +0000
Revision:
1:726e6fd13180
Parent:
0:6f45024d79bc
Version pr?sent? lors de l'?valuation en LP SESAM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dommbed 0:6f45024d79bc 1 #include "mbed.h"
dommbed 0:6f45024d79bc 2 #include "TS_DISCO_F746NG.h"
dommbed 0:6f45024d79bc 3 #include "LCD_DISCO_F746NG.h"
dommbed 0:6f45024d79bc 4 #include "SRF08.h"
dommbed 1:726e6fd13180 5 #include "fond.h"
dommbed 1:726e6fd13180 6
dommbed 0:6f45024d79bc 7 LCD_DISCO_F746NG lcd;
dommbed 0:6f45024d79bc 8 TS_DISCO_F746NG ts;
dommbed 0:6f45024d79bc 9
dommbed 0:6f45024d79bc 10 int main()
dommbed 0:6f45024d79bc 11 {
dommbed 1:726e6fd13180 12 uint32_t pixel=0x00;
dommbed 1:726e6fd13180 13 char *tmp;
dommbed 1:726e6fd13180 14 int rangeregisterflag=10;
dommbed 1:726e6fd13180 15 int rangeregistertexte=0;
dommbed 1:726e6fd13180 16 int gainregisterflag=10;
dommbed 1:726e6fd13180 17 int gainregistertexte=0;
dommbed 1:726e6fd13180 18 int gainreg;
dommbed 0:6f45024d79bc 19 TS_StateTypeDef TS_State;
dommbed 0:6f45024d79bc 20 uint16_t x, y;
dommbed 0:6f45024d79bc 21 uint8_t text[30];
dommbed 0:6f45024d79bc 22 uint8_t status;
dommbed 0:6f45024d79bc 23 uint8_t idx;
dommbed 1:726e6fd13180 24 int valeur1=0;
dommbed 1:726e6fd13180 25 int valeur2=0;
dommbed 1:726e6fd13180 26 int valeur3=0;
dommbed 1:726e6fd13180 27 int value=0;
dommbed 1:726e6fd13180 28 int gainoffsetx;
dommbed 1:726e6fd13180 29 int gainoffsety;
dommbed 1:726e6fd13180 30 int count=0;
dommbed 1:726e6fd13180 31 int offsetx=0;
dommbed 1:726e6fd13180 32 int offsety=0;
dommbed 1:726e6fd13180 33 // uint8_t *fondecran=;
dommbed 0:6f45024d79bc 34
dommbed 0:6f45024d79bc 35
dommbed 0:6f45024d79bc 36 status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
dommbed 0:6f45024d79bc 37 if (status != TS_OK) {
dommbed 1:726e6fd13180 38 lcd.SetTextColor(LCD_COLOR_WHITE);
dommbed 1:726e6fd13180 39 lcd.SetTextColor(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 40 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
dommbed 0:6f45024d79bc 41 } else {
dommbed 1:726e6fd13180 42 //lcd.Clear(LCD_COLOR_GREEN);
dommbed 1:726e6fd13180 43 //lcd.SetTextColor(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 44 //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
dommbed 0:6f45024d79bc 45 }
dommbed 0:6f45024d79bc 46 wait(1);
dommbed 1:726e6fd13180 47 lcd.SetFont(&Font12);
dommbed 1:726e6fd13180 48 lcd.Clear(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 49 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 50 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
dommbed 1:726e6fd13180 51 int addr=0xe4;
dommbed 1:726e6fd13180 52 int distance;
dommbed 1:726e6fd13180 53 int Luminosite;
dommbed 0:6f45024d79bc 54
dommbed 1:726e6fd13180 55 gainoffsetx=lcd.GetXSize()-100;
dommbed 1:726e6fd13180 56 gainoffsety=0;
dommbed 1:726e6fd13180 57 for (int j=0;j<100;j++)
dommbed 1:726e6fd13180 58 {
dommbed 1:726e6fd13180 59 for (int i=0;i<100;i++)
dommbed 1:726e6fd13180 60 {
dommbed 1:726e6fd13180 61 pixel=255<<24;
dommbed 1:726e6fd13180 62 pixel+=range[count]<<18;
dommbed 1:726e6fd13180 63 pixel+=range[count+1]<<10;
dommbed 1:726e6fd13180 64 pixel+=range[count+2]<<2;
dommbed 1:726e6fd13180 65 lcd.DrawPixel(offsetx+i,offsety+j,pixel);
dommbed 1:726e6fd13180 66 count+=3;
dommbed 1:726e6fd13180 67 }
dommbed 1:726e6fd13180 68 }
dommbed 1:726e6fd13180 69 count=0;
dommbed 1:726e6fd13180 70 for (int j=0;j<100;j++)
dommbed 1:726e6fd13180 71 {
dommbed 1:726e6fd13180 72 for (int i=0;i<100;i++)
dommbed 1:726e6fd13180 73 {
dommbed 1:726e6fd13180 74 pixel=255<<24;
dommbed 1:726e6fd13180 75 pixel+=gain[count]<<18;
dommbed 1:726e6fd13180 76 pixel+=gain[count+1]<<10;
dommbed 1:726e6fd13180 77 pixel+=gain[count+2]<<2;
dommbed 1:726e6fd13180 78 lcd.DrawPixel(gainoffsetx+i,gainoffsety+j,pixel);
dommbed 1:726e6fd13180 79 count+=3;
dommbed 1:726e6fd13180 80 }
dommbed 1:726e6fd13180 81 }
dommbed 1:726e6fd13180 82
dommbed 1:726e6fd13180 83 while(1)
dommbed 1:726e6fd13180 84 {
dommbed 1:726e6fd13180 85 //srf08.setRangeRegister(2);
dommbed 1:726e6fd13180 86 SRF08 srf08(D14, D15, addr);
dommbed 1:726e6fd13180 87
dommbed 1:726e6fd13180 88 srf08.startRanging();
dommbed 1:726e6fd13180 89 while (srf08.rangingFinished()==false)
dommbed 1:726e6fd13180 90 {
dommbed 1:726e6fd13180 91 wait_ms(1);
dommbed 1:726e6fd13180 92 }
dommbed 1:726e6fd13180 93 //wait_ms(500);
dommbed 1:726e6fd13180 94
dommbed 1:726e6fd13180 95 valeur1=srf08.getRange();
dommbed 1:726e6fd13180 96 Luminosite=srf08.getLightIntensity();
dommbed 1:726e6fd13180 97 Luminosite=Luminosite*100/255;
dommbed 1:726e6fd13180 98 sprintf((char*)tmp, "Distance: %d cm |Luminosite :%d%%",distance,Luminosite);
dommbed 1:726e6fd13180 99 valeur3=valeur2;
dommbed 1:726e6fd13180 100 valeur2=valeur1;
dommbed 1:726e6fd13180 101 distance= (valeur1+valeur2+valeur3)/3;
dommbed 1:726e6fd13180 102
dommbed 1:726e6fd13180 103
dommbed 1:726e6fd13180 104
dommbed 1:726e6fd13180 105 //wait(1);
dommbed 1:726e6fd13180 106 if (distance!=65535)
dommbed 1:726e6fd13180 107 {
dommbed 0:6f45024d79bc 108 ts.GetState(&TS_State);
dommbed 0:6f45024d79bc 109 if (TS_State.touchDetected) {
dommbed 0:6f45024d79bc 110 // Clear lines corresponding to old touches coordinates
dommbed 1:726e6fd13180 111
dommbed 1:726e6fd13180 112
dommbed 1:726e6fd13180 113 x = TS_State.touchX[0];
dommbed 1:726e6fd13180 114 y = TS_State.touchY[0];
dommbed 1:726e6fd13180 115
dommbed 1:726e6fd13180 116 // sprintf((char*)text, "x %d y %d",x,y);
dommbed 1:726e6fd13180 117 // lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
dommbed 1:726e6fd13180 118 /// ----- recuperation et mise a la valeur du registre range
dommbed 1:726e6fd13180 119 if ( x <100 && x>0 && y <100&& y>0){
dommbed 1:726e6fd13180 120 //The range is ((rangeVal x 43mm) + 43mm)
dommbed 1:726e6fd13180 121 /* Setting the Range Register to 1 (0x01) gives a maximum range of 86mm. More usefully,
dommbed 1:726e6fd13180 122 24 (0x18) gives a range of 1 metre and 140 (0x8C) is 6 metres.
dommbed 1:726e6fd13180 123 Setting 255 (0xFF) gives the original 11 metres */
dommbed 1:726e6fd13180 124 if (rangeregisterflag==10)rangeregisterflag=0;
dommbed 1:726e6fd13180 125 switch (rangeregisterflag){
dommbed 1:726e6fd13180 126 case 0:
dommbed 1:726e6fd13180 127 srf08.setRangeRegister(0x18);
dommbed 1:726e6fd13180 128 rangeregistertexte=1;
dommbed 1:726e6fd13180 129 rangeregisterflag=1;
dommbed 1:726e6fd13180 130 break;
dommbed 1:726e6fd13180 131 case 1:
dommbed 1:726e6fd13180 132 srf08.setRangeRegister(0x8C);
dommbed 1:726e6fd13180 133 rangeregistertexte=6;
dommbed 1:726e6fd13180 134 rangeregisterflag=2;
dommbed 1:726e6fd13180 135 break;
dommbed 1:726e6fd13180 136 case 2:
dommbed 1:726e6fd13180 137
dommbed 1:726e6fd13180 138 srf08.setRangeRegister(0xFF);
dommbed 1:726e6fd13180 139 rangeregistertexte=11;
dommbed 1:726e6fd13180 140 rangeregisterflag=0;
dommbed 1:726e6fd13180 141 break;
dommbed 1:726e6fd13180 142
dommbed 0:6f45024d79bc 143 }
dommbed 1:726e6fd13180 144
dommbed 0:6f45024d79bc 145
dommbed 1:726e6fd13180 146 }
dommbed 1:726e6fd13180 147 /// ----- recuperation et mise a la valeur du registre analogue gain
dommbed 1:726e6fd13180 148 if ( x >lcd.GetXSize()-100 && x<lcd.GetXSize() && y <100&& y>0){
dommbed 1:726e6fd13180 149 if (gainregisterflag==10)gainregisterflag=0;
dommbed 1:726e6fd13180 150
dommbed 1:726e6fd13180 151 switch (gainregisterflag){
dommbed 1:726e6fd13180 152 case 0:
dommbed 1:726e6fd13180 153 gainreg=0x00;
dommbed 1:726e6fd13180 154 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 155 gainregistertexte=94;
dommbed 1:726e6fd13180 156 gainregisterflag=1;
dommbed 1:726e6fd13180 157 break;
dommbed 1:726e6fd13180 158 case 1:
dommbed 1:726e6fd13180 159 gainreg=0x06;
dommbed 1:726e6fd13180 160 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 161 gainregistertexte=114;
dommbed 1:726e6fd13180 162 gainregisterflag=2;
dommbed 1:726e6fd13180 163 break;
dommbed 1:726e6fd13180 164 case 2:
dommbed 1:726e6fd13180 165 gainreg=0x12;
dommbed 1:726e6fd13180 166 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 167 gainregistertexte=145;
dommbed 1:726e6fd13180 168 gainregisterflag=3;
dommbed 1:726e6fd13180 169 break;
dommbed 1:726e6fd13180 170 case 3:
dommbed 1:726e6fd13180 171 gainreg=0x18;
dommbed 1:726e6fd13180 172 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 173 gainregistertexte=199;
dommbed 1:726e6fd13180 174 gainregisterflag=4;
dommbed 1:726e6fd13180 175 break;
dommbed 1:726e6fd13180 176 case 4:
dommbed 1:726e6fd13180 177 gainreg=0x24;
dommbed 1:726e6fd13180 178 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 179 gainregistertexte=317;
dommbed 1:726e6fd13180 180 gainregisterflag=5;
dommbed 1:726e6fd13180 181 break;
dommbed 1:726e6fd13180 182 case 5:
dommbed 1:726e6fd13180 183 gainreg=0x30;
dommbed 1:726e6fd13180 184 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 185 gainregistertexte=777;
dommbed 1:726e6fd13180 186 gainregisterflag=6;
dommbed 1:726e6fd13180 187 break;
dommbed 1:726e6fd13180 188 case 6:
dommbed 1:726e6fd13180 189 gainreg=0x31;
dommbed 1:726e6fd13180 190 srf08.setMaxGainRegister(gainreg);
dommbed 1:726e6fd13180 191 gainregistertexte=1025;
dommbed 1:726e6fd13180 192 gainregisterflag=0;
dommbed 1:726e6fd13180 193 break;
dommbed 1:726e6fd13180 194
dommbed 1:726e6fd13180 195
dommbed 1:726e6fd13180 196 }
dommbed 1:726e6fd13180 197 }
dommbed 1:726e6fd13180 198 wait_ms(100);
dommbed 1:726e6fd13180 199 // loop d'affichage par default
dommbed 1:726e6fd13180 200 } else {
dommbed 1:726e6fd13180 201
dommbed 1:726e6fd13180 202
dommbed 1:726e6fd13180 203 // lcd.Clear(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 204 //srf08.setMaxGainRegister(0xFF);
dommbed 1:726e6fd13180 205 lcd.ClearStringLine(9);
dommbed 1:726e6fd13180 206 lcd.ClearStringLine(10);
dommbed 1:726e6fd13180 207 lcd.ClearStringLine(15);
dommbed 1:726e6fd13180 208 if (rangeregisterflag==10){
dommbed 1:726e6fd13180 209 sprintf((char*)text, "Presser le coin haut gauche pour changer le Range");
dommbed 1:726e6fd13180 210 lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
dommbed 1:726e6fd13180 211 }else {
dommbed 1:726e6fd13180 212 sprintf((char*)text, "Range de %d metre",rangeregistertexte);
dommbed 1:726e6fd13180 213 lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
dommbed 1:726e6fd13180 214 }
dommbed 1:726e6fd13180 215 if (gainregisterflag==10){
dommbed 1:726e6fd13180 216 sprintf((char*)text, "Presser le coin haut droit pour changer le Gain");
dommbed 1:726e6fd13180 217 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE);
dommbed 1:726e6fd13180 218 }else {
dommbed 1:726e6fd13180 219 sprintf((char*)text, "Gain de %d metre",gainregistertexte);
dommbed 1:726e6fd13180 220 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE);
dommbed 1:726e6fd13180 221 }
dommbed 1:726e6fd13180 222 lcd.DisplayStringAt(0, LINE(15), (uint8_t *)tmp, CENTER_MODE);
dommbed 1:726e6fd13180 223
dommbed 1:726e6fd13180 224
dommbed 1:726e6fd13180 225 }
dommbed 0:6f45024d79bc 226
dommbed 1:726e6fd13180 227 }
dommbed 1:726e6fd13180 228 else {
dommbed 1:726e6fd13180 229 lcd.Clear(LCD_COLOR_BLACK);
dommbed 1:726e6fd13180 230 lcd.DisplayStringAt(0, LINE(9), (uint8_t *)"Erreur d'initialisation du module SRF08", CENTER_MODE);
dommbed 0:6f45024d79bc 231 }
dommbed 0:6f45024d79bc 232 }
dommbed 1:726e6fd13180 233
dommbed 1:726e6fd13180 234 //wait_ms(10);
dommbed 1:726e6fd13180 235
dommbed 0:6f45024d79bc 236 }