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

Committer:
dommbed
Date:
2016-06-14
Revision:
1:726e6fd13180
Parent:
0:6f45024d79bc

File content as of revision 1:726e6fd13180:

#include "mbed.h"
#include "TS_DISCO_F746NG.h"
#include "LCD_DISCO_F746NG.h"
#include "SRF08.h"
#include "fond.h"

LCD_DISCO_F746NG lcd;
TS_DISCO_F746NG ts;

int main()
{
uint32_t pixel=0x00;
char *tmp; 
int rangeregisterflag=10;
int rangeregistertexte=0;
int gainregisterflag=10;
int gainregistertexte=0;
int gainreg;
    TS_StateTypeDef TS_State;
    uint16_t x, y;
    uint8_t text[30];
    uint8_t status;
    uint8_t idx;
int valeur1=0;
int valeur2=0;
int valeur3=0;
int value=0;
int gainoffsetx;
int gainoffsety;
int count=0;
int offsetx=0;
int offsety=0;
   // uint8_t *fondecran=;


    status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
    if (status != TS_OK) {
       lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.SetTextColor(LCD_COLOR_BLACK);
       lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
    } else {
        //lcd.Clear(LCD_COLOR_GREEN);
        //lcd.SetTextColor(LCD_COLOR_BLACK);
        //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT OK", CENTER_MODE);
    }
    wait(1);
    lcd.SetFont(&Font12);     
    lcd.Clear(LCD_COLOR_BLACK);
     BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
  BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
int addr=0xe4; 
int distance;
int Luminosite;

  gainoffsetx=lcd.GetXSize()-100;
    gainoffsety=0;
for (int j=0;j<100;j++)
                 {
       for (int i=0;i<100;i++)
       { 
           pixel=255<<24;
           pixel+=range[count]<<18;
           pixel+=range[count+1]<<10;
           pixel+=range[count+2]<<2;
           lcd.DrawPixel(offsetx+i,offsety+j,pixel);
           count+=3;
              }
         }
         count=0;
         for (int j=0;j<100;j++)
                 {
       for (int i=0;i<100;i++)
       { 
           pixel=255<<24;
           pixel+=gain[count]<<18;
           pixel+=gain[count+1]<<10;
           pixel+=gain[count+2]<<2;
           lcd.DrawPixel(gainoffsetx+i,gainoffsety+j,pixel);
           count+=3;
              }
         }

 while(1) 
 {
    //srf08.setRangeRegister(2);
SRF08 srf08(D14, D15, addr); 

   srf08.startRanging();
    while (srf08.rangingFinished()==false)
    {
        wait_ms(1);
    }
   //wait_ms(500);

    valeur1=srf08.getRange();
    Luminosite=srf08.getLightIntensity();
    Luminosite=Luminosite*100/255;
    sprintf((char*)tmp, "Distance: %d cm  |Luminosite :%d%%",distance,Luminosite);
    valeur3=valeur2;
    valeur2=valeur1;
    distance= (valeur1+valeur2+valeur3)/3;
    
  

    //wait(1);
    if (distance!=65535)
    {
        ts.GetState(&TS_State);
        if (TS_State.touchDetected) {
            // Clear lines corresponding to old touches coordinates
         
          
                x = TS_State.touchX[0];
                y = TS_State.touchY[0];
               
                 //   sprintf((char*)text, "x %d    y %d",x,y);
                  //      lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
 /// ----- recuperation et mise a la valeur du registre range
                if ( x <100 && x>0 && y <100&& y>0){
                    //The range is ((rangeVal x 43mm) + 43mm)
                   /*  Setting the Range Register to 1 (0x01) gives a maximum range of 86mm. More usefully,
                    24 (0x18) gives a range of 1 metre and 140 (0x8C) is 6 metres.
                     Setting 255 (0xFF) gives the original 11 metres */
                     if (rangeregisterflag==10)rangeregisterflag=0;
                     switch (rangeregisterflag){
                     case 0:
                     srf08.setRangeRegister(0x18);
                     rangeregistertexte=1;
                     rangeregisterflag=1;
                     break;
                     case 1:
                     srf08.setRangeRegister(0x8C);
                    rangeregistertexte=6;
                     rangeregisterflag=2;
                     break;
                     case 2:
                  
                     srf08.setRangeRegister(0xFF);
                     rangeregistertexte=11;
                     rangeregisterflag=0;
                     break;      
                              
                }
                

                }
 /// ----- recuperation et mise a la valeur du registre analogue gain
 if ( x >lcd.GetXSize()-100 && x<lcd.GetXSize() && y <100&& y>0){   
                        if (gainregisterflag==10)gainregisterflag=0;
         
                     switch (gainregisterflag){
                     case 0:
                     gainreg=0x00;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=94;
                     gainregisterflag=1;
                     break;
                      case 1:
                     gainreg=0x06;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=114;
                     gainregisterflag=2;
                      break;
                     case 2:
                     gainreg=0x12;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=145;
                     gainregisterflag=3;
                     break;
                     case 3:
                     gainreg=0x18;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=199;
                     gainregisterflag=4;
                     break;
                     case 4:
                     gainreg=0x24;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=317;
                     gainregisterflag=5;
                      break;
                     case 5:
                     gainreg=0x30;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=777;
                     gainregisterflag=6;
                      break;
                     case 6:
                     gainreg=0x31;
                     srf08.setMaxGainRegister(gainreg);
                     gainregistertexte=1025;
                     gainregisterflag=0;
                      break;
                     
                                
                }
                }
           wait_ms(100);                               
// loop d'affichage par default
        } else {
                 
   
                      //   lcd.Clear(LCD_COLOR_BLACK);
                     //srf08.setMaxGainRegister(0xFF);
                     lcd.ClearStringLine(9);
                     lcd.ClearStringLine(10);
                    lcd.ClearStringLine(15);
                     if (rangeregisterflag==10){
                         sprintf((char*)text, "Presser le coin haut gauche pour changer le Range");
                         lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
                         }else {
                         sprintf((char*)text, "Range  de %d  metre",rangeregistertexte);
                         lcd.DisplayStringAt(0, LINE(9), (uint8_t *)&text, LEFT_MODE);
                        }
                      if (gainregisterflag==10){
                         sprintf((char*)text, "Presser le coin haut droit pour changer le Gain");
                         lcd.DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE);
                         }else {
                         sprintf((char*)text, "Gain  de %d  metre",gainregistertexte);
                         lcd.DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE);
                        }                                                 
                        lcd.DisplayStringAt(0, LINE(15), (uint8_t *)tmp, CENTER_MODE);
                        
                     
        }

        }
        else {
        lcd.Clear(LCD_COLOR_BLACK);
        lcd.DisplayStringAt(0, LINE(9), (uint8_t *)"Erreur d'initialisation du module SRF08", CENTER_MODE);
        }
    }
    
//wait_ms(10);

}