Smart coffee machine with facial recognition and remote control

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

main.cpp

Committer:
projetmacintel
Date:
2014-01-15
Revision:
0:43669f623d43

File content as of revision 0:43669f623d43:

#include "mbed.h"
#include "rtos.h"
#include "cafe.h"
#include "camera.h"
#include "capteur_tasse.h"
#include "eau.h"
#include "ethernet.h"
#include "led.h"
#include "machine.h"
#include "preferences.h"
#include "purge.h"
#include "ecran_lcd.h"
#include "intelligence.h"

#define TIMEOUT_DETECTION   20.0

int main()
{
    //thread_checkCapteurs();
    /*if(getPreferenceIntensite() == -1)
        allumerMachine();*/
    //printf("%d\n\r", getPreferenceIntensite());
    
    Thread threadEcran(thread_ecran);
    wait(1);
    afficherAuCentreDeLEcran("Demarrage", "du systeme");
    
    Timer t;
    char nom_utilisateur[25];
    DigitalIn boutonPoussoir(p12);
    int preference_longueur = 0, preference_intensite = 0;
    bool detection_visage = false, utilisateur_reconnu = false;
    wait(1);
    
    if(preparationEthernet())
    {
        checkContenanceReserveEau(true);
        wait(1); // Pour laisser l'affichage du message
        
        if(initialiserCamera())
        {
            wait(1); // Pour laisser l'affichage du message
            while(boutonPoussoir.read() != 1) // Arret du système avec pression sur BP
            {
                t.reset();
                
                do
                {
                    checkPurge();
                    checkCafe();
                    checkContenanceReserveEau(false);
                    afficherAuCentreDeLEcran("Pret a", "vous servir");
                    
                    if(boutonPoussoir.read() == 1)
                        break;
                    
                    // Recherche d'un visage en permanence
                    detection_visage = detecterUtilisateur(&utilisateur_reconnu, 
                                                            nom_utilisateur, 
                                                            &preference_intensite, 
                                                            &preference_longueur);
                } while(!detection_visage);
                
                if(boutonPoussoir.read() == 1)
                    break;
                    
                //async_desactiverDetectionVisage();
                // Lancement d'une détection en boucle
                //Thread threadDetectionVisage(thread_detection_visage);
                //wait(3);
                
                if(utilisateur_reconnu)
                {
                    afficherAuCentreDeLEcran("Bonjour", nom_utilisateur);
                    setPreferenceLongueur(preference_longueur);
                    setPreferenceIntensite(preference_intensite);
                    wait(3);
                    
                    t.start();
                    afficherAuCentreDeLEcran("Veuillez changer", "vos preferences", "puis placer", "votre tasse");
                    while(/*async_visageDetecte() && */!tasseEnPlace() && t.read() < TIMEOUT_DETECTION);
                    t.stop();
                    
                    if(t.read() >= TIMEOUT_DETECTION)
                        continue;
                        
                    /*if(!async_visageDetecte())
                        continue;*/
                        
                    // Sinon, c'est que l'utilisateur a placé sa tasse
                    
                    // On lance la prise de photos en continu pour enrichir la base
                    //async_lancerPriseEtEnvoiPhotosEnContinu();
                    
                    // On lance la production de café
                    faireUnCafe();
                    
                    afficherAuCentreDeLEcran("Sauvegarde de", "vos preferences");
                    communiquerAuServeurPreferencesUtilisateur(getPreferenceIntensite(), getPreferenceLongueur());
                    wait(2);
                    afficherAuCentreDeLEcran("Retirez", "votre tasse");
                    
                    // On arrete la prise de photos et on en informe le serveur
                    //async_stopperPriseEtEnvoiPhotosEnContinu();
                    
                    // On attend que l'utilisateur retire sa tasse
                    while(tasseEnPlace());
                }
                
                else
                {
                    t.start();
                    afficherAuCentreDeLEcran("Nouvel", "utilisateur", "Veuillez placer", "votre tasse");
                    while(/*async_visageDetecte() && */!tasseEnPlace() && t.read() < TIMEOUT_DETECTION);
                    t.stop();
                    
                    if(t.read() >= TIMEOUT_DETECTION)
                        continue;
                        
                    /*if(!async_visageDetecte())
                        continue;*/
                        
                    // Sinon, c'est que l'utilisateur a placé sa tasse
                    
                    // On lance la prise de photos en continu pour enrichir la base
                    //async_lancerPriseEtEnvoiPhotosEnContinu();
                    
                    afficherAuCentreDeLEcran("Faites votre", "selection", "puis", "validez");
                    while(!capteurChauffeClignotant());
                    
                    afficherAuCentreDeLEcran("Merci de", "patienter");
                    while(capteurChauffeClignotant()); // on attend la fin de café
                    
                    // On recherche les préférences de l'utilisateur et on les communique au serveur
                    afficherAuCentreDeLEcran("Lecture de", "vos preferences");
                    if(communiquerAuServeurPreferencesUtilisateur(getPreferenceIntensite(), getPreferenceLongueur()))
                    {
                        afficherAuCentreDeLEcran("Echec de ", "sauvegarde");
                        wait(1);
                    }
                    
                    // On arrete la prise de photos et on en informe le serveur
                    //async_stopperPriseEtEnvoiPhotosEnContinu();
                    
                    // On attend que l'utilisateur retire sa tasse
                    afficherAuCentreDeLEcran("Retirez", "votre tasse");
                    while(tasseEnPlace());
                }
            }
        }
        
        deconnexionEthernet();
    }
    
    return 0;
}