Přeskočit na hlavní obsah

How To: LCD modul

LCD modul poskytuje jednoduchý způsob, jak zobrazit potřebné informace bez připojení k počítači nebo jakékoli síti. Jde o zařízení s extrémně nízkou spotřebou, takže jeho použití by vám nemělo způsobovat problémy ani při napájení z baterií.

Odkazy

info

Pro psaní a vykreslování na LCD jsou dostupné funkce, ale my máme pokročilejší řešení pomocí knihovny GFX.

Většina funkcí LCD používá knihovnu GFX interně, takže ji můžete používat i přímo.

Vše, co musíte pro práci s LCD udělat, je inicializace. Po ní můžete začít používat knihovnu GFX.

Napájení LCD modulu

Modul lze zapnout a vypnout kvůli úspoře energie (většinou se to používá k prodloužení výdrže baterií).

Pro správu napájení jsou dostupné dvě funkce

  • twr_module_lcd_on()
  • twr_module_lcd_off()
caution

Po vypnutí LCD musíte zavolat twr_module_lcd_on(), protože volání jakékoli funkce draw nebo update LCD znovu nezapne.

LED integrované v LCD

LCD obsahuje 6 malých RGB LED.

Můžete je ovládat standardními funkcemi twr_led_* ze SDK hned po získání jejich driveru.

Pro získání driveru musíte použít funkci const twr_led_driver_t* twr_module_lcd_get_led_driver(void), která vrací ukazatel na driver. Poté musíte inicializovat virtuální LED pomocí void twr_led_init_virtual(twr_led_t *self, int channel, const twr_led_driver_t *driver, int idle_state).

Parametr channel odpovídá barvě LED:

  • 0 je ČERVENÉ světlo
  • 1 je ZELENÉ světlo
  • 2 je MODRÉ světlo

Parametr idle_state nastavuje výchozí chování zapnuto/vypnuto.

  • 0 znamená, že LED jsou výchozím stavem zapnuté
  • 1 znamená, že LED jsou výchozím stavem vypnuté
info

Tento příklad vypíše na displej text a po stisknutí jakéhokoli tlačítka LCD rozsvítí LED na LCD modrou barvou po dobu 1500 milisekund.

Příklad kódu pro LED na LCD

#include <application.h>

twr_button_t button;
twr_led_t lcdLed;

twr_gfx_t *pgfx;

void button_event_handler(twr_button_t *self, twr_button_event_t event, void *event_param)
{
(void) self;
(void) event_param;

if (event == TWR_BUTTON_EVENT_PRESS)
{
twr_led_pulse(&lcdLed, 1500);

char hello[6] = "Hello";
twr_gfx_draw_string(pgfx, 10, 5, hello, true);
twr_gfx_draw_line(pgfx, 0, 21, 128, 23, true);

twr_gfx_update(pgfx);
}
}

void application_init(void)
{
twr_button_init(&button, TWR_GPIO_BUTTON, TWR_GPIO_PULL_DOWN, false);
twr_button_set_event_handler(&button, button_event_handler, NULL);

const twr_led_driver_t* driver = twr_module_lcd_get_led_driver();
twr_led_init_virtual(&lcdLed, TWR_MODULE_LCD_LED_BLUE, driver, 1);

twr_module_lcd_init();
pgfx = twr_module_lcd_get_gfx();
twr_gfx_set_font(pgfx, &twr_font_ubuntu_15);
}

Tlačítka LCD

info

V tomto příkladu budeme zapínat a vypínat LED integrované v LCD a rozblikáme je.

Zapnete je stisknutím levého tlačítka a vypnete je stisknutím pravého tlačítka.

Pokud podržíte obě tlačítka, LED budou rychle blikat.

Příklad kódu pro tlačítka LCD

#include <application.h>

twr_led_t lcdLed;

void lcd_event_handler(twr_module_lcd_event_t event, void *param)
{
(void) param;

if (event == TWR_MODULE_LCD_EVENT_LEFT_CLICK)
{
twr_led_set_mode(&lcdLed, TWR_LED_MODE_ON);
}
else if (event == TWR_MODULE_LCD_EVENT_RIGHT_CLICK)
{
twr_led_set_mode(&lcdLed, TWR_LED_MODE_OFF);
}
else if (event == TWR_MODULE_LCD_EVENT_BOTH_HOLD)
{
twr_led_set_mode(&lcdLed, TWR_LED_MODE_BLINK_FAST);
}
}

void application_init(void)
{
const twr_led_driver_t* driver = twr_module_lcd_get_led_driver();
twr_led_init_virtual(&lcdLed, 2, driver, 1);

twr_led_set_mode(&lcdLed, TWR_LED_MODE_OFF);
twr_led_pulse(&lcdLed, 1000);

twr_module_lcd_init();
twr_module_lcd_set_event_handler(lcd_event_handler, NULL);
}