1

Тема: LCD Keypad Shield

Приобрел данное устройство, но возникли вопросы:
1. где более подробно прочитать про библиотеку  для устройства?
2. как создавать меню для данного устройства? 
    Из примеров приведенных в библиотеке многое не понятно.

2

Re: LCD Keypad Shield

Вот кусочек скетча, где видно, как можно перехватить и обработать нажатие кнопки

void loop() {
  uint8_t i_1, i_2;
  clock();
  if (lcd.KeyPressed()==KEY_ENTER)
  {
    while (lcd.KeyPressed()!=0);
    i_2=Menu_Backlight.Choice();
    lcd.Backlight(i_2);
    lcd.clear();
  }
}

3

Re: LCD Keypad Shield

Вот еще



//Небольшой легкий пример использования LCD Keypad Shield в качестве простых часов с управлением подсветкой ЖК.
//В качестве, собственно, часов используется микросхема DS1307 подключенная по схеме с arduino.org

/*
  LiquidCrystal_MCP23x17 Library - Hello World
  see http://freeduino.ru for details

  sample is based on original Arduino LiquidCrystal sample
  with only difference, that we use MCP23x17-based shield
  for interfacing with LCD display
*/
//include base class code
#include <MCP23x17.h>

////For SPI version of shield we include SPI.h and MCP23S17.h:
//#include <SPI.h>
//#include <MCP23S17.h>

//For I2C version of shield we include Wire.h and MCP23017.h:
#include <Wire.h>
#include <MCP23017.h>
#include <DS1307.h>

//include the library code
#include <LiquidCrystal_MCP23x17.h>

//menu
char *MenuItems_Backlight[] = {
  "Backlight OFF",
  "Backlight ON"
};

////For SPI version of shield we create CMCP23S17 object:
//CMCP23S17 MCP;

//For I2C version of shield we create CMCP20S17 object:
CMCP23017 MCP;

//LCD object
LiquidCrystal_MCP23x17 lcd;

//Menu objects
LCDMenu Menu_Backlight;

void setup() {
//  //For SPI version of shield we configure SPI bus, and MCP object with CS line (10) and address (0)
//  SPI.begin();
//  MCP.init(10, 0);

  //For I2C version of shield we configure I2C bus, and MCP object with address (0)
  Wire.begin();      //TWBR = 12;  // <- uncomment this for 400kHz I2C
  MCP.init(0);

  //here we configure LCD object to work through specified MCP object
  lcd.init(MCP);
  //...and turn off backlight
  lcd.Backlight(0);

  //...all the following code will be the same for original LiquidCrystal library and MCP23x17-based

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  //lcd.print("hello, world!");
  Menu_Backlight.init(lcd, MenuItems_Backlight, 2);

  //clock для первого запуска часов раскомментируйте, установите время, затем закомментируйте обратно, иначе часы будут установлены в эти значения каждый раз
//   RTC.stop();
//  RTC.set(DS1307_SEC,1);        //set the seconds
//  RTC.set(DS1307_MIN,51);     //set the minutes
//  RTC.set(DS1307_HR,15);       //set the hours
//  RTC.set(DS1307_DOW,1);       //set the day of the week
//  RTC.set(DS1307_DATE,14);       //set the date
//  RTC.set(DS1307_MTH,5);        //set the month
//  RTC.set(DS1307_YR,12);         //set the year
//  RTC.start();

}
void clock(){
   // вывод даты в верхнюю строку.
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 0);
  lcd.print(RTC.get(DS1307_DATE,false))+lcd.print(".")+lcd.print(RTC.get(DS1307_MTH,false))+lcd.print(".")+lcd.print(RTC.get(DS1307_YR,true));

  lcd.setCursor(0, 1);
  //Добавляем ноль перед цифрой минут, секунд, что бы было удобнее смотреть
  lcd.print(RTC.get(DS1307_HR,true))+lcd.print(":");
  if (RTC.get(DS1307_MIN,false)<10)
  {lcd.print("0")+lcd.print(RTC.get(DS1307_MIN,true))+lcd.print(":");} else {lcd.print(RTC.get(DS1307_MIN,true))+lcd.print(":");}
  if (RTC.get(DS1307_SEC,false)<10)
    {lcd.print("0")+lcd.print(RTC.get(DS1307_SEC,false));}
    else { lcd.print(RTC.get(DS1307_SEC,false));}
}

void loop() {
  uint8_t i_2;
  clock();// подпрограмма вывода времени,
  if (lcd.KeyPressed()==KEY_ENTER) //при нажатии кнопки enter вызываем меню управления подсветкой
  {
    while (lcd.KeyPressed()!=0);
    i_2=Menu_Backlight.Choice();
    lcd.Backlight(i_2);
    lcd.clear();
  }
}

4

Re: LCD Keypad Shield

Добрый день!
Спрошу в этой теме.
Имеется модуль LCD версия SPI.
При попытке компиляции примера HelloWorld_SPI выдаются ошибки:

Arduino: 1.5.7 (Windows 7), Board: "Arduino Uno"

Build options changed, rebuilding all

D:\Arduino-My\Sketchbook\libraries\LiquidCrystal_MCP23x17\LiquidCrystal_MCP23x17.cpp:25:15: error: 'prog_uchar' does not name a type
PROGMEM const prog_uchar _utf8_ru_table[] =
               ^
In file included from D:\arduino-1.5.7\hardware\arduino\avr\cores\arduino/WString.h:29:0,
                 from D:\arduino-1.5.7\hardware\arduino\avr\cores\arduino/Print.h:26,
                 from D:\Arduino-My\Sketchbook\libraries\LiquidCrystal_MCP23x17/LiquidCrystal_MCP23x17.h:11,
                 from D:\Arduino-My\Sketchbook\libraries\LiquidCrystal_MCP23x17\LiquidCrystal_MCP23x17.cpp:7:
D:\Arduino-My\Sketchbook\libraries\LiquidCrystal_MCP23x17\LiquidCrystal_MCP23x17.cpp: In member function 'virtual size_t LiquidCrystal_MCP23x17::write(uint8_t)':
D:\Arduino-My\Sketchbook\libraries\LiquidCrystal_MCP23x17\LiquidCrystal_MCP23x17.cpp:345:34: error: '_utf8_ru_table' was not declared in this scope
       value = pgm_read_byte_near(_utf8_ru_table + _utf8_ru_hi_bit + value);
                                  ^

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.

Что нужно поправить?

С уважением,
Андрей

5 (2016-02-04 15:47:33 отредактировано Anwi)

Re: LCD Keypad Shield

Нашел решение сам. Может еще кому пригодится.

В файле библиотеки дисплея LiquidCrystal_MCP23x17.cpp находим строку:
PROGMEM const prog_uchar _utf8_ru_table[] =
и меняем на:
PROGMEM const unsigned char _utf8_ru_table[] =

Перезапускаем Arduino IDE. Все должно заработать.

С уважением,
Андрей