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 ecran_lcd.cpp Source File

ecran_lcd.cpp

00001 #include "ecran_lcd.h"
00002 
00003 TextLCD ecranLCD(p30, p26, p25, p27, p28, p29); // rs, e, d4-d7
00004 char message_ecran_1_haut[50], message_ecran_1_bas[50], message_ecran_2_haut[50], message_ecran_2_bas[50];
00005 bool afficher_double_message, mettre_a_jour_ecran;
00006 
00007 void thread_ecran(void const *args)
00008 {
00009     Timer t;
00010     mettre_a_jour_ecran = false;
00011     wait(1);
00012     
00013     while(1)
00014     {
00015         if(mettre_a_jour_ecran)
00016         {
00017             ecranLCD.cls();
00018             mettre_a_jour_ecran = false;
00019             
00020             if(!afficher_double_message)
00021             {
00022                 afficherSurUneLigne(message_ecran_1_haut, 1);
00023                 afficherSurUneLigne(message_ecran_1_bas, 2);
00024             }
00025             
00026             else
00027             {
00028                 t.reset();
00029                 t.start();
00030                 bool mise_a_jour_1 = false, mise_a_jour_2 = false;
00031                 
00032                 while(!mettre_a_jour_ecran)
00033                 {
00034                     if(t.read() < 1.5)
00035                     {
00036                         if(!mise_a_jour_1)
00037                         {
00038                             ecranLCD.cls();
00039                             afficherSurUneLigne(message_ecran_1_haut, 1);
00040                             afficherSurUneLigne(message_ecran_1_bas, 2);
00041                             mise_a_jour_1 = true;
00042                         }
00043                     }
00044                     
00045                     else if(t.read() > 1.5*2)
00046                     {
00047                         t.reset();
00048                         mise_a_jour_1 = false;
00049                         mise_a_jour_2 = false;
00050                     }
00051                     
00052                     else
00053                     {
00054                         if(!mise_a_jour_2)
00055                         {
00056                             ecranLCD.cls();
00057                             afficherSurUneLigne(message_ecran_2_haut, 1);
00058                             afficherSurUneLigne(message_ecran_2_bas, 2);
00059                             mise_a_jour_2 = true;
00060                         }
00061                     }
00062                 }
00063                 
00064                 t.stop();
00065             }
00066             
00067         }
00068     }
00069 }
00070 
00071 void afficherSurUneLigne(const char* texte_brut, int ligne)
00072 {
00073     int i;
00074     char texte[17];
00075     for(i = 0 ; i < 16 ; i ++)
00076         texte[i] = texte_brut[i];
00077     
00078     texte[i] = '\0';
00079     
00080     int nb_espaces_a_ajouter = (ecranLCD.columns() - strlen(texte)) / 2;
00081 
00082     if(nb_espaces_a_ajouter < 0)
00083         nb_espaces_a_ajouter = 0;
00084 
00085     ecranLCD.locate(nb_espaces_a_ajouter, ligne - 1);
00086     ecranLCD.printf(texte);
00087 
00088     if(ligne == 1)
00089         printf("Affichage ecran : ");
00090 
00091     printf("%s ", texte);
00092 
00093     if(ligne == 2)
00094         printf("\n\r");
00095 }
00096 
00097 /* Surement deprecated */
00098 void faireDefilerSurEcran(const char* texte, int vitesse)
00099 {
00100     int k = 0;
00101     
00102     for(int i = 0 ; i < 999 ; i ++)
00103     {
00104         ecranLCD.cls();
00105     
00106         for(int j = 0 ; j < strlen(texte) - k ; j ++)
00107             ecranLCD.printf("%c", texte[k + j]);
00108         
00109         for(int j = strlen(texte) - k ; j < 15 - k ; j ++)
00110             ecranLCD.printf(" ");
00111         
00112         for(int j = 15 - k ; j < 15 ; j ++)
00113             ecranLCD.printf("%c", texte[j - (15 - k)]);
00114         
00115         wait(0.3);
00116         
00117         k ++;
00118         
00119         if(k == 15)
00120             k = 0;
00121     }
00122 }
00123 
00124 void afficherAuCentreDeLEcran(const char* texte_haut, const char* texte_bas)
00125 {
00126     sprintf(message_ecran_1_haut, "%s", texte_haut);
00127     sprintf(message_ecran_1_bas, "%s", texte_bas);
00128     sprintf(message_ecran_2_haut, "");
00129     sprintf(message_ecran_2_bas, "");
00130     afficher_double_message = false;
00131     mettre_a_jour_ecran = true;
00132 }
00133 
00134 void afficherAuCentreDeLEcran(const char* texte_1_haut, const char* texte_1_bas, const char* texte_2_haut, const char* texte_2_bas)
00135 {
00136     sprintf(message_ecran_1_haut, "%s", texte_1_haut);
00137     sprintf(message_ecran_1_bas, "%s", texte_1_bas);
00138     sprintf(message_ecran_2_haut, "%s", texte_2_haut);
00139     sprintf(message_ecran_2_bas, "%s", texte_2_bas);
00140     afficher_double_message = true;
00141     mettre_a_jour_ecran = true;
00142 }
00143 
00144 void afficherAuCentreDeLEcran(int nombre1, int nombre2)
00145 {
00146     char s1[20], s2[20];
00147     sprintf(s1, "%i", nombre1);
00148     sprintf(s2, "%i", nombre2);
00149     afficherAuCentreDeLEcran(s1, s2);
00150 }