E2i3 2015/2016 / Mbed 2 deprecated 2014-LCD_RGB_Blacklight_Basics

Dependencies:   mbed

main.cpp

Committer:
Natsy
Date:
2016-02-25
Revision:
0:29b4d3e2ad2b
Child:
1:ba258e2ff0b0

File content as of revision 0:29b4d3e2ad2b:

/* --- 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;                      //
    cmd[1] = 0x00;                      //
    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;                      //
    cmd[1] = 0x00;                      //
    link.write(0xC4,cmd,2);             // Envoi de la commande à l'écran
    wait_us(100);                       // Pause de 100us
    
    cmd[0] = 0x08;                      //
    cmd[1] = 0xAA;                      //
    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;                  //
    cmd[1] = B;                     //
    link.write(0xC4,cmd,2);         //
    wait_us(100);                   //
    
    cmd[0] = 0x03;                  //
    cmd[1] = G;                     //
    link.write(0xC4,cmd,2);         //
    wait_us(100);                   //
    
    cmd[0] = 0x04;                  //
    cmd[1] = R;                     //
    link.write(0xC4,cmd,2);         //
    wait_us(100);                   //
}

/* --- 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
    
    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 sur l'écran 

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

    while(1){           //
        if( (Pot>0.2f) & (Pot<=0.4f)){            // Couleur Rouge si 0.2f<pot<0.4f
            R = 0xFF;                                   //
            G = 0x00;                                   //
            B = 0x00;                                   //
        }else if( (Pot>0.4f) & (Pot<=0.6f) ){     // Couleur Verte si 0.4f<pot<0.6f
            R = 0x00;                                   //
            G = 0xFF;                                   //
            B= 0x00;                                    //
        }else if( (Pot>0.6f) ){                   // Couleur Bleu si 0.6f<pot
            R = 0x00;                                   //
            G = 0x00;                                   //
            B = 0xFF;                                   //
        }else{                                    // Aucune couleur si pot<0.2f
            R = 0x00;                                   //
            G = 0x00;                                   //
            B = 0x00;                                   //
        }
        setup(R,G,B);                   //Envoi du nouveau code RGB pour rétroéclairer l'écran de couleur différente
    }
}