Bez rozłączania poprzedniego układu (z DS18B20), możemy do płytki podłączyć wyświetlacz LCD. Najprościej podłączyć LCD zgodny z HD44780. Ja akurat miałem pod ręką YM1602C. Łączymy według schematu poniżej.
No dobra. Zapalamy wyświetlacz. Tylko jak? na szczęście ktoś już za nas zrobił bibliotekę do obsługi takich wyświetlaczy: μLiquidCrystal. Aha. Jest jeden problem. Jak już ściągniemy źródła, to trzeba w projekcie μLiquidCrystal zmienić framework na 4.2 (domyślnie jest 4.1 bodajże). No to start. Testujemy LCD krótkim programikiem.
var lcdProvider = new GpioLcdTransferProvider(Stm32F4Discovery.Pins.PD1, Stm32F4Discovery.Pins.PD2,
Stm32F4Discovery.Pins.PD9, Stm32F4Discovery.Pins.PD11,
Stm32F4Discovery.Pins.PD10, Stm32F4Discovery.Pins.PD8);
var lcd = new Lcd(lcdProvider);
lcd.Begin(16, 2); //columns, rows
//znaki specjalne
//http://www.quinapalus.com/hd44780udg.html
var customCharacters = new[]
{
new byte[] {0x00, 0x0a, 0x15, 0x11, 0x11, 0x0a, 0x04, 0x00}, //serce
new byte[] {0x04, 0x02, 0x01, 0x1f, 0x01, 0x02, 0x04, 0x00} //strzalka
};
//ladowanie znakow specjalnych
for (int i = 0; i < customCharacters.Length; i++)
lcd.CreateChar(i, customCharacters[i]);
lcd.Clear();
lcd.Write("* Hello World! *");
Thread.Sleep(3000);
lcd.Clear();
lcd.WriteByte(0); //pierwszy znak specjalny
Thread.Sleep(2000);
lcd.WriteByte(1); //drugi znak specjalny
Thread.Sleep(3000);
//nastepna linia
lcd.SetCursorPosition(0, 1);
lcd.Write("# Bye... #");
Pełny kot: DemoLcd
Na wyświetlaczu powinny pojawić się jakieś napisy. No niestety polskich znaków nie wyświetlimy. Jak wszystko jest OK to robimy kolejny display do termometru z poprzedniego postu. Najważniejsza jest procedura, która wyświetla temperaturę.
Na wyświetlaczu powinny pojawić się jakieś napisy. No niestety polskich znaków nie wyświetlimy. Jak wszystko jest OK to robimy kolejny display do termometru z poprzedniego postu. Najważniejsza jest procedura, która wyświetla temperaturę.
public void ShowTemperature(float temperature)
{
_lcd.SetCursorPosition(0, 0);
string txt = "Temperatura:";
int padsCnt = Columns - txt.Length;
_lcd.Write(txt + new string(' ', padsCnt));
_lcd.SetCursorPosition(0, 1);
string tempStr = temperature.ToString("F2");
padsCnt = Columns - tempStr.Length;
_lcd.Write(tempStr);
_lcd.WriteByte(0);
if (padsCnt > 0)
{
var pads = new String(' ', padsCnt);
_lcd.Write(pads);
}
}
Dodajemy jeszcze LCD do listy wyświetlaczy.
public Display()
{
var debugDisplay = new DebugDisplay();
var ledDisplay = new FourLedDisplay();
var lcd = new LcdDisplay();
_displays = new IDisplay[] {debugDisplay, ledDisplay, lcd};
}
W taki oto sposób mamy termometr z 3 wyświetlaczami: w oknie debug, na diodach z płytki i na LCD.
Pełny kot: DemoDS18B20














