Smart coffee machine with facial recognition and remote control

Dependencies:   Camera_LS_Y201 EthernetInterface EthernetNetIf HTTPClient SRF05 TextLCD mbed-rtos mbed-src

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers preferences.cpp Source File

preferences.cpp

00001 #include "preferences.h"
00002 
00003 DigitalOut relaisSelectionRotation1(p21);
00004 DigitalOut relaisSelectionRotation2(p22);
00005 DigitalOut relaisSelectionPression(p24);
00006 DigitalOut relaisLectureCapteurs(p8);
00007 
00008 AnalogIn capteurLumiereHaut(p15);
00009 AnalogIn capteurLumiereBas(p20);
00010 
00011 float largeur_impulsion_relais = 0.08;
00012 float seuil_capteurs_lumiere = 0.5;
00013 
00014 void thread_checkCapteurs()
00015 {
00016     AnalogIn capteurLumiere1(p15); // - longueur 3
00017     AnalogIn capteurLumiere2(p16); // - signal chauffe
00018     AnalogIn capteurLumiere3(p17); // défaut grain
00019     AnalogIn capteurLumiere4(p18); // symbole bas gauche
00020     AnalogIn capteurLumiere5(p19); // longueur 3 ---> BUG (valeur divisée par deux ?)
00021     AnalogIn capteurLumiere6(p20); // - intensité 3
00022     DigitalOut relaisUtilisationCapteurs(p8);
00023     DigitalIn capteurEau(p11);
00024     capteurEau.mode(PullUp);
00025 
00026     relaisUtilisationCapteurs = 1;
00027     
00028     while(1)
00029     {
00030         printf("1:%.3f\t 2:%.3f 3:%.3f\t 4:%.3f\t 5:%.3f\t 6:%.3f\t EAU:%d\n\r", capteurLumiere1.read(), capteurLumiere2.read(), capteurLumiere3.read(), capteurLumiere4.read(), capteurLumiere5.read(), capteurLumiere6.read(), capteurEau.read());
00031     }
00032 }
00033 
00034 int getPreferenceLongueur()
00035 {
00036     float val;
00037     int nombre_incrementations = 0;
00038     
00039     do // on se positionne sur le capteur de lumière
00040     {
00041         val = getValeurCapteurLumiere(capteurLumiereHaut);
00042         if(val > seuil_capteurs_lumiere)
00043         {
00044             simulerSelectionLongueur();
00045             nombre_incrementations ++;
00046             
00047             if(nombre_incrementations == 5)
00048                 return -1; // aucun voyant n'est allumé
00049         }
00050     } while(val > seuil_capteurs_lumiere);
00051     
00052     switch(nombre_incrementations) // on retourne sur la position initiale
00053     {
00054         case 0:
00055             // cas où l'on se trouve déjà sur le capteur de lumière
00056             break;
00057         
00058         case 1:
00059             simulerSelectionPrecedenteLongueur();
00060             break;
00061         
00062         case 2:
00063             simulerSelectionPrecedenteLongueur();
00064             simulerSelectionPrecedenteLongueur();
00065             break;
00066         
00067         case 3:
00068             simulerSelectionLongueur();
00069             simulerSelectionLongueur();
00070             break;
00071         
00072         case 4:
00073             simulerSelectionLongueur();
00074             break;
00075     }
00076     
00077     int selection = (3 + 5 - nombre_incrementations) % 5;
00078     if(selection == 0)
00079         return 5;
00080     
00081     else
00082         return selection;
00083 }
00084 
00085 int getPreferenceIntensite()
00086 {
00087     float val;
00088     int rang = -1, selection;
00089     
00090     for(int i = 0 ; i < 6 ; i ++)
00091     {
00092         val = getValeurCapteurLumiere(capteurLumiereBas);
00093         if(val < seuil_capteurs_lumiere)
00094         {
00095             rang = i;
00096         
00097             if(i == 0)
00098                 break;
00099         }
00100         
00101         simulerSelectionIntensite();
00102     }
00103     
00104     if(rang == -1)
00105         return -1;
00106     
00107     selection = (6 - rang + 3) % 6;
00108     if(selection == 0)
00109         return 6;
00110     
00111     else
00112         return selection;
00113 }
00114 
00115 int setPreferenceLongueur(int preference)
00116 {
00117     float val;
00118     
00119     do // on se positionne sur le capteur de lumière
00120     {
00121         val = getValeurCapteurLumiere(capteurLumiereHaut);
00122         if(val > seuil_capteurs_lumiere)
00123             simulerSelectionLongueur();
00124     } while(val > seuil_capteurs_lumiere);
00125     
00126     switch(preference) // puis on atteind la sélection souhaitée, au plus tot
00127     {
00128         case 1:
00129             simulerSelectionPrecedenteLongueur();
00130             simulerSelectionPrecedenteLongueur();
00131             break;
00132             
00133         case 2:
00134             simulerSelectionPrecedenteLongueur();
00135             break;
00136             
00137         case 3:
00138             // On y est déjà
00139             break;
00140         
00141         case 4:
00142             simulerSelectionLongueur();
00143             break;
00144         
00145         case 5:
00146             simulerSelectionLongueur();
00147             simulerSelectionLongueur();
00148             break;
00149      }
00150     
00151     return 0;
00152 }
00153 
00154 int setPreferenceIntensite(int preference)
00155 {
00156     float val;
00157     
00158     do
00159     {
00160         val = getValeurCapteurLumiere(capteurLumiereBas);
00161         if(val > seuil_capteurs_lumiere)
00162             simulerSelectionIntensite();
00163     } while(val > seuil_capteurs_lumiere);
00164     
00165     for(int i = 0 ; i < (3 + preference) % 6 ; i ++)
00166         simulerSelectionIntensite();
00167     
00168     return 0;
00169 }
00170 
00171 float getValeurCapteurLumiere(AnalogIn capteurLumiere)
00172 {
00173     relaisLectureCapteurs = 1;
00174     wait(0.01);
00175     float valeur_capteur = capteurLumiere.read();
00176     relaisLectureCapteurs = 0;
00177     wait(0.01);
00178     return valeur_capteur;
00179 }
00180 
00181 void simulerSelectionLongueur()
00182 {
00183     relaisSelectionRotation1 = 1;
00184     wait(largeur_impulsion_relais / 2);
00185     relaisSelectionRotation2 = 1;
00186     wait(largeur_impulsion_relais / 2);
00187     relaisSelectionRotation1 = 0;
00188     wait(largeur_impulsion_relais / 2);
00189     relaisSelectionRotation2 = 0;
00190     wait(1.5*largeur_impulsion_relais);
00191 }
00192 
00193 void simulerSelectionPrecedenteLongueur()
00194 {
00195     relaisSelectionRotation2 = 1;
00196     wait(largeur_impulsion_relais / 2);
00197     relaisSelectionRotation1 = 1;
00198     wait(largeur_impulsion_relais / 2);
00199     relaisSelectionRotation2 = 0;
00200     wait(largeur_impulsion_relais / 2);
00201     relaisSelectionRotation1 = 0;
00202     wait(1.5*largeur_impulsion_relais);
00203 }
00204 
00205 void simulerSelectionIntensite()
00206 {
00207     relaisSelectionPression = 1;
00208     wait(largeur_impulsion_relais);
00209     relaisSelectionPression = 0;
00210     wait(largeur_impulsion_relais);
00211 }