final lab 6, écran lcd

Dependencies:   mbed-rtos mbed mlcd_32pt

Committer:
annicksenecal
Date:
Sun Dec 15 16:07:44 2013 +0000
Revision:
4:cb1507dc9dd9
Parent:
3:e3681694d955
laboratoire 6 final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
annicksenecal 0:c44fd2014f2f 1 // Print messages when the AnalogIn is greater than 50%
annicksenecal 0:c44fd2014f2f 2
annicksenecal 4:cb1507dc9dd9 3 #include "mbed.h"
annicksenecal 0:c44fd2014f2f 4 #include "mlcd_32pt.h" //Librairie pour l'écran LCD
annicksenecal 0:c44fd2014f2f 5 #include "Serial.h" //Librairie pour la communication série
annicksenecal 1:bbb636a6ce10 6 #include "rtos.h"
annicksenecal 0:c44fd2014f2f 7
annicksenecal 3:e3681694d955 8 #define ACK 0x06
annicksenecal 3:e3681694d955 9 #define NAK 0x15
annicksenecal 3:e3681694d955 10 #define ON 1
annicksenecal 3:e3681694d955 11 #define OFF 0
annicksenecal 3:e3681694d955 12 #define DEBUT_LIGNE 0
annicksenecal 4:cb1507dc9dd9 13 #define BLANC 0xFFFF
annicksenecal 3:e3681694d955 14 #define WIDTH 1
annicksenecal 3:e3681694d955 15 #define HEIGHT 1
annicksenecal 3:e3681694d955 16 #define LIGNE_SUIV 15
annicksenecal 3:e3681694d955 17
annicksenecal 0:c44fd2014f2f 18
annicksenecal 0:c44fd2014f2f 19 AnalogIn ir(p19); //Initialisation de la pin qui reçoit la valeur du capteur infra-rouge
annicksenecal 0:c44fd2014f2f 20 DigitalOut myled(LED4); //Sert surtout au dépannage
annicksenecal 0:c44fd2014f2f 21 DigitalOut myled2(LED2); //Sert surtout au dépannage
annicksenecal 3:e3681694d955 22 DigitalOut myled3(LED3);
annicksenecal 1:bbb636a6ce10 23 Serial terminal (USBTX,USBRX); //pour envoyer au port de communication
annicksenecal 0:c44fd2014f2f 24
annicksenecal 3:e3681694d955 25 int lignes = 0;
annicksenecal 1:bbb636a6ce10 26 bool couleur;
annicksenecal 3:e3681694d955 27 Mutex flag;
annicksenecal 3:e3681694d955 28 unsigned char message[50];
annicksenecal 0:c44fd2014f2f 29
annicksenecal 4:cb1507dc9dd9 30 typedef struct {
annicksenecal 4:cb1507dc9dd9 31 float gris;
annicksenecal 4:cb1507dc9dd9 32
annicksenecal 4:cb1507dc9dd9 33 } mail_t;
annicksenecal 4:cb1507dc9dd9 34
annicksenecal 4:cb1507dc9dd9 35 Mail<mail_t, 16> mail_box;
annicksenecal 4:cb1507dc9dd9 36
annicksenecal 4:cb1507dc9dd9 37 void lectureCapteur (void const *args) //Lecture du capteur infra-rouge
annicksenecal 1:bbb636a6ce10 38 {
annicksenecal 4:cb1507dc9dd9 39 while(true) {
annicksenecal 4:cb1507dc9dd9 40 if(ir < .6) {
annicksenecal 1:bbb636a6ce10 41 couleur = false;
annicksenecal 3:e3681694d955 42 sprintf((char*)message,"c'est noir! (%f)\n \r", ir.read());
annicksenecal 3:e3681694d955 43 printf((char*)message);
annicksenecal 1:bbb636a6ce10 44 myled = 1;
annicksenecal 2:dfd0d133d964 45 Thread::wait(500);
annicksenecal 1:bbb636a6ce10 46 myled = 0;
annicksenecal 2:dfd0d133d964 47 Thread::wait(500);
annicksenecal 4:cb1507dc9dd9 48 } else {
annicksenecal 4:cb1507dc9dd9 49 couleur = true;
annicksenecal 3:e3681694d955 50 sprintf((char*)message,"c'est blanc! (%f)\n \r", ir.read());
annicksenecal 3:e3681694d955 51 printf((char*)message);
annicksenecal 1:bbb636a6ce10 52 myled2 = 1;
annicksenecal 2:dfd0d133d964 53 Thread::wait(500);
annicksenecal 1:bbb636a6ce10 54 myled2 = 0;
annicksenecal 4:cb1507dc9dd9 55 Thread::wait(500);
annicksenecal 3:e3681694d955 56 }
annicksenecal 4:cb1507dc9dd9 57
annicksenecal 4:cb1507dc9dd9 58 }
annicksenecal 1:bbb636a6ce10 59 }
annicksenecal 1:bbb636a6ce10 60
annicksenecal 4:cb1507dc9dd9 61 void envoiMessage (void const *args) //Envoi du message sur l'écran avec le Mailbox
annicksenecal 3:e3681694d955 62 {
annicksenecal 4:cb1507dc9dd9 63 uint32_t i = 0;
annicksenecal 4:cb1507dc9dd9 64
annicksenecal 4:cb1507dc9dd9 65 while(1) {
annicksenecal 4:cb1507dc9dd9 66
annicksenecal 4:cb1507dc9dd9 67 i++; // fake data update
annicksenecal 4:cb1507dc9dd9 68 mail_t *mail = mail_box.alloc();
annicksenecal 4:cb1507dc9dd9 69 mail->gris = i;
annicksenecal 4:cb1507dc9dd9 70 mail_box.put(mail);
annicksenecal 4:cb1507dc9dd9 71
annicksenecal 4:cb1507dc9dd9 72 drawString(DEBUT_LIGNE, lignes, FONT_8_12, BLANC, WIDTH, HEIGHT, message);
annicksenecal 4:cb1507dc9dd9 73 lignes += LIGNE_SUIV;
annicksenecal 4:cb1507dc9dd9 74
annicksenecal 4:cb1507dc9dd9 75 if (lignes >= 225) {
annicksenecal 3:e3681694d955 76 copier_coller();
annicksenecal 4:cb1507dc9dd9 77
annicksenecal 3:e3681694d955 78 lignes -= LIGNE_SUIV;
annicksenecal 3:e3681694d955 79 }
annicksenecal 4:cb1507dc9dd9 80 } ;
annicksenecal 3:e3681694d955 81 }
annicksenecal 3:e3681694d955 82
annicksenecal 3:e3681694d955 83 /*void resetEcran (void const *args)
annicksenecal 3:e3681694d955 84 {
annicksenecal 3:e3681694d955 85 if (double_clic()) {
annicksenecal 3:e3681694d955 86 flag.lock();
annicksenecal 3:e3681694d955 87 sprintf((char*)message,"Reset de l'ecran");
annicksenecal 3:e3681694d955 88 drawString(DEBUT_LIGNE, lignes, FONT_8_12, NOIR, WIDTH, HEIGHT, message);
annicksenecal 3:e3681694d955 89 lignes = 0;
annicksenecal 3:e3681694d955 90 }
annicksenecal 3:e3681694d955 91
annicksenecal 3:e3681694d955 92 }
annicksenecal 3:e3681694d955 93 */
annicksenecal 3:e3681694d955 94
annicksenecal 4:cb1507dc9dd9 95 int main()
annicksenecal 1:bbb636a6ce10 96 {
annicksenecal 4:cb1507dc9dd9 97 int retour = 0;
annicksenecal 4:cb1507dc9dd9 98 int bckground = 0;
annicksenecal 4:cb1507dc9dd9 99
annicksenecal 4:cb1507dc9dd9 100 // Initialisation de l'écran
annicksenecal 4:cb1507dc9dd9 101
annicksenecal 3:e3681694d955 102 init_lcd();
annicksenecal 4:cb1507dc9dd9 103 bckground = rgb(213,44,180);
annicksenecal 4:cb1507dc9dd9 104 retour = setbgColor(bckground);
annicksenecal 4:cb1507dc9dd9 105
annicksenecal 4:cb1507dc9dd9 106 if (retour == NAK) {
annicksenecal 3:e3681694d955 107 myled3 = ON;
annicksenecal 4:cb1507dc9dd9 108 } else {
annicksenecal 3:e3681694d955 109 sprintf((char*)message,"Lecture du capteur\n\r");
annicksenecal 3:e3681694d955 110 printf("%s", (char*)message);
annicksenecal 4:cb1507dc9dd9 111 drawString(DEBUT_LIGNE, lignes, FONT_8_12, BLANC, WIDTH, HEIGHT, message);
annicksenecal 3:e3681694d955 112 lignes += LIGNE_SUIV;
annicksenecal 3:e3681694d955 113 }
annicksenecal 3:e3681694d955 114
annicksenecal 3:e3681694d955 115
annicksenecal 4:cb1507dc9dd9 116 //boucle avec les threads
annicksenecal 1:bbb636a6ce10 117
annicksenecal 1:bbb636a6ce10 118 Thread thread(lectureCapteur);
annicksenecal 3:e3681694d955 119 Thread thread1(envoiMessage);
annicksenecal 4:cb1507dc9dd9 120 //Thread thread2(resetEcran);
annicksenecal 4:cb1507dc9dd9 121 while(true) {
annicksenecal 4:cb1507dc9dd9 122 osEvent evt = mail_box.get();
annicksenecal 4:cb1507dc9dd9 123 if (evt.status == osEventMail) {
annicksenecal 4:cb1507dc9dd9 124 mail_t *mail = (mail_t*)evt.value.p;
annicksenecal 4:cb1507dc9dd9 125 printf("Valeur du gris", mail->gris);
annicksenecal 4:cb1507dc9dd9 126
annicksenecal 4:cb1507dc9dd9 127 mail_box.free(mail);
annicksenecal 4:cb1507dc9dd9 128 };
annicksenecal 4:cb1507dc9dd9 129
annicksenecal 4:cb1507dc9dd9 130
annicksenecal 4:cb1507dc9dd9 131
annicksenecal 4:cb1507dc9dd9 132 }
annicksenecal 1:bbb636a6ce10 133 }