Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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
}
}