Smart coffee machine with facial recognition and remote control
Dependencies: Camera_LS_Y201 EthernetInterface EthernetNetIf HTTPClient SRF05 TextLCD mbed-rtos mbed-src
preferences.cpp
- Committer:
- projetmacintel
- Date:
- 2014-01-15
- Revision:
- 0:43669f623d43
File content as of revision 0:43669f623d43:
#include "preferences.h" DigitalOut relaisSelectionRotation1(p21); DigitalOut relaisSelectionRotation2(p22); DigitalOut relaisSelectionPression(p24); DigitalOut relaisLectureCapteurs(p8); AnalogIn capteurLumiereHaut(p15); AnalogIn capteurLumiereBas(p20); float largeur_impulsion_relais = 0.08; float seuil_capteurs_lumiere = 0.5; void thread_checkCapteurs() { AnalogIn capteurLumiere1(p15); // - longueur 3 AnalogIn capteurLumiere2(p16); // - signal chauffe AnalogIn capteurLumiere3(p17); // défaut grain AnalogIn capteurLumiere4(p18); // symbole bas gauche AnalogIn capteurLumiere5(p19); // longueur 3 ---> BUG (valeur divisée par deux ?) AnalogIn capteurLumiere6(p20); // - intensité 3 DigitalOut relaisUtilisationCapteurs(p8); DigitalIn capteurEau(p11); capteurEau.mode(PullUp); relaisUtilisationCapteurs = 1; while(1) { 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()); } } int getPreferenceLongueur() { float val; int nombre_incrementations = 0; do // on se positionne sur le capteur de lumière { val = getValeurCapteurLumiere(capteurLumiereHaut); if(val > seuil_capteurs_lumiere) { simulerSelectionLongueur(); nombre_incrementations ++; if(nombre_incrementations == 5) return -1; // aucun voyant n'est allumé } } while(val > seuil_capteurs_lumiere); switch(nombre_incrementations) // on retourne sur la position initiale { case 0: // cas où l'on se trouve déjà sur le capteur de lumière break; case 1: simulerSelectionPrecedenteLongueur(); break; case 2: simulerSelectionPrecedenteLongueur(); simulerSelectionPrecedenteLongueur(); break; case 3: simulerSelectionLongueur(); simulerSelectionLongueur(); break; case 4: simulerSelectionLongueur(); break; } int selection = (3 + 5 - nombre_incrementations) % 5; if(selection == 0) return 5; else return selection; } int getPreferenceIntensite() { float val; int rang = -1, selection; for(int i = 0 ; i < 6 ; i ++) { val = getValeurCapteurLumiere(capteurLumiereBas); if(val < seuil_capteurs_lumiere) { rang = i; if(i == 0) break; } simulerSelectionIntensite(); } if(rang == -1) return -1; selection = (6 - rang + 3) % 6; if(selection == 0) return 6; else return selection; } int setPreferenceLongueur(int preference) { float val; do // on se positionne sur le capteur de lumière { val = getValeurCapteurLumiere(capteurLumiereHaut); if(val > seuil_capteurs_lumiere) simulerSelectionLongueur(); } while(val > seuil_capteurs_lumiere); switch(preference) // puis on atteind la sélection souhaitée, au plus tot { case 1: simulerSelectionPrecedenteLongueur(); simulerSelectionPrecedenteLongueur(); break; case 2: simulerSelectionPrecedenteLongueur(); break; case 3: // On y est déjà break; case 4: simulerSelectionLongueur(); break; case 5: simulerSelectionLongueur(); simulerSelectionLongueur(); break; } return 0; } int setPreferenceIntensite(int preference) { float val; do { val = getValeurCapteurLumiere(capteurLumiereBas); if(val > seuil_capteurs_lumiere) simulerSelectionIntensite(); } while(val > seuil_capteurs_lumiere); for(int i = 0 ; i < (3 + preference) % 6 ; i ++) simulerSelectionIntensite(); return 0; } float getValeurCapteurLumiere(AnalogIn capteurLumiere) { relaisLectureCapteurs = 1; wait(0.01); float valeur_capteur = capteurLumiere.read(); relaisLectureCapteurs = 0; wait(0.01); return valeur_capteur; } void simulerSelectionLongueur() { relaisSelectionRotation1 = 1; wait(largeur_impulsion_relais / 2); relaisSelectionRotation2 = 1; wait(largeur_impulsion_relais / 2); relaisSelectionRotation1 = 0; wait(largeur_impulsion_relais / 2); relaisSelectionRotation2 = 0; wait(1.5*largeur_impulsion_relais); } void simulerSelectionPrecedenteLongueur() { relaisSelectionRotation2 = 1; wait(largeur_impulsion_relais / 2); relaisSelectionRotation1 = 1; wait(largeur_impulsion_relais / 2); relaisSelectionRotation2 = 0; wait(largeur_impulsion_relais / 2); relaisSelectionRotation1 = 0; wait(1.5*largeur_impulsion_relais); } void simulerSelectionIntensite() { relaisSelectionPression = 1; wait(largeur_impulsion_relais); relaisSelectionPression = 0; wait(largeur_impulsion_relais); }