MAR 27, 2014BY PORTALDOARDUINOI N DISPLAYS Tutorial Mdulo Display Nokia 5110 para Arduino Ol pessoal tudo bem? Hoje vamos falar do Display Nokia 5110, na verdade vamos falar do Mdulo que vem contendo um display do Nokia 5110, e mais especificamente do mdulo azul, existe tambm um mdulo vermelho, mas o mesmo funciona com 3.3V e o azul funciona com 5V, assim o mdulo vermelho requer uma limitao na alimentao, mas fora isso creio que o cdigo que ser apresentado, tambm funcionaria com o mdulo vermelho, mas o teste s foi feito com o azul. Veja os mdulos:
Mdulo Vermelho e Azul Porque usar? Bom, voc pode estar se perguntando por que usar este Mdulo em vez de usar o tradicional Display LCD 162? Ou at mesmo a verso Shield do Display 162? Este ltimo at vem com um teclado (com 6 teclas). Tudo depende, se voc acha que as duas linhas e os 16 caracteres em cada linha do LCD 162 so suficientes para o seu projeto, no existe razo para usar o Display Nokia 5110, at porque ele mais caro que o 162 normal, e est mais ou menos na mesma faixa de preo da verso Shield com teclado do display 162.
O display LCD 162 convencional e a sua verso Shield com teclado. Mas caso voc precise de algum tipo de edio de texto, como aumentar o tamanho da fonte, ou efeitos como inverter a cor do texto (o texto fica branco e fundo fica preto), fazer desenhos simples, como crculos, retngulos, tringulos, e at mesmo alguns bitmaps monocromticos (como por exemplos os mostrados nas duas primeiras imagens deste post), o Mdulo Display Nokia 5110 ideal! Este tutorial ser um pouco grande (mas no muito complicado), ento seja forte e no desista no meio do caminho!! Bibliotecas Agora que foi feito as devidas apresentaes e justificativas, vamos para a parte prtica. Primeiramente vamos adicionar a biblioteca, que na verdade so duas. Baixe a biblioteca principal aqui e a biblioteca grfica aqui. Crie uma pasta chamada PCD8544 na pasta libraries, que se localiza na pasta de instalao do Arduino em seu Sistema Operacional, descompacte o contedo das duas bibliotecas baixadas na pasta PCD8544, sim, o contedo das duas bibliotecas baixadas vo ficar na pasta PCD8544, assim a primeira parte est concluda. Possveis erros na compilao e no Upload Agora inicie a IDE do Arduino e v a Files/Arquivo, depois em Examples/Exemplos, em seguida em PCD8544 e por ltimo em pcdtest, e ento tente compilar o exemplo, caso acontea o seguinte erro:
pcdtest.pde:38:46: error: variable logo16_glcd_bmp must be const in order to be put into read-only section by means of __attribute__((progmem))
V na seguinte linha: static unsigned char PROGMEM logo16_glcd_bmp[] = Troque a linha acima por: const unsigned char PROGMEM logo16_glcd_bmp[] = Tente compilar o exemplo novamente, no Windows se sua verso da IDE do Arduino for a 1.05 provvel que acontea outro erro:
C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In constructor RobotControl::RobotControl(): C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: LCD_CS was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: DC_LCD was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:8: error: RST_LCD was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp: In member function void RobotControl::begin(): C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: MUXA was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: MUXB was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: MUXC was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:18: error: MUXD was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:19: error: MUX_IN was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:22: error: BUZZ was not declared in this scope C:\Program Files (x86)\Arduino\libraries\Robot_Control\ArduinoRobot.cpp:25: error: Serial1 was not declared in this scope
Erro de conflito com a biblioteca Robot Control. Este erro ocorreu por causa de conflito com a biblioteca Robot_Control, o compilador tentar utilizar esta biblioteca em vez de usar a PCD8544, e o erro gerado. Pesquisando sobre o problema, as informaes encontradas dizem que o mesmo s acontece na verso 1.05 da IDE do Arduino, e que na verso 1.04 tudo acontece sem problemas. E qual seria a soluo? A primeira soluo seria voltar para a IDE 1.04. A segunda soluo seria remover a pasta Robot_Control da pasta Libraries, que por sua vez fica na pasta de instalao do Arduino. Ns utilizamos a segunda opo como descrito abaixo. No Windows 8 o caminho da pasta libraries : C:/Program Files (x86)/Arduino/libraries , provvel que no Windows 7 deva ser o mesmo caminho, ou bem parecido. Basta simplesmente mover (recortar de uma pasta e colar em outra) a pasta Robot_Control do caminho C:/Program Files (x86)/Arduino/libraries para o caminho C:/Program Files (x86)/Arduino/ , assim quando voc precisar da biblioteca Robot_Control ela estar em um lugar de fcil acesso. Depois desta operao a compilao e o upload ocorreram normalmente no Windows. No Ubuntu 13.10 aps o primeiro erro, a compilao ocorreu normalmente, um erro muito parecido com o erro acima aconteceu no momento do Upload, foi gerado o seguinte erro:
Robot_Control/keyboard.cpp: In member function int8_t RobotControl::keyboardRead() Robot_Control/keyboard.cpp:31:42: error: KEY was not declared in this scope
Erro de conflito com a biblioteca Robot Control. A causa do problema a mesma citada no caso do Windows, o compilador tenta utilizar a biblioteca Robot_Control em vez de usar a PCD8544, e isto costuma acontecer na verso 1.05 da IDE do Arduino, as solues so as mesmas, voltar para a IDE 1.04 ou mover a pasta Robot_Control da pasta libraries do Arduino, no Ubuntu 13.10 o caminho da pata libraries : /usr/share/arduino/libraries , voc precisar de permisso de super usurio (sudo) para mover a pasta para outro local, ou seja voc ter de usar o terminal, assim voc deve mover a pasta citada do caminho /usr/share/arduino/libraries para o caminho /usr/share/arduino/ , deste modo a pasta Robot_Control ficar em um lugar de fcil acesso quando for preciso utiliz-la novamente. Aps o procedimento descrito acima, a compilao e o Upload ocorrer normalmente e agora j podemos seguir para a montagem na protoboard. Montagem do circuito Para montagem deste projeto voc ir precisar: 01 Arduino Uno ou Mega 2560 01 Protobard 01 Mdulo Display Nokia 5110 10 Jumpers (fios) O circuito ficar assim:
Montagem do circuito na protoboard. A ligao dos pinos ficou assim: - Pino 12 do Arduino ligado no Pino 1 (RST) do display (fio azul na imagem acima). - Pino 11 do Arduino ligado no Pino 2 (CE) do display (fio amarelo). - Pino 10 do Arduino ligado no Pino 3 (DC) do display (fio verde). - Pino 9 do Arduino ligado no Pino 4 (Din) do display (fio laranja). - Pino 8 do Arduino Ligado no Pino 5 (Clk) do display (fio cinza). Os pinos VCC e BL (backligth) do display esto ligados no VCC do Arduino (fios vermelhos) e o pino GND do display est ligado ao pino GND Arduino (fios pretos). Exibindo textos O primeiro exemplo de cdigo ser para exibir texto, e testar as possibilidades de formatao:
//Teste de exibio e formatao de texto no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br #include <Adafruit_GFX.h> //incluindo a biblioteca grfica #include <Adafruit_PCD8544.h> //incluindo a biblioteca principal
// pin 8 - Serial clock out (SCLK) // pin 9 - Serial data out (DIN) // pin 10 - Data/Command select (D/C) // pin 11 - LCD chip select (CS/CE) // pin 12 - LCD reset (RST)
void setup() { Serial.begin(9600); // iniciando a porta seria com uma taxa de 9600 baude rate
display.begin(); display.setContrast(15); //Ajusta o contraste do display , este valor pode no ser o ideal para seu display, faa vrios teste at encontrar a melhor configurao display.clearDisplay(); //Apaga o buffer e o display
display.setTextSize(1); //Seta o tamanho do texto display.println("portal"); // exibe a palavra 'portal' no display
display.setTextSize(3); //Seta o tamanho do texto display.setCursor(25, 5); //Seta a posio do cursor, o primeiro nmero em relao a posio na horizontal (eixo X) e o segunto a vertical (eixo y) display.println("do");
display.setTextSize(1); //Seta o tamanho do texto display.setTextColor(WHITE, BLACK); //Inverte as cores do texto, o funco fica preto, e as letras ficam brancas display.setCursor( 42, 28); //Seta a posio do cursor display.println("arduino");
display.setTextSize(2); //Seta o tamanho do texto display.setTextColor(BLACK, WHITE); //Voltando com o texto para o padro (fundo branco, texto preto), sem essa linha o texto abaixo tambm seria exibido invertido display.setCursor( 0, 35); //Seta a posio do cursor display.println(".com.br"); display.display(); } void loop() { } O resultado para este cdigo pode ser visto na imagem abaixo:
Ai est, exibimos texto em trs tamanhos diferentes, exibimos com formatao invertida e cada palavra um uma posio diferente no display, o cdigo est bem comentado (talvez at demais) e nesses comentrios esto todas as instrues para fazer mudanas de tamanho, posio e formatao. OBS.: Uma observao interessante a funo display.setContrast() , foi feito testes em dois Mdulos Display Nokia 5110 que eram idnticos (azul, mesma alimentao, pinagem) que foram comprados juntos, e o valor ideal de contraste para cada um foi diferente. Ento se, ao compilar e fazer o upload deste exemplo, acontecer de seu display ficar todo branco, todo preto, com a tela borrada ou com letras bem claras, provvel que voc precise ajustar o valor do contraste (infelizmente ter de ser por tentativa e erro), antes de procurar algum erro no cdigo ou na montagem do circuito.
Desenhando Linhas Agora vamos desenhar linhas, para isto temos de ter em mente que este display possui uma resoluo de 8448 pixels, este um dado importante a partir de agora. Para desenhar as linhas usaremos a seguinte funo: display.drawLine(int Xo, int Yo, int X1, int Y1, int cor); Onde Xo e Yo representam o ponto inical da linha, X1 e Y1 representam o ponto final da linha, e a por ltimo a cor da linha, que pode ser 0 para branco e 1 para preto. Por exemplo: display.drawLine(0, 0, 83, 47, 1); A funo acima desenha uma linha que comea no canto superior esquerdo do display e termina no canto inferior direito, ser uma linha que cruzar todo o display na diagonal. Algo parecido com a imagem abaixo:
No display a linha ficar toda preta, na imagem foi destacado com preto o primeiro e o ltimo pixel para ficar claro onde a linha comea e onde ela termina. Vamos ao cdigo de exemplo que tudo ficar mais fcil de entender:
//Teste para desenhar linhas no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); void setup() { Serial.begin(9600); display.begin();// inicializa o display display.setContrast(20); //Ajusta o contraste do display display.clearDisplay(); //Apaga o buffer e o display
/* desenhando uma linha diagonal que comea no canto superior esquerdo e termina no canto inferior direito */ display.drawLine(0, 0, 84, 48, 1); display.display(); delay(2000); /* desenhando uma linha diagonal que comea no canto superior direito e termina no canto inferior esquerdo */ display.drawLine(84, 0, 0, 48, 1); display.display(); delay(2000); // desenhando uma linha vertical que no centro do display display.drawLine(0, 24, 84, 24, 1); display.display(); delay(2000); //desenhando uma linha horizontal no centro do display display.drawLine(42, 0, 42, 48, 1); display.display(); } void loop() { } O resultado ser o seguinte:
Todas as linhas do exemplo cruzam o display totalmente, mas voc pode fazer linhas de qualquer tamanho, mas claro que ter de respeitar o a resoluo de 8448 pixels. Desenhando retngulos possvel desenhar dois tipos de retngulos, um exibindo apenas as linhas de contorno e outro totalmente preenchido, o procedimento semelhante ao para desenhar linhas e so usadas as seguintes funes: display.drawRect(int Xo, int Yo, int largura, int altura, 1); display.fillRect(int Xo, int Yo, int largura, int altura, 1); Onde Xo e Yo representam a coordenada da posio do topo esquerdo do retngulo, que ser desenhado a partir dessa posio, depois informada a largura e altura, e por ltimo a cor, onde 0 branco e 1 preto. A primeira funo iria desenhar um retngulo e exibir apenas as linhas de contorno e a segunda iria preencher o retngulo totalmente de preto. Exemplo: display.drawRect(5, 5, 70, 30, 1); O resultado da funo acima seria algo como:
Onde a distncia de Xo at a borda lateral esquerda do display seria 5 pixels, e a distncia de Yo at a borda superior do display tambm seria 5 pixels. Vamos ao cdigo de exemplo: //Teste para desenhar retangulos no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); void setup() { Serial.begin(9600); display.begin(); display.setContrast(18); //Ajusta o contraste do display display.clearDisplay(); //desenhando retngulos display.drawRect(5, 5, 70, 40, 1); // desenhando retngulo sem preenchimento display.drawRect(7, 7, 65, 35, 1); display.drawRect(9, 9, 60, 30, 1); display.fillRect(11, 11, 55, 25, 1); //desenhando retngulo com o interior preenchido (preto) display.fillRect(20, 19, 30, 10, 0); //desenhando retngulo com o interior preenchido (branco) display.display(); } void loop() { } O resultado deste cdigo :
Desenhando Crculos Agora a vez dos crculos, assim como os retngulos eles podem ser exibidos apenas com a linha de contorno ou totalmente preenchidos, as funes que desenham crculos so: display.drawCircle( int Xo, int Yo, int raio, int cor); display.fillCircle( int Xo, int Yo, int raio, int cor); A primeira exibe crculos apenas com a linha de contorno e a segunda exibe crculos totalmente preenchidos. Onde Xo e Yo so as coordenadas do centro do crculo, depois informado o raio, e por ltimo a cor, novamente 0 para branco e 1 para preto. A imagem abaixo ilustra o que foi dito:
Vamos ao cdigo de exemplo: //Teste para desenhar circulos no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); void setup() { Serial.begin(9600); display.begin(); display.setContrast(16.5); //Ajusta o contraste do display display.clearDisplay(); display.drawCircle( 42, 24, 20, 1);// desenhando um circulo com centro em Xo = 42 e Yo = 24 e raio de 20 pixels display.drawCircle( 42, 24, 15, 1);// desenhando um circulo com centro em Xo = 42 e Yo = 24 e raio de 15 pixels display.fillCircle(42, 24, 10, 1);//circulo preenchido de preto display.fillCircle(42, 24, 3, 0); //circulo preencido de branco display.display(); } void loop() { } O resultado :
Desenhando tringulos Agora a vez dos tringulos, o esquema bem parecido com os retngulos e crculos, mas aqui ser necessrio informar 7 nmeros , os seis primeiros so as coordenadas dos 3 vrtices do tringulo e o ltimo a cor, a funo a seguinte: display.drawTriangle( int Xo, int Yo, int X1, int Y1, int X2, int Y2, int cor); display.fillTriangle( int Xo, int Yo, int X1, int Y1, int X2, int Y2, int cor); A imagem abaixo simula o resultado da funo:
A primeira funo desenha tringulos exibindo apenas as linhas de contorno e o segundo desenha tringulos preenchidos. Segue o cdigo de exemplo: //Teste para desenhar tringulos no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12); void setup() { Serial.begin(9600); display.begin(); display.setContrast(15); //Ajusta o contraste do display display.clearDisplay(); display.drawTriangle( 42, 0, 0, 43, 83, 43, 1);//desenha triangulo exibindo apenas as linha de contorno display.drawTriangle( 42, 5, 8, 38, 75, 38, 1);//desenha triangulo exibindo apenas as linha de contorno display.fillTriangle( 42, 10, 16, 33, 67, 33, 1);//desenha triangulo preenchido de preto display.fillTriangle( 42, 20, 30, 25, 53, 25, 0);//desenha triangulo preenchido de branco display.display(); } void loop() { } O resultado do cdigo :
Pronto j podem desenhar tringulos vontade! Desenhando bitmaps Agora vamos ver uma das funes mais legais da biblioteca, a funo de desenhar bitmaps. Como exemplo para esta parte vamos desenhar a logo deste blog. Como a tela do display tem a resoluo de 8448 pixels, a imagem tem de ser deste tamanho ou menor, ento se a imagem que voc deseja exibir for maior, e normalmente ela ser, ser preciso redimensionar. E como o display monocromtico, temos de converter a imagem para preto e branco, para fazer estas duas coisas pode ser usado o editor de imagem de sua preferncia, como o Photoshop por exemplo. Para redimensionar at o Paint serve, basta abrirv a imagem no Paint, clicar em redimensionar e trocar a escala de porcentagem para pixel, desmarcar o checkbox de manter a proporo da imagem, e inserir as medidas desejadas para a imagem, sempre respeitando a resoluo da tela do display (8448 px).
Para transformar a imagem em preto e branco podemos usar o Photoshop, abra a imagem, clique em Imagem, depois em Adjustments e por ltimo em Black & White.
Na janela que ir abrir, ajustes todas as tonalidades para o mnimo:
Por fim, salve a imagem no formato bmp, e depois escolha a opo de 8 bits. A logo do site redimensionada e em preto e branco ficou assim:
Depois precisaremos de um programa para obter o cdigo bmp da imagem em hexadecimal, no site da Adafruit eles recomendam o LCDAssistant , mas em todos os testes feitos ele no gerou o cdigo correto, e a imagem produzida pelo cdigo gerado por ele, era totalmente desfigurada. O programa que funcionou corretamente foi o LCD Image Converter, que pode ser baixado aqui, infelizmente s foi encontrado verso para Windows desse programa. Abra o LCD Image Converter, v a file e depois em open, mude o tipo de arquivo de xml para images (como mostra a imagem abaixo), e abra o arquivo bmp com a imagem em preto e branco que foi feita nos pargrafos anteriores:
Depois clique em options e em seguida em conversion:
O programa tem um pequeno bug, ele inverte as cores do bitmap, ou seja, onde preto vira branco e onde branco vira preto, mas basta clicar no check box inverse, o problema resolvido e o cdigo gerado ir representar a imagem sem inverter as cores. Para gerar o cdigo em hexa da imagem, basta clicar em show preview, como mostrado na imagem abaixo:
Assim ser exibida uma janela como esta:
Na esquerda possvel ver como a imagem ser exibida no display, e na direita tem um extenso cdigo em hexa, copie este cdigo para um bloco de notas, gedit ou quaquer outro editor de textos. Agora vamos falar do cdigo do programa que desenha um bitmap. A funo usada a seguinte: display.drawBitmap(int x, int y, char[] *bitmap, int largura, int altura, int color); Onde int x e int y indicam as coordenadas da posio onde o bitmap comear a ser desenhado. O char[] *bitmap o nome da varivel que contm o cdigo em hexa do bitmap, int largura e int altura representam as dimenses da imagem, e por ltimo a cor, onde 0 branco e 1 preto (padro). Mas antes de chamar a funo temos de declar a varivel bitmap, assim: const unsigned char PROGMEM bitmat[] = { cole aqui todo o cdigo em hexa}; Podemos dizer que a varivel um vetor de char, a funo PROGMEM tambm necessria, ela usada para alocar os dados do bitmap na memria do programa, mais detalhes sobre esta funo podem ser vistos aqui. Finalmente o cdigo ficou assim: //Teste para desenhar um bitmap no Mdulo Display Nokia 5110 //www.portaldoarduino.com.br
E quando no foi marcado o check box invert no LCD Image Convert o resultado foi:
Fazendo animaes A biblioteca usada no possui nenhuma funo especfica para animao, mas usando as funes que foram vistas anteriormente possvel criar animaes, inclusive com os bitmaps (como visto no exemplo que vem na biblioteca, o pcdtest ), mas neste exemplo faremos uma animao simples com um crculo, depois vocs podem usar a criatividade para fazer outros tipos de animaes mais elaboradas. O exemplo a seguir far um crculo atravessar a tela horizontalmente da esquerda para direita, depois ir atravessar verticalmente de cima para baixo, depois horizontalmente da direita para esquerda at a metade da tela, depois verticalmente de baixo para cima at a metade da tela, depois da direta para esquerda novamente e por fim, verticalmente de baixo para cima, voltando assim ao ponto de incio. A imagem abaixo exemplifica o movimento que o crculo far:
O cdigo ficar assim: //Teste de animao com o Display Nokia 5110 //www.portaldoarduino.com.br
//atravessa a tela horizontamente da esquerda para direita void atravessaTelaDaEsquerdaParaDireita(){ for (posX; posX < (display.width() - 11); posX++){ // largura da tela menos 11 porque o raio do circulo 10 e mais um de margem de segurana delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
//atravessa a tela verticalmente de cima para baixo void atravessaTelaDeCimaParaBaixo(){ for(posY; posY < (display.height() - 11); posY++){ // altura da tela menos 11 porque o raio do circulo 10 e mais um de margem de segurana delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
//atravessa horizontalmente at a metada da tela da direita para esquerda void atravessaMetadeTelaDireitaParaEsquerda(){ for (posX; posX > (display.width() / 2); posX--){ delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
//atrevesa verticalmente de baixo para cima at a metade da tela void atravessaAteMetadeDaTelaBaixoParaCima(){ for(posY; posY > (display.height() / 2); posY--){ delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
//atravessa a tela horizontamente da direita para esquerda void atravessaTelaDireitaParaEsquerda(){ for (posX; posX > 10; posX--){ // posio X maior que dez porque este o valor do raio delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
//atravessa a tela verticalmente de baixo para cima void atravessaTelaDeBaixoParaCima(){ for(posY; posY > 10; posY--){ // posio Y maior que dez porque este o valor do raio
delay(200); display.fillCircle(posX, posY, 10, 1);//circulo preenchido de preto display.display(); display.clearDisplay(); } }
O resultado pode ser visto no vdeo (tosco rsrs) abaixo:
Vocs podem mudar a ordem de chamada das funes para ver o que acontece, podem tentar fazer este exemplo com retngulos, tringulos e at os bitmaps com as devidas adaptaes claro, basta usar a criatividade. Fazendo o tutorial deste display, lembrei-me do antigo jogo da cobrinha (Snake) dos celulares antigos da Nokia, e percebi que com o Arduino e este display possvel faze- lo, algum ai se habilita? Referncias Adafruit ArduinoLabs Bom pessoal este tutorial ficou bem grandinho, mas acaba por aqui. Dvidas, crticas, sugestes s enviar e-mail. Portal do Arduino. contato@portaldoarduino.com.br