sábado, 27 de julho de 2013

μLiquidCrystal: uma biblioteca universal para LCD's

Primeiramente gostaria de informar aos navegantes das terras do Netduino que eu estou vivo ainda, muito embora debilitado pela falta de tempo ainda companho vagamente os post's no fórum do Netduino que continua sendo uma grande fonte di informação e de perspectivas para novos projetos.

Nesse grande feriado papal a minha única alternativa foi me debruçar nos meus projetos pessoais... Esta semana tinha recebido a ligação de um amigo meu que tinha solicitado um projeto de medição de pressão, que nunca foi concluído por mero descuido meu.

Pegando a placa novamente pude perceber que o estádio de desenvolvimento era bom mas como todo bom engenheiro perdi o tal do código, ou seja, começar tudo outra vez...  Iniciando pelo inicio mesmo, como piscar o LED com Netduino... E como tinha de ser tive que reaprender muitas coisas entre elas a usar o LCD 16x2. A primeira coisa que fiz foi tentar ligar o Netduino depois escreve algo no LCD mas pasmem não consegui... não estava como tinha postado no Blog...

Depois de pesquisar por incessantes 3 horas percebi que tinha usado μLiquidCrystal. Trata-se de um abiblioteca especialmente feita para  interfacear com dispositivos de LCD com o Netduino que está disponível no CodePlex desde 2010.

Qual a grande vantagem dela? Simples, não precisa de nenhum periférico a mais apenas uma ligação direta com o LCD 16x2 sem nenhum periférico, o sonho de qualquer entusiasta. O artigo que encontrei primeiramente foi este: Netduino - Getting Started with LCD do Blog do Jeroen Swart. Depois investiguei mais um pouco e cheguei na Ligação que ele utilizou proveniente do artigo base do Arduino, que está aqui abaixo:

Quando eu li o artigo do Blog do Szymon Kobalczyk's, a primeira impressão que tive era que tratava-se de uma DLL para usar o HD44780 como interface serial/paralela, mas a DLL faz muito mais que isso.

O Resultado de testes está na foto abaixo que tirei ontem a noite  do código funcionando na Placa do Netduino Plus. A única dificuldade que tive é foi para fazer funcionar no Netduino Plus, porque a compilação que está no site (ou melhor, a solução com código fonte que você mesmo compila) foi feita para o Netduino com .NETMF 4.1... A primeira vez dava um erro e não debugava muito embora a compilação da solução fosse feita normalmente... o que me deixou inicialmente bem confuso. Ajustei o .NETMF da solução do MicroLiquidCrystal para 4.2 e nada...

A ultima alternativa foi aplicar o método lusitando e refazer a solução para o Netduino Plus incluindo todos os arquivos da solução convencional do MicroLiquidCrystal e funcionou ! A foto do deste está abaixo:


O código de teste está logo abaixo, veja que você pode configurar cada pino do LCD para ficar em uma IO diferente e o código gerencia tudo isso sozinho, mas fácil que isso impossível.

1:  using System;  
2:  using MicroLiquidCrystal;  
3:  using System.Net;  
4:  using System.Net.Sockets;  
5:  using System.Threading;  
6:  using Microsoft.SPOT;  
7:  using Microsoft.SPOT.Hardware;  
8:  using SecretLabs.NETMF.Hardware;  
9:  using SecretLabs.NETMF.Hardware.NetduinoPlus;  
10:  namespace N__LCD16x2  
11:  {  
12:    public class Program  
13:    {  
14:      public static void Main()  
15:      {  
16:        // write your code here  
17:        // create the transfer provider, use direct GPIO provider  
18:        // Initialize the library with the numbers of the interface pins  
19:        //// Use wiring shown here http://arduino.cc/en/uploads/Tutorial/lcd_schem.png  
20:        var lcdProvider = new GpioLcdTransferProvider(Pins.GPIO_PIN_D12,  // RS  
21:                                Pins.GPIO_PIN_D11,  // ENABLE  
22:                                Pins.GPIO_PIN_D5,   // D4  
23:                                Pins.GPIO_PIN_D4,   // D5  
24:                                Pins.GPIO_PIN_D3,   // D6  
25:                                Pins.GPIO_PIN_D2);  // D7  
26:        // create the LCD interface  
27:        var lcd = new Lcd(lcdProvider);  
28:        // set up the LCD's number of columns and rows:   
29:        lcd.Begin(20, 2);  
30:        // print a message to the LCD.  
31:        lcd.Write("Sonhando com Net!");  
32:        OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);  
33:        while (true)  
34:        {  
35:          // set the cursor to the first column on the second line  
36:          lcd.SetCursorPosition(0, 1);  
37:          // print the number of milliseconds since reset:  
38:          lcd.Write((Utility.GetMachineTime().Ticks / 10000).ToString());  
39:          //Liga  
40:          led.Write(true);  
41:          Thread.Sleep(1000);  
42:          //desliga  
43:          led.Write(false);  
44:          Thread.Sleep(1500);  
45:        }  
46:      }  
47:    }  
48:  }  

Para baixar o código fonte para Netduino Plus clique aqui.

Nenhum comentário:

Postar um comentário