Smart coffee machine with facial recognition and remote control

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

ecran_lcd.cpp

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

File content as of revision 0:43669f623d43:

#include "ecran_lcd.h"

TextLCD ecranLCD(p30, p26, p25, p27, p28, p29); // rs, e, d4-d7
char message_ecran_1_haut[50], message_ecran_1_bas[50], message_ecran_2_haut[50], message_ecran_2_bas[50];
bool afficher_double_message, mettre_a_jour_ecran;

void thread_ecran(void const *args)
{
    Timer t;
    mettre_a_jour_ecran = false;
    wait(1);
    
    while(1)
    {
        if(mettre_a_jour_ecran)
        {
            ecranLCD.cls();
            mettre_a_jour_ecran = false;
            
            if(!afficher_double_message)
            {
                afficherSurUneLigne(message_ecran_1_haut, 1);
                afficherSurUneLigne(message_ecran_1_bas, 2);
            }
            
            else
            {
                t.reset();
                t.start();
                bool mise_a_jour_1 = false, mise_a_jour_2 = false;
                
                while(!mettre_a_jour_ecran)
                {
                    if(t.read() < 1.5)
                    {
                        if(!mise_a_jour_1)
                        {
                            ecranLCD.cls();
                            afficherSurUneLigne(message_ecran_1_haut, 1);
                            afficherSurUneLigne(message_ecran_1_bas, 2);
                            mise_a_jour_1 = true;
                        }
                    }
                    
                    else if(t.read() > 1.5*2)
                    {
                        t.reset();
                        mise_a_jour_1 = false;
                        mise_a_jour_2 = false;
                    }
                    
                    else
                    {
                        if(!mise_a_jour_2)
                        {
                            ecranLCD.cls();
                            afficherSurUneLigne(message_ecran_2_haut, 1);
                            afficherSurUneLigne(message_ecran_2_bas, 2);
                            mise_a_jour_2 = true;
                        }
                    }
                }
                
                t.stop();
            }
            
        }
    }
}

void afficherSurUneLigne(const char* texte_brut, int ligne)
{
    int i;
    char texte[17];
    for(i = 0 ; i < 16 ; i ++)
        texte[i] = texte_brut[i];
    
    texte[i] = '\0';
    
    int nb_espaces_a_ajouter = (ecranLCD.columns() - strlen(texte)) / 2;

    if(nb_espaces_a_ajouter < 0)
        nb_espaces_a_ajouter = 0;

    ecranLCD.locate(nb_espaces_a_ajouter, ligne - 1);
    ecranLCD.printf(texte);

    if(ligne == 1)
        printf("Affichage ecran : ");

    printf("%s ", texte);

    if(ligne == 2)
        printf("\n\r");
}

/* Surement deprecated */
void faireDefilerSurEcran(const char* texte, int vitesse)
{
    int k = 0;
    
    for(int i = 0 ; i < 999 ; i ++)
    {
        ecranLCD.cls();
    
        for(int j = 0 ; j < strlen(texte) - k ; j ++)
            ecranLCD.printf("%c", texte[k + j]);
        
        for(int j = strlen(texte) - k ; j < 15 - k ; j ++)
            ecranLCD.printf(" ");
        
        for(int j = 15 - k ; j < 15 ; j ++)
            ecranLCD.printf("%c", texte[j - (15 - k)]);
        
        wait(0.3);
        
        k ++;
        
        if(k == 15)
            k = 0;
    }
}

void afficherAuCentreDeLEcran(const char* texte_haut, const char* texte_bas)
{
    sprintf(message_ecran_1_haut, "%s", texte_haut);
    sprintf(message_ecran_1_bas, "%s", texte_bas);
    sprintf(message_ecran_2_haut, "");
    sprintf(message_ecran_2_bas, "");
    afficher_double_message = false;
    mettre_a_jour_ecran = true;
}

void afficherAuCentreDeLEcran(const char* texte_1_haut, const char* texte_1_bas, const char* texte_2_haut, const char* texte_2_bas)
{
    sprintf(message_ecran_1_haut, "%s", texte_1_haut);
    sprintf(message_ecran_1_bas, "%s", texte_1_bas);
    sprintf(message_ecran_2_haut, "%s", texte_2_haut);
    sprintf(message_ecran_2_bas, "%s", texte_2_bas);
    afficher_double_message = true;
    mettre_a_jour_ecran = true;
}

void afficherAuCentreDeLEcran(int nombre1, int nombre2)
{
    char s1[20], s2[20];
    sprintf(s1, "%i", nombre1);
    sprintf(s2, "%i", nombre2);
    afficherAuCentreDeLEcran(s1, s2);
}