Smart coffee machine with facial recognition and remote control
Dependencies: Camera_LS_Y201 EthernetInterface EthernetNetIf HTTPClient SRF05 TextLCD mbed-rtos mbed-src
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 }
Generated on Wed Jul 13 2022 03:22:24 by 1.7.2