Pour Marc la mignonne

Dependencies:   BSP_DISCO_F429ZI LCD_DISCO_F429ZI TS_DISCO_F429ZI mbed

Capteurs.cpp

Committer:
Alex_mln
Date:
2018-05-31
Revision:
0:fcce18d01987

File content as of revision 0:fcce18d01987:

#include "fonctions.h"
#include "Touchescreen.h"

typedef int liste [6];
liste blanc;
liste noir;
liste seuil;
liste mesure;


//Premiere rangée de capteur
//AnalogIn capt11(PF_7);
AnalogIn capt12(PF_8);
AnalogIn capt11(PC_3);
//AnalogIn capt13(PF_9);

//Deuxieme rangée de capteur
AnalogIn capt21(PC_4);
AnalogIn capt22(PC_1);
//AnalogIn capt23(PC_2);

//Troisième rangée de capteur

AnalogIn capt31(PA_7);
AnalogIn capt32(PC_5);


LCD_DISCO_F429ZI lcd2;
TS_DISCO_F429ZI ts2;
TS_StateTypeDef tsState2;
    uint16_t xc, yc;




void interface_noir(){
    lcd2.Clear(LCD_COLOR_WHITE);
    
    lcd2.SetTextColor(LCD_COLOR_BLUE);
    lcd2.FillRect(40,25,150,40);
    lcd2.SetBackColor(LCD_COLOR_BLUE);
    lcd2.SetTextColor(LCD_COLOR_WHITE);
    lcd2.DisplayStringAt(0, LINE(2), (uint8_t *)"Calibrage", CENTER_MODE);
    
    lcd2.SetBackColor(LCD_COLOR_WHITE);
    lcd2.SetTextColor(LCD_COLOR_BLACK);
    lcd2.DisplayStringAt(0, LINE(7), (uint8_t *)"Mesure du noir", CENTER_MODE);
    
    lcd2.SetTextColor(LCD_COLOR_BLUE);
    lcd2.FillCircle(120,235,50);
    lcd2.SetBackColor(LCD_COLOR_BLUE);
    lcd2.SetTextColor(LCD_COLOR_BLACK);
    lcd2.DisplayStringAt(0, 230, (uint8_t *)" OK", CENTER_MODE);
    }



void interface_blanc(){
    lcd2.Clear(LCD_COLOR_WHITE);
    
    lcd2.SetTextColor(LCD_COLOR_BLUE);
    lcd2.FillRect(40,25,150,40);
    lcd2.SetBackColor(LCD_COLOR_BLUE);
    lcd2.SetTextColor(LCD_COLOR_WHITE);
    lcd2.DisplayStringAt(0, LINE(2), (uint8_t *)"Calibrage", CENTER_MODE);
    
    lcd2.SetBackColor(LCD_COLOR_WHITE);
    lcd2.SetTextColor(LCD_COLOR_BLACK);
    lcd2.DisplayStringAt(0, LINE(7), (uint8_t *)"Mesure du blanc", CENTER_MODE);
    
    lcd2.SetTextColor(LCD_COLOR_BLUE);
    lcd2.FillCircle(120,235,50);
    lcd2.SetBackColor(LCD_COLOR_BLUE);
    lcd2.SetTextColor(LCD_COLOR_BLACK);
    lcd2.DisplayStringAt(0, 230, (uint8_t *)" OK", CENTER_MODE);
    }
    
    
    
void detectionc(){
     xc = tsState2.X;
        yc = tsState2.Y;
        uint8_t text[7];
        sprintf((char*)text, "%d; %d", xc, yc);
        lcd2.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);   }
            

int noir11,noir12,noir13,noir21,noir22,noir23,noir31,noir32,noir33;
int blanc11,blanc12,blanc13,blanc21,blanc22,blanc23,blanc31,blanc32,blanc33;

    
int * pointeur = (int*)malloc(3*sizeof(int));    
    
void calibrage(){
    uint8_t status2= ts2.Init(lcd2.GetXSize(), lcd2.GetYSize());
    ts2.GetState(&tsState2); 
    
    
    interface_noir();                                      //Mesure du noir
    
    while((xc<72 || xc>172) || (yc>295 || yc<195)){       //Attente de la position
        ts2.GetState(&tsState2); 
        detectionc();
        wait(0.05);}
    
    noir[0]=capt11.read()*1000;
    noir[1]=capt11.read()*1000;
   // noir[2]=capt13.read()*1000;
    
    noir[2]=capt21.read()*1000;
    noir[3]=capt22.read()*1000;
  //  noir[5]=capt23.read()*1000;
    
    noir[4]=capt31.read()*1000;
    noir[5]=capt32.read()*1000;
  ///  noir[8]=capt33.read()*1000;
    
    wait(0.1);
    
    lcd2.Clear(LCD_COLOR_WHITE);                 //Passage au prochain
    lcd2.FillRect(50,50,150,50);
    lcd2.SetBackColor(LCD_COLOR_BLACK);
    lcd2.SetTextColor(LCD_COLOR_WHITE);
    lcd2.DisplayStringAt(0, LINE(4), (uint8_t *)"Next ->", CENTER_MODE);
    
    
    
    while((xc<47 || xc>205) || (yc>100 || yc<50)){
        ts2.GetState(&tsState2); 
        detectionc();
        wait(0.05);}
        
        
    wait(0.01); 
    interface_blanc();  //Mesure du blanc
    
    while((xc<72 || xc>172) || (yc>295 || yc<195)){       //Attente de la position
        ts2.GetState(&tsState2); 
        detectionc();
        wait(0.05);}
    
    
    blanc[0]=capt11.read()*1000;
    blanc[1]=capt11.read()*1000;
  //  blanc[2]=capt13.read()*1000;
    
    blanc[2]=capt21.read()*1000;
    blanc[3]=capt22.read()*1000;
  //  blanc[5]=capt23.read()*1000;
    
    blanc[4]=capt31.read()*1000;
    blanc[5]=capt32.read()*1000;
 //   blanc[8]=capt33.read()*1000;
    
    wait(0.01); 
    

    for(int k=0;k<6;k++){           //Traduction sous forme d'un pointeur pour le renvoi et calcul du seuil
        seuil[k]=(blanc[k]+noir[k])/2;} 
    }
    
    
    
int* detectionLigne(){
    for(int k=0;k<3;k++){
        *(pointeur+k)=0; }
    mesure[0]=capt11.read()*1000;
    mesure[1]=capt11.read()*1000;
   // mesure[2]=capt13.read()*1000;
    
    mesure[2]=capt21.read()*1000;
    mesure[3]=capt22.read()*1000;
  //  mesure[5]=capt23.read()*1000;
    
    mesure[4]=capt31.read()*1000;
    mesure[5]=capt32.read()*1000;
  //  mesure[8]=capt33.read()*1000;
  
  for(int k=0;k<6;k++){
    affichage(mesure[k],k); }
    
    for(int k=0;k<6;k++){
        if(mesure[k]<seuil[k]){
            //*(pointeur+(k/2))=*(pointeur+(k/2))+1; 
            if(k==1 || k==0){
             *pointeur=*pointeur + 1;}
            else if(k==2 || k==3){
             *(pointeur+1)=*(pointeur+1) + 1;}
             else if(k==4 || k==5){
             *(pointeur+2)=*(pointeur+2) + 1;}
             }}
    for(int k=0;k<3;k++){
            if(*(pointeur+k)>=1){
                *(pointeur+k)=1; } 
            else{
                *(pointeur+k)=0;}}
    return(pointeur);
    }