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
main.cpp@1:726e6fd13180, 2016-06-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |