Lab 6 final, sur l'écran tactile mlcd_32pt

Dependents:   testlab6

Committer:
annicksenecal
Date:
Sun Dec 15 16:05:51 2013 +0000
Revision:
0:20cb03f394d5
version finale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
annicksenecal 0:20cb03f394d5 1 #include "mbed.h" // Pour accès aux différentes librairies du Mbed
annicksenecal 0:20cb03f394d5 2 #include "us_ticker_api.h" // Accès à un compteur 32 bits en "free running"
annicksenecal 0:20cb03f394d5 3 #include "mlcd_32pt.h" // Prototypes des fonctions et constantes pour l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 4
annicksenecal 0:20cb03f394d5 5 #define LCD_TX p28 // Broches pour communication avec l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 6 #define LCD_RX p27
annicksenecal 0:20cb03f394d5 7 #define LCD_RAZ p30 // Broche pour remise à zéro de l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 8 #define DELAI_RAZ 2000 // Constante pour délai en msec pour la remise à zéro de l'affichewur µLCD32
annicksenecal 0:20cb03f394d5 9 #define DELAI_CLIGNOTE 25 // Constante pour délai en msec du clignotement de l'ACK
annicksenecal 0:20cb03f394d5 10
annicksenecal 0:20cb03f394d5 11
annicksenecal 0:20cb03f394d5 12 Serial lcd(LCD_TX, LCD_RX); // Objet pour communication série avec l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 13 Serial term(USBTX, USBRX); // Terminal série vers le PC pour mise au point
annicksenecal 0:20cb03f394d5 14 DigitalOut led_ack(LED1); // Sortie vers LED1 pour indiquer si il y a réception de l'ACK de l'afficheur µLCD32 (2 clignotements rapides : ACK reçu, LED1 allumé : aucun ACK)
annicksenecal 0:20cb03f394d5 15 DigitalOut sig_raz(LCD_RAZ); // Sortie pour contrôle de la remise à zéro de l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 16 int reponse;
annicksenecal 0:20cb03f394d5 17
annicksenecal 0:20cb03f394d5 18 /*
annicksenecal 0:20cb03f394d5 19 Remise à zéro de l'afficheur
annicksenecal 0:20cb03f394d5 20
annicksenecal 0:20cb03f394d5 21 */
annicksenecal 0:20cb03f394d5 22 void raz(void)
annicksenecal 0:20cb03f394d5 23 {
annicksenecal 0:20cb03f394d5 24 sig_raz = 0; // Impulsion négative pour raz de l'afficheur
annicksenecal 0:20cb03f394d5 25 wait_ms(25);
annicksenecal 0:20cb03f394d5 26 sig_raz = 1;
annicksenecal 0:20cb03f394d5 27 wait_ms(DELAI_RAZ); // Délai d'attente après une remise à zéro
annicksenecal 0:20cb03f394d5 28 }
annicksenecal 0:20cb03f394d5 29
annicksenecal 0:20cb03f394d5 30 /*
annicksenecal 0:20cb03f394d5 31 Clignotement de la del pour l'ACK
annicksenecal 0:20cb03f394d5 32
annicksenecal 0:20cb03f394d5 33 time : durée du clignotement en msec.
annicksenecal 0:20cb03f394d5 34 */
annicksenecal 0:20cb03f394d5 35 void pulse(int time)
annicksenecal 0:20cb03f394d5 36 {
annicksenecal 0:20cb03f394d5 37 int i;
annicksenecal 0:20cb03f394d5 38 for(i=0;i<2;i++) // Clignote 2 fois
annicksenecal 0:20cb03f394d5 39 {
annicksenecal 0:20cb03f394d5 40 led_ack = 1; // Clignotement de la LED de "time" msec.
annicksenecal 0:20cb03f394d5 41 wait_ms(time);
annicksenecal 0:20cb03f394d5 42 led_ack = 0;
annicksenecal 0:20cb03f394d5 43 wait_ms(time);
annicksenecal 0:20cb03f394d5 44 }
annicksenecal 0:20cb03f394d5 45 }
annicksenecal 0:20cb03f394d5 46
annicksenecal 0:20cb03f394d5 47 /*
annicksenecal 0:20cb03f394d5 48 Lecture de l'ACK de l'afficheur LCD
annicksenecal 0:20cb03f394d5 49 */
annicksenecal 0:20cb03f394d5 50
annicksenecal 0:20cb03f394d5 51 int ack(void)
annicksenecal 0:20cb03f394d5 52 {
annicksenecal 0:20cb03f394d5 53 int rep = NAK;
annicksenecal 0:20cb03f394d5 54
annicksenecal 0:20cb03f394d5 55 if ((rep = lcd.getc()) != ACK) // Lecture de l'ACK
annicksenecal 0:20cb03f394d5 56 {
annicksenecal 0:20cb03f394d5 57 led_ack = 1; // Allume le LED en cas d'erreur
annicksenecal 0:20cb03f394d5 58 rep = NAK;
annicksenecal 0:20cb03f394d5 59 }
annicksenecal 0:20cb03f394d5 60 else
annicksenecal 0:20cb03f394d5 61 pulse(DELAI_CLIGNOTE); // Indique que l'ACK est reçu
annicksenecal 0:20cb03f394d5 62
annicksenecal 0:20cb03f394d5 63 wait_ms(25);
annicksenecal 0:20cb03f394d5 64
annicksenecal 0:20cb03f394d5 65 return rep;
annicksenecal 0:20cb03f394d5 66 }
annicksenecal 0:20cb03f394d5 67
annicksenecal 0:20cb03f394d5 68 /*
annicksenecal 0:20cb03f394d5 69 Conversion d'une couleur sur 24 bits en une couleur sur 16 bits pour l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 70
annicksenecal 0:20cb03f394d5 71 r : Couleur rouge sur 8 bits
annicksenecal 0:20cb03f394d5 72 g : Couleur verte sur 8 bits
annicksenecal 0:20cb03f394d5 73 b : Couleur bleu sur 8 bits
annicksenecal 0:20cb03f394d5 74
annicksenecal 0:20cb03f394d5 75 Valeur de sortie : Couleur résultante sur 16 bits pour l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 76 */
annicksenecal 0:20cb03f394d5 77 int rgb(char r, char g, char b)
annicksenecal 0:20cb03f394d5 78 {
annicksenecal 0:20cb03f394d5 79 return (r>> 3 << 11) | (g>> 2 << 5) | (b>> 3); // Conversion des la valeur sur 24 bits en 16 bits
annicksenecal 0:20cb03f394d5 80 }
annicksenecal 0:20cb03f394d5 81
annicksenecal 0:20cb03f394d5 82 /*
annicksenecal 0:20cb03f394d5 83 Dessin d'un bouton de contrôle pour l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 84
annicksenecal 0:20cb03f394d5 85 state : État du bouton ( 0 : pressé, 1 : relaché)
annicksenecal 0:20cb03f394d5 86 x, y : Position du bouton
annicksenecal 0:20cb03f394d5 87 bgcolor : Couleur de fond du bouton sur 16 bits
annicksenecal 0:20cb03f394d5 88 font : Police des caractères (0 : 5x7, 1 : 8x8, 2 : 8x12, 3 : 12x16
annicksenecal 0:20cb03f394d5 89 fgcolor : Couleur de la police sur 16 bits
annicksenecal 0:20cb03f394d5 90 width, height : Facteur multiplicatif pour l'affichage des caractères
annicksenecal 0:20cb03f394d5 91 *str : Pointeur vers chaîne de caractères à afficher dans le bouton
annicksenecal 0:20cb03f394d5 92
annicksenecal 0:20cb03f394d5 93 Valeur de sortie : ACK ou NAK
annicksenecal 0:20cb03f394d5 94
annicksenecal 0:20cb03f394d5 95 */
annicksenecal 0:20cb03f394d5 96 int drawTextButton(char state, int x, int y, int bgcolor,char font, int fgcolor, int width, int height, unsigned char *str)
annicksenecal 0:20cb03f394d5 97 {
annicksenecal 0:20cb03f394d5 98 lcd.putc(BUTTON_TEXT); // Commande pour bouton texte
annicksenecal 0:20cb03f394d5 99 lcd.putc(state); // Paramètres de la commande
annicksenecal 0:20cb03f394d5 100 lcd.putc(x>>8);
annicksenecal 0:20cb03f394d5 101 lcd.putc(x&0xff);
annicksenecal 0:20cb03f394d5 102 lcd.putc(y>>8);
annicksenecal 0:20cb03f394d5 103 lcd.putc(y&0xff);
annicksenecal 0:20cb03f394d5 104 lcd.putc(bgcolor>>8);
annicksenecal 0:20cb03f394d5 105 lcd.putc(bgcolor&0xff);
annicksenecal 0:20cb03f394d5 106 lcd.putc(font);
annicksenecal 0:20cb03f394d5 107 lcd.putc(fgcolor>>8);
annicksenecal 0:20cb03f394d5 108 lcd.putc(fgcolor&0xff);
annicksenecal 0:20cb03f394d5 109 lcd.putc(width);
annicksenecal 0:20cb03f394d5 110 lcd.putc(height);
annicksenecal 0:20cb03f394d5 111 while(*str) // Chaîne de caractères à afficher
annicksenecal 0:20cb03f394d5 112 lcd.putc(*str++);
annicksenecal 0:20cb03f394d5 113
annicksenecal 0:20cb03f394d5 114 lcd.putc(0); // Fin de la chaîne
annicksenecal 0:20cb03f394d5 115
annicksenecal 0:20cb03f394d5 116 return ack(); // Retourne la lecture de l'ACK
annicksenecal 0:20cb03f394d5 117 }
annicksenecal 0:20cb03f394d5 118
annicksenecal 0:20cb03f394d5 119 /*
annicksenecal 0:20cb03f394d5 120 Dessin d'une chaîne de caractères pour l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 121
annicksenecal 0:20cb03f394d5 122 x, y : Position du début de la chaîne de caractères
annicksenecal 0:20cb03f394d5 123 font : Police des caractères (0 : 5x7, 1 : 8x8, 2 : 8x12, 3 : 12x16
annicksenecal 0:20cb03f394d5 124 fgcolor : Couleur de la police sur 16 bits
annicksenecal 0:20cb03f394d5 125 *str : Pointeur vers chaîne de caractères à afficher dans le bouton
annicksenecal 0:20cb03f394d5 126
annicksenecal 0:20cb03f394d5 127 Valeur de sortie : ACK ou NAK
annicksenecal 0:20cb03f394d5 128
annicksenecal 0:20cb03f394d5 129 */
annicksenecal 0:20cb03f394d5 130
annicksenecal 0:20cb03f394d5 131 int drawString(int x, int y, char font, int fgcolor, int width, int height, unsigned char *str)
annicksenecal 0:20cb03f394d5 132 {
annicksenecal 0:20cb03f394d5 133 lcd.putc(STRING); // Commande pour le dessin d'une chaîne de caractères sur l'écran µLCD32
annicksenecal 0:20cb03f394d5 134 lcd.putc(x>>8); // Paramèrtre de la commande
annicksenecal 0:20cb03f394d5 135 lcd.putc(x&0xff);
annicksenecal 0:20cb03f394d5 136 lcd.putc(y>>8);
annicksenecal 0:20cb03f394d5 137 lcd.putc(y&0xff);
annicksenecal 0:20cb03f394d5 138 lcd.putc(font);
annicksenecal 0:20cb03f394d5 139 lcd.putc(fgcolor>>8);
annicksenecal 0:20cb03f394d5 140 lcd.putc(fgcolor&0xff);
annicksenecal 0:20cb03f394d5 141 lcd.putc(width);
annicksenecal 0:20cb03f394d5 142 lcd.putc(height);
annicksenecal 0:20cb03f394d5 143
annicksenecal 0:20cb03f394d5 144 while(*str) // Chaîne de caractères à afficher
annicksenecal 0:20cb03f394d5 145 lcd.putc(*str++);
annicksenecal 0:20cb03f394d5 146
annicksenecal 0:20cb03f394d5 147 lcd.putc(0); // Fin de la chaîne
annicksenecal 0:20cb03f394d5 148
annicksenecal 0:20cb03f394d5 149 return ack();
annicksenecal 0:20cb03f394d5 150 }
annicksenecal 0:20cb03f394d5 151
annicksenecal 0:20cb03f394d5 152 /*
annicksenecal 0:20cb03f394d5 153 Change la couleur de fond de l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 154
annicksenecal 0:20cb03f394d5 155 fgcolor : Couleur de fond sur 16 bits
annicksenecal 0:20cb03f394d5 156
annicksenecal 0:20cb03f394d5 157 Valeur de sortie : ACK ou NAK
annicksenecal 0:20cb03f394d5 158
annicksenecal 0:20cb03f394d5 159 */
annicksenecal 0:20cb03f394d5 160 int setbgColor(int fgcolor)
annicksenecal 0:20cb03f394d5 161 {
annicksenecal 0:20cb03f394d5 162 lcd.putc(BGCOLOR);
annicksenecal 0:20cb03f394d5 163 lcd.putc(fgcolor>>8);
annicksenecal 0:20cb03f394d5 164 lcd.putc(fgcolor&0xff);
annicksenecal 0:20cb03f394d5 165 return ack();
annicksenecal 0:20cb03f394d5 166 }
annicksenecal 0:20cb03f394d5 167
annicksenecal 0:20cb03f394d5 168 /*
annicksenecal 0:20cb03f394d5 169 Initialisation du menu (ne fait rien à part d'effacer l'écran µLCD32)
annicksenecal 0:20cb03f394d5 170
annicksenecal 0:20cb03f394d5 171 Valeur de sortie : ACK ou NAK
annicksenecal 0:20cb03f394d5 172 */
annicksenecal 0:20cb03f394d5 173
annicksenecal 0:20cb03f394d5 174 int initMenu()
annicksenecal 0:20cb03f394d5 175 {
annicksenecal 0:20cb03f394d5 176 int rep;
annicksenecal 0:20cb03f394d5 177
annicksenecal 0:20cb03f394d5 178 lcd.putc(ERASE); // Commande pour effacer l'écran
annicksenecal 0:20cb03f394d5 179 rep = ack(); // Lecture de l'ACK
annicksenecal 0:20cb03f394d5 180
annicksenecal 0:20cb03f394d5 181 return rep;
annicksenecal 0:20cb03f394d5 182 }
annicksenecal 0:20cb03f394d5 183
annicksenecal 0:20cb03f394d5 184 /*
annicksenecal 0:20cb03f394d5 185 Initialise la vitesse de communication série avec l'afficheur
annicksenecal 0:20cb03f394d5 186
annicksenecal 0:20cb03f394d5 187 baudrate : Vitesse de communication
annicksenecal 0:20cb03f394d5 188
annicksenecal 0:20cb03f394d5 189 Valeur de sortie : ACK ou NAK
annicksenecal 0:20cb03f394d5 190
annicksenecal 0:20cb03f394d5 191 */
annicksenecal 0:20cb03f394d5 192
annicksenecal 0:20cb03f394d5 193 int init_com(int baudrate)
annicksenecal 0:20cb03f394d5 194 {
annicksenecal 0:20cb03f394d5 195
annicksenecal 0:20cb03f394d5 196 lcd.putc(SET_BAUD); // Commande pour changer de vitesse de communication
annicksenecal 0:20cb03f394d5 197 lcd.baud(baudrate); // Nouvelle vitesse
annicksenecal 0:20cb03f394d5 198
annicksenecal 0:20cb03f394d5 199 return 1;//ack(); // Lecture de l'ACK
annicksenecal 0:20cb03f394d5 200 }
annicksenecal 0:20cb03f394d5 201
annicksenecal 0:20cb03f394d5 202 /*
annicksenecal 0:20cb03f394d5 203 Initialisation de l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 204 */
annicksenecal 0:20cb03f394d5 205
annicksenecal 0:20cb03f394d5 206 void init_lcd(void)
annicksenecal 0:20cb03f394d5 207 {
annicksenecal 0:20cb03f394d5 208 raz(); // remise à zéro de l'afficheur µLCD32
annicksenecal 0:20cb03f394d5 209
annicksenecal 0:20cb03f394d5 210
annicksenecal 0:20cb03f394d5 211 lcd.putc(AUTO_BAUD); //Baudrate automatique
annicksenecal 0:20cb03f394d5 212 ack();
annicksenecal 0:20cb03f394d5 213 wait_ms(20);
annicksenecal 0:20cb03f394d5 214
annicksenecal 0:20cb03f394d5 215 // Active l'écran tactile du µLCD32
annicksenecal 0:20cb03f394d5 216 lcd.putc('Y');
annicksenecal 0:20cb03f394d5 217 lcd.putc(0x05);
annicksenecal 0:20cb03f394d5 218 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 219 ack();
annicksenecal 0:20cb03f394d5 220
annicksenecal 0:20cb03f394d5 221 // Active toute la surface de l'écran tactile
annicksenecal 0:20cb03f394d5 222 lcd.putc('Y');
annicksenecal 0:20cb03f394d5 223 lcd.putc(0x05);
annicksenecal 0:20cb03f394d5 224 lcd.putc(0x02);
annicksenecal 0:20cb03f394d5 225 ack();
annicksenecal 0:20cb03f394d5 226
annicksenecal 0:20cb03f394d5 227 // Initialise le menu
annicksenecal 0:20cb03f394d5 228 initMenu();
annicksenecal 0:20cb03f394d5 229
annicksenecal 0:20cb03f394d5 230 //Initialise le GET TOUCH
annicksenecal 0:20cb03f394d5 231 lcd.putc('o');
annicksenecal 0:20cb03f394d5 232 lcd.putc(0x04);
annicksenecal 0:20cb03f394d5 233 return reponse;
annicksenecal 0:20cb03f394d5 234
annicksenecal 0:20cb03f394d5 235 }
annicksenecal 0:20cb03f394d5 236
annicksenecal 0:20cb03f394d5 237 int double_clic(void)
annicksenecal 0:20cb03f394d5 238 {
annicksenecal 0:20cb03f394d5 239
annicksenecal 0:20cb03f394d5 240
annicksenecal 0:20cb03f394d5 241 if (reponse == 2)
annicksenecal 0:20cb03f394d5 242 {
annicksenecal 0:20cb03f394d5 243 lcd.putc('w');
annicksenecal 0:20cb03f394d5 244 lcd.putc(0x01);
annicksenecal 0:20cb03f394d5 245 lcd.putc(0xF4);
annicksenecal 0:20cb03f394d5 246 reponse = ack();
annicksenecal 0:20cb03f394d5 247
annicksenecal 0:20cb03f394d5 248 if (reponse == 6)
annicksenecal 0:20cb03f394d5 249 {
annicksenecal 0:20cb03f394d5 250 lcd.putc('E');
annicksenecal 0:20cb03f394d5 251 return ack();
annicksenecal 0:20cb03f394d5 252 }
annicksenecal 0:20cb03f394d5 253 }
annicksenecal 0:20cb03f394d5 254 }
annicksenecal 0:20cb03f394d5 255
annicksenecal 0:20cb03f394d5 256 int copier_coller(void)
annicksenecal 0:20cb03f394d5 257 {
annicksenecal 0:20cb03f394d5 258 lcd.putc('c');
annicksenecal 0:20cb03f394d5 259 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 260 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 261 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 262 lcd.putc(0x0F);
annicksenecal 0:20cb03f394d5 263 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 264 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 265 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 266 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 267 lcd.putc(0x01);
annicksenecal 0:20cb03f394d5 268 lcd.putc(0x3F);
annicksenecal 0:20cb03f394d5 269 lcd.putc(0x00);
annicksenecal 0:20cb03f394d5 270 lcd.putc(0xE0);
annicksenecal 0:20cb03f394d5 271 return ack();
annicksenecal 0:20cb03f394d5 272
annicksenecal 0:20cb03f394d5 273 }