Nesse artigo vamos ensinar como utilizar os leds e Joystick da placa Shield OM13082, programando a placa LPCXpresso4337 com o mbed. Os valores do Joystick serão impressos no LCD da placa de expansão e os leds acenderão conforme movimentação do Joystick.
Para acessar o artigo com as especificações completas da placa LPCXpresso4337, acesse o link do artigo de Thiago Lima.
Para acessar o artigo com as especificações da placa Shield OM13082, acesse o link do artigo de Thiago Lima.
Para aprender a fazer o primeiro programa no mbed, acesse o link do artigo de Fabio Sousa.
Para aprender a utilizar o LCD gráfico 128×64 da placa de expansão, acesse o link do artigo de Thiago Lima.
Para aprender a utilizar o sensor de Temperatura da placa de expansão, acesse o link do artigo de Thiago Lima.
Leds e Joytick – PCAL955x
Conforme pode ser observado no datasheet da placa de expansão OM13082, os quatro leds presentes na placa estão conectados ao CI PCAL955x, que rata-se de um expansor de IOs e pode ser acessado via comunicação serial I2C.

Vamos então criar um software para se comunicar com esse CI e, conforme atuamos no joystick, altera o estado dos Leds. Os leds estão conectado da seguinte forma:
LD1 – P14
LD2 – P15
LD3 – P16
LD4 – P17
O Joystick está conectado da seguinte forma:
R – Direita – P03
S – Centro – P01
U – Pra Cima – P04
L – Esquerda – P02
D – Pra Baixo – P00
Vamos criar o projeto. Para iniciar, logado no mbed, crie um novo projeto chamado mbed_joystick_leds

Em https://www.mbed.com/en/ faca a busca pelo nome do display ST7567, o mesmo utilizado nessa placa. A primeira busca é o projeto https://developer.mbed.org/users/MACRUM/code/ST7567/ Clique em Import into Compiler para utilizar o código-fonte desse projeto.

A seguinte tela vai aparecer. Importe.

Volte no site da mbed, na página destinada ao shield da placa mbed. Importe a biblioteca do CI PCAL955x conforme a figura abaixo:

Adicione a biblioteca do CI PCAL955x ao projeto correto.

Digite o seguinte código que acessa o Joystick e controla os leds, mostrando os valores do Joystick no display:
#include "mbed.h"
#include "ST7567.h"
#include "PCAL9555.h"
//Instancia o LCD
ST7567 lcd(D11, D13, D12, D9, D10); // mosi, sclk, reset, A0, nCS
//Instancia o CI responsavel pela expancao de GPIOs, onde os leds e o joystick estao conectados.
PCAL9555 gpio_exp(SDA, SCL);
GpioBusOut leds(gpio_exp, X1_4, X1_5, X1_6, X1_7);
GpioBusIn joystick(gpio_exp, X0_0, X0_1, X0_2, X0_3, X0_4);
//Utilizado enum para controlar os estados dos Leds.
enum led_num {
OM13082_LD1 = (1 << 0),
OM13082_LD2 = (1 << 1),
OM13082_LD3 = (1 << 2),
OM13082_LD4 = (1 << 3),
};
enum key_num {
Key_Up = (1 << X0_4),
Key_Down = (1 << X0_0),
Key_Right = (1 << X0_3),
Key_Left = (1 << X0_2),
Key_Center = (1 << X0_1),
};
int main()
{
//Seta o contraste do LCD
lcd.set_contrast(0x35);
//Limpa o LCD
lcd.cls();
//Posiciona na primeira posicao do LCD
lcd.locate(0, 1);
//Imprime a mensagem do Contest NXP na primeira linha do display
lcd.printf("EMBARCADOS TEST NXP");
while(true) { // this is the third thread
lcd.locate(0, 2 + 8);
//Le o Joystick
int keys = joystick.read();
if ((keys & Key_Up) == 0) // Testa se tecla pra cima do Joystick foi acionada
{
lcd.printf("Tecla = Cima \n");
leds.write(~OM13082_LD1); // Acende Led 1
}
else if ((keys & Key_Down) == 0) // Testa se tecla pra bixo do Joystick foi acionada
{
lcd.printf("Tecla = Baixo \n");
leds.write(~OM13082_LD2); // Acende Led 2
}
else if ((keys & Key_Right) == 0) //Testa se tecla pra direita do Joystick foi acionada
{
lcd.printf("Tecla = Direita \n");
leds.write(~OM13082_LD3); // Acende Led 3
}
else if ((keys & Key_Left) == 0) // Testa se tecla pra esquerda do Josytick foi acionada.
{
lcd.printf("Tecla = Esquerda\n");
leds.write(~OM13082_LD4); // Acende Led 4
}
else if ((keys & Key_Center) == 0) Testa se joystick esta pressionado na posicao central
{
lcd.printf("Tecla = Centro \n");
leds.write(~(OM13082_LD1|OM13082_LD2|OM13082_LD3|OM13082_LD4)); // Acende todos os leds
}
else //Nenhuma tecla esta acionada.
{
lcd.printf("Tecla = Nenhuma \n");
}
wait(0.5);
}
}
Clique em Compile. Esse botão compila e faz o download do binário. Conecte a placa e, depois que o drive MBED montar, arraste o binário para dentro do drive MBED. Aguarde alguns segundos e reinicie a placa. A mensagem EMBARCADOS CONTEST NXP será impressa no LCD na primeira linha do display. Na segunda linha será informada a posição do Joystick. Cada posição do Joystick representa um estado do Led. Confira a figura abaixo.




