E2i3 2015/2016 / Mbed 2 deprecated 2014-LCD_RGB_Blacklight_Basics

Dependencies:   mbed

main.cpp

Committer:
Natsy
Date:
2016-02-25
Revision:
2:70793ff108a5
Parent:
1:ba258e2ff0b0

File content as of revision 2:70793ff108a5:

/* --- Exercice 3 TP1 - 2015/2016 E2I3 ---*/
/* --- Pilotage de l'ecran LCD ---*/

/* --- Include des librairies necessaires ---*/
#include "mbed.h"

/* --- Initialisation des constantes ---*/

I2C link(I2C_SDA, I2C_SCL);     //Initialisation du lien I2C
const int addr = 0x7C;          //Création de la variable addr ( Adresse pour communiquer avec l'ecran )

/* --- Fonction d'initialisation générale ---*/

void Init(void){
    char cmd[2];                // Création d'une variable commande qui servira à envoyer un tableau d'ordres à l'écran LCD
    cmd[0] = 0x80;              // 0x80 indique que la valeur envoyé ensuite est une commande
    cmd[1] = 0x3C;              // Commande : Power ON et Ecriture sur ligne du haut
    link.write(addr,cmd,2);     // Envoi de la commande à l'écran
    wait_us(100);               // Pause de 100us
    
    cmd[1] = 0x0F;              // Commande : Paramétrage de l'affichage ( Cursor et Blink ON )
    link.write(addr,cmd,2);     // Envoi de la commande à l'écran
    wait_us(100);               // Pause de 100us
    
    cmd[1] = 0x01;              // Commande : Display Clear
    link.write(addr,cmd,2);     // Envoi de la commande à l'écran
    wait_ms(2);                 // Pause de 2ms
    
    cmd[1] = 0x06;              // Commande : Entry Mode Set ( Shift Off & Increment Mode )
    link.write(addr,cmd,2);     // Envoi de la commande à l'écran
    wait_us(100);               // Pause de 100us
}

/* --- Fonction d'initialisation de l'affichage des couleurs sur l'écran LCD ---*/

void initRGB(void){      //

    char cmd[2];                // Création d'une variable commande qui servira à envoyer un tableau d'ordres à l'écran LCD
    
    cmd[0] = 0x00;                      // Registre à contacter : MODE0
    cmd[1] = 0x00;                      // Valeur à écrire dans le registre (0x00) => Registre de réglage
    link.write(0xC4,cmd,2);             // Envoi de la commande à l'écran ( ici l'adresse est 0xC4 pour commander le Blacklight )
    wait_us(100);                       // Pause de 100us
    
    cmd[0] = 0x01;                      // Registre à contacter : MODE1
    cmd[1] = 0x00;                      // Valeur à écrire dans le registre (0x00) => Registre de réglage
    link.write(0xC4,cmd,2);             // Envoi de la commande à l'écran
    wait_us(100);                       // Pause de 100us
    
    cmd[0] = 0x08;                      // Registre à contacter : LEDOUT
    cmd[1] = 0xAA;                      // Valeur à écrire dans le registre (0xAA) => Registre de réglage
    link.write(0xC4,cmd,2);             // Envoi de la commande à l'écran
    wait_us(100);                       // Pause de 100us
}

/* --- Fonction de changement de couleur ---*/
/* --- En entrée, trois variables R, G et B ---*/

void setup(char R,char G, char B){  //
    
    char cmd[2];                    // Création d'une variable commande qui servira à envoyer un tableau d'ordres à l'écran LCD
    
    cmd[0] = 0x02;                  // Emplacement du registre PWM0 pour controler la lumière bleue
    cmd[1] = B;                     // Variable contenant la valeur à afficher en bleu ( de 0 à 255 )
    link.write(0xC4,cmd,2);         // Envoi de la commande à l'écran
    wait_us(100);                   // Pause de 100us
    
    cmd[0] = 0x03;                  // Emplacement du registre PWM1 pour controler la lumière verte
    cmd[1] = G;                     // Variable contenant la valeur à afficher en vert ( de 0 à 255 )
    link.write(0xC4,cmd,2);         // Envoi de la commande à l'écran
    wait_us(100);                   // Pause de 100us
    
    cmd[0] = 0x04;                  // Emplacement du registre PWM2 pour controler la lumière rouge
    cmd[1] = R;                     // Variable contenant la valeur à afficher en rouge ( de 0 à 255 )
    link.write(0xC4,cmd,2);         // Envoi de la commande à l'écran
    wait_us(100);                   // Pause de 100us
}

/* --- Programme principal ---*/

int main(void){
    
    AnalogIn Pot(A0);       // Initialisation du potentiomètre branché en A0
    char data[12];          // Initialisation du tableau data pour envoyer des caractères sur l'écran LCD
    char R,G,B;             // Initialisation des variables R,G et B pour la couleur de l'écran LCD
    int ValPot;
    
    Init();                 // Exécution de la fonction d'initialisation générale
    initRGB();              // Exécution de la fonction d'initialisation des couleurs RGB
    
    data[0] = 0x40;         // 0x40 indique que les valeurs envoyé ensuite sont des données
    data[1] = 'H';          // Indication des caractères à envoyer
    data[2] = 'e';              
    data[3] = 'l';
    data[4] = 'l';
    data[5] = 'o';
    data[6] = ' ';
    data[7] = 'W';
    data[8] = 'o';
    data[9] = 'r';
    data[10] = 'l';
    data[11] = 'd';
    
    link.write(addr,data,12);           // Envoi du tableau data à l'écran 
    
    
    

/* --- Boucle de test de la valeur du potentiomètre ---*/

    while(1){           //
        char cmd[2];                // Création d'une variable commande qui servira à envoyer un tableau d'ordres à l'écran LCD
    cmd[0] = 0x80;              // 0x80 indique que la valeur envoyé ensuite est une commande
    cmd[1] = 0x01;              // Commande : Power ON et Ecriture sur ligne du haut
    link.write(addr,cmd,2);     // Envoi de la commande à l'écran
    wait_ms(2);               // Pause de 2s
        sprintf(data," %f",(float)Pot);
        data[0] = 0x40; 
        link.write(addr,data,6); 
        wait_ms(10);
       
        if( (Pot<=0.5f)){            // Couleur Rouge si pot<0.5f
            R = 0x00;                                   // Valeur de R = 0
            G = 0x00;                                   // Valeur de G = 0
            B = 0xFF;                                   // Valeur de B = 255
        }else if( (Pot>0.5f) & (Pot<=0.95f) ){     // Couleur Verte si 0.5f<pot<0.95f
            R = 0xFF;                                   // Valeur de R = 255
            G = 0x00;                                   // Valeur de G = 0
            B= 0xFF;                                    // Valeur de B = 255
        }else if( (Pot>0.90f) ){                   // Couleur Bleu si 0.95f<pot
            R = 0xFF;                                   // Valeur de R = 0
            G = 0x00;                                   // Valeur de G = 0
            B = 0x00;                                   // Valeur de B = 255
        }/*else{                                    // Aucune couleur si pot<0.2f
            R = 0x00;                                   // Valeur de R = 0
            G = 0x00;                                   // Valeur de G = 0
            B = 0x00;                                   // Valeur de B = 0
        }*/
        setup(R,G,B);                   //Envoi du nouveau code RGB pour rétroéclairer l'écran de couleur différente
    }
}