Replaced LiquidCrystal_I2C lib with newer version which was reported to have worked on the arduino forum - ref http://forum.arduino.cc/index.php?topic=310743.msg2186521#msg2186521
This commit is contained in:
parent
f92015b9f4
commit
14b59151dd
|
@ -1,7 +1,10 @@
|
||||||
|
// LiquidCrystal_I2C V2.0
|
||||||
|
|
||||||
#include "LiquidCrystal_I2C.h"
|
#include "LiquidCrystal_I2C.h"
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <Arduino.h>
|
#include "Wire.h"
|
||||||
#include <Wire.h>
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
|
||||||
// When the display powers up, it is configured as follows:
|
// When the display powers up, it is configured as follows:
|
||||||
//
|
//
|
||||||
|
@ -22,32 +25,40 @@
|
||||||
// can't assume that its in that state when a sketch starts (and the
|
// can't assume that its in that state when a sketch starts (and the
|
||||||
// LiquidCrystal constructor is called).
|
// LiquidCrystal constructor is called).
|
||||||
|
|
||||||
LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize)
|
LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows)
|
||||||
{
|
{
|
||||||
_addr = lcd_addr;
|
_Addr = lcd_Addr;
|
||||||
_cols = lcd_cols;
|
_cols = lcd_cols;
|
||||||
_rows = lcd_rows;
|
_rows = lcd_rows;
|
||||||
_charsize = charsize;
|
_backlightval = LCD_NOBACKLIGHT;
|
||||||
_backlightval = LCD_BACKLIGHT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiquidCrystal_I2C::begin() {
|
void LiquidCrystal_I2C::init(){
|
||||||
|
init_priv();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiquidCrystal_I2C::init_priv()
|
||||||
|
{
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
|
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
|
||||||
|
begin(_cols, _rows);
|
||||||
|
}
|
||||||
|
|
||||||
if (_rows > 1) {
|
void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) {
|
||||||
|
if (lines > 1) {
|
||||||
_displayfunction |= LCD_2LINE;
|
_displayfunction |= LCD_2LINE;
|
||||||
}
|
}
|
||||||
|
_numlines = lines;
|
||||||
|
|
||||||
// for some 1 line displays you can select a 10 pixel high font
|
// for some 1 line displays you can select a 10 pixel high font
|
||||||
if ((_charsize != 0) && (_rows == 1)) {
|
if ((dotsize != 0) && (lines == 1)) {
|
||||||
_displayfunction |= LCD_5x10DOTS;
|
_displayfunction |= LCD_5x10DOTS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
|
// SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
|
||||||
// according to datasheet, we need at least 40ms after power rises above 2.7V
|
// according to datasheet, we need at least 40ms after power rises above 2.7V
|
||||||
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
|
// before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50
|
||||||
delay(50);
|
delayMicroseconds(50000);
|
||||||
|
|
||||||
// Now we pull both RS and R/W low to begin commands
|
// Now we pull both RS and R/W low to begin commands
|
||||||
expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1)
|
expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1)
|
||||||
|
@ -58,19 +69,20 @@ void LiquidCrystal_I2C::begin() {
|
||||||
// figure 24, pg 46
|
// figure 24, pg 46
|
||||||
|
|
||||||
// we start in 8bit mode, try to set 4 bit mode
|
// we start in 8bit mode, try to set 4 bit mode
|
||||||
write4bits(0x03 << 4);
|
write4bits(0x03);
|
||||||
delayMicroseconds(4500); // wait min 4.1ms
|
delayMicroseconds(4500); // wait min 4.1ms
|
||||||
|
|
||||||
// second try
|
// second try
|
||||||
write4bits(0x03 << 4);
|
write4bits(0x03);
|
||||||
delayMicroseconds(4500); // wait min 4.1ms
|
delayMicroseconds(4500); // wait min 4.1ms
|
||||||
|
|
||||||
// third go!
|
// third go!
|
||||||
write4bits(0x03 << 4);
|
write4bits(0x03);
|
||||||
delayMicroseconds(150);
|
delayMicroseconds(150);
|
||||||
|
|
||||||
// finally, set to 4-bit interface
|
// finally, set to 4-bit interface
|
||||||
write4bits(0x02 << 4);
|
write4bits(0x02);
|
||||||
|
|
||||||
|
|
||||||
// set # lines, font size, etc.
|
// set # lines, font size, etc.
|
||||||
command(LCD_FUNCTIONSET | _displayfunction);
|
command(LCD_FUNCTIONSET | _displayfunction);
|
||||||
|
@ -89,8 +101,11 @@ void LiquidCrystal_I2C::begin() {
|
||||||
command(LCD_ENTRYMODESET | _displaymode);
|
command(LCD_ENTRYMODESET | _displaymode);
|
||||||
|
|
||||||
home();
|
home();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/********** high level commands, for the user! */
|
/********** high level commands, for the user! */
|
||||||
void LiquidCrystal_I2C::clear(){
|
void LiquidCrystal_I2C::clear(){
|
||||||
command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero
|
command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero
|
||||||
|
@ -104,8 +119,8 @@ void LiquidCrystal_I2C::home(){
|
||||||
|
|
||||||
void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
|
void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){
|
||||||
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
|
int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
|
||||||
if (row > _rows) {
|
if ( row > _numlines ) {
|
||||||
row = _rows-1; // we count rows starting w/0
|
row = _numlines-1; // we count rows starting w/0
|
||||||
}
|
}
|
||||||
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
|
command(LCD_SETDDRAMADDR | (col + row_offsets[row]));
|
||||||
}
|
}
|
||||||
|
@ -193,6 +208,8 @@ void LiquidCrystal_I2C::backlight(void) {
|
||||||
expanderWrite(0);
|
expanderWrite(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********** mid level commands, for sending data/cmds */
|
/*********** mid level commands, for sending data/cmds */
|
||||||
|
|
||||||
inline void LiquidCrystal_I2C::command(uint8_t value) {
|
inline void LiquidCrystal_I2C::command(uint8_t value) {
|
||||||
|
@ -201,15 +218,17 @@ inline void LiquidCrystal_I2C::command(uint8_t value) {
|
||||||
|
|
||||||
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
|
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
|
||||||
send(value, Rs);
|
send(value, Rs);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/************ low level data pushing commands **********/
|
/************ low level data pushing commands **********/
|
||||||
|
|
||||||
// write either command or data
|
// write either command or data
|
||||||
void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) {
|
void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) {
|
||||||
uint8_t highnib=value&0xf0;
|
uint8_t highnib=value>>4;
|
||||||
uint8_t lownib=(value<<4)&0xf0;
|
uint8_t lownib=value & 0x0F;
|
||||||
write4bits((highnib)|mode);
|
write4bits((highnib)|mode);
|
||||||
write4bits((lownib)|mode);
|
write4bits((lownib)|mode);
|
||||||
}
|
}
|
||||||
|
@ -220,7 +239,7 @@ void LiquidCrystal_I2C::write4bits(uint8_t value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiquidCrystal_I2C::expanderWrite(uint8_t _data){
|
void LiquidCrystal_I2C::expanderWrite(uint8_t _data){
|
||||||
Wire.beginTransmission(_addr);
|
Wire.beginTransmission(_Addr);
|
||||||
Wire.write((int)(_data) | _backlightval);
|
Wire.write((int)(_data) | _backlightval);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
}
|
}
|
||||||
|
@ -233,14 +252,33 @@ void LiquidCrystal_I2C::pulseEnable(uint8_t _data){
|
||||||
delayMicroseconds(50); // commands need > 37us to settle
|
delayMicroseconds(50); // commands need > 37us to settle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Alias functions
|
||||||
|
|
||||||
|
void LiquidCrystal_I2C::cursor_on(){
|
||||||
|
cursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiquidCrystal_I2C::cursor_off(){
|
||||||
|
noCursor();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiquidCrystal_I2C::blink_on(){
|
||||||
|
blink();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LiquidCrystal_I2C::blink_off(){
|
||||||
|
noBlink();
|
||||||
|
}
|
||||||
|
|
||||||
void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){
|
void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){
|
||||||
createChar(char_num, rows);
|
createChar(char_num, rows);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LiquidCrystal_I2C::setBacklight(uint8_t new_val){
|
void LiquidCrystal_I2C::setBacklight(uint8_t new_val){
|
||||||
if (new_val) {
|
if(new_val){
|
||||||
backlight(); // turn backlight on
|
backlight(); // turn backlight on
|
||||||
} else {
|
}else{
|
||||||
noBacklight(); // turn backlight off
|
noBacklight(); // turn backlight off
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,3 +288,17 @@ void LiquidCrystal_I2C::printstr(const char c[]){
|
||||||
//it's here so the user sketch doesn't have to be changed
|
//it's here so the user sketch doesn't have to be changed
|
||||||
print(c);
|
print(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// unsupported API functions
|
||||||
|
void LiquidCrystal_I2C::off(){}
|
||||||
|
void LiquidCrystal_I2C::on(){}
|
||||||
|
void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {}
|
||||||
|
uint8_t LiquidCrystal_I2C::status(){return 0;}
|
||||||
|
uint8_t LiquidCrystal_I2C::keypad (){return 0;}
|
||||||
|
uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;}
|
||||||
|
void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){}
|
||||||
|
void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){}
|
||||||
|
void LiquidCrystal_I2C::setContrast(uint8_t new_val){}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#ifndef FDB_LIQUID_CRYSTAL_I2C_H
|
// LiquidCrystal_I2C V2.0
|
||||||
#define FDB_LIQUID_CRYSTAL_I2C_H
|
|
||||||
|
#ifndef LiquidCrystal_I2C_h
|
||||||
|
#define LiquidCrystal_I2C_h
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <Print.h>
|
#include "Print.h"
|
||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
// commands
|
// commands
|
||||||
#define LCD_CLEARDISPLAY 0x01
|
#define LCD_CLEARDISPLAY 0x01
|
||||||
|
@ -43,82 +46,25 @@
|
||||||
#define LCD_5x8DOTS 0x00
|
#define LCD_5x8DOTS 0x00
|
||||||
|
|
||||||
// flags for backlight control
|
// flags for backlight control
|
||||||
#define LCD_BACKLIGHT 0x08
|
#define LCD_BACKLIGHT 0x00
|
||||||
#define LCD_NOBACKLIGHT 0x00
|
#define LCD_NOBACKLIGHT 0x80
|
||||||
|
|
||||||
#define En B00000100 // Enable bit
|
#define En B00010000 // Enable bit
|
||||||
#define Rw B00000010 // Read/Write bit
|
#define Rw B00100000 // Read/Write bit
|
||||||
#define Rs B00000001 // Register select bit
|
#define Rs B01000000 // Register select bit
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the driver for the Liquid Crystal LCD displays that use the I2C bus.
|
|
||||||
*
|
|
||||||
* After creating an instance of this class, first call begin() before anything else.
|
|
||||||
* The backlight is on by default, since that is the most likely operating mode in
|
|
||||||
* most cases.
|
|
||||||
*/
|
|
||||||
class LiquidCrystal_I2C : public Print {
|
class LiquidCrystal_I2C : public Print {
|
||||||
public:
|
public:
|
||||||
/**
|
LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);
|
||||||
* Constructor
|
void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS );
|
||||||
*
|
|
||||||
* @param lcd_addr I2C slave address of the LCD display. Most likely printed on the
|
|
||||||
* LCD circuit board, or look in the supplied LCD documentation.
|
|
||||||
* @param lcd_cols Number of columns your LCD display has.
|
|
||||||
* @param lcd_rows Number of rows your LCD display has.
|
|
||||||
* @param charsize The size in dots that the display has, use LCD_5x10DOTS or LCD_5x8DOTS.
|
|
||||||
*/
|
|
||||||
LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the LCD display in the correct begin state, must be called before anything else is done.
|
|
||||||
*/
|
|
||||||
void begin();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove all the characters currently shown. Next print/write operation will start
|
|
||||||
* from the first position on LCD display.
|
|
||||||
*/
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
/**
|
|
||||||
* Next print/write operation will will start from the first position on the LCD display.
|
|
||||||
*/
|
|
||||||
void home();
|
void home();
|
||||||
|
|
||||||
/**
|
|
||||||
* Do not show any characters on the LCD display. Backlight state will remain unchanged.
|
|
||||||
* Also all characters written on the display will return, when the display in enabled again.
|
|
||||||
*/
|
|
||||||
void noDisplay();
|
void noDisplay();
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the characters on the LCD display, this is the normal behaviour. This method should
|
|
||||||
* only be used after noDisplay() has been used.
|
|
||||||
*/
|
|
||||||
void display();
|
void display();
|
||||||
|
|
||||||
/**
|
|
||||||
* Do not blink the cursor indicator.
|
|
||||||
*/
|
|
||||||
void noBlink();
|
void noBlink();
|
||||||
|
|
||||||
/**
|
|
||||||
* Start blinking the cursor indicator.
|
|
||||||
*/
|
|
||||||
void blink();
|
void blink();
|
||||||
|
|
||||||
/**
|
|
||||||
* Do not show a cursor indicator.
|
|
||||||
*/
|
|
||||||
void noCursor();
|
void noCursor();
|
||||||
|
|
||||||
/**
|
|
||||||
* Show a cursor indicator, cursor can blink on not blink. Use the
|
|
||||||
* methods blink() and noBlink() for changing cursor blink.
|
|
||||||
*/
|
|
||||||
void cursor();
|
void cursor();
|
||||||
|
|
||||||
void scrollDisplayLeft();
|
void scrollDisplayLeft();
|
||||||
void scrollDisplayRight();
|
void scrollDisplayRight();
|
||||||
void printLeft();
|
void printLeft();
|
||||||
|
@ -135,30 +81,43 @@ public:
|
||||||
void setCursor(uint8_t, uint8_t);
|
void setCursor(uint8_t, uint8_t);
|
||||||
virtual size_t write(uint8_t);
|
virtual size_t write(uint8_t);
|
||||||
void command(uint8_t);
|
void command(uint8_t);
|
||||||
|
void init();
|
||||||
|
|
||||||
inline void blink_on() { blink(); }
|
////compatibility API function aliases
|
||||||
inline void blink_off() { noBlink(); }
|
void blink_on(); // alias for blink()
|
||||||
inline void cursor_on() { cursor(); }
|
void blink_off(); // alias for noBlink()
|
||||||
inline void cursor_off() { noCursor(); }
|
void cursor_on(); // alias for cursor()
|
||||||
|
void cursor_off(); // alias for noCursor()
|
||||||
|
void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight()
|
||||||
|
void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar()
|
||||||
|
void printstr(const char[]);
|
||||||
|
|
||||||
|
////Unsupported API functions (not implemented in this library)
|
||||||
|
uint8_t status();
|
||||||
|
void setContrast(uint8_t new_val);
|
||||||
|
uint8_t keypad();
|
||||||
|
void setDelay(int,int);
|
||||||
|
void on();
|
||||||
|
void off();
|
||||||
|
uint8_t init_bargraph(uint8_t graphtype);
|
||||||
|
void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end);
|
||||||
|
void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end);
|
||||||
|
|
||||||
// Compatibility API function aliases
|
|
||||||
void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight()
|
|
||||||
void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar()
|
|
||||||
void printstr(const char[]);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void init_priv();
|
||||||
void send(uint8_t, uint8_t);
|
void send(uint8_t, uint8_t);
|
||||||
void write4bits(uint8_t);
|
void write4bits(uint8_t);
|
||||||
void expanderWrite(uint8_t);
|
void expanderWrite(uint8_t);
|
||||||
void pulseEnable(uint8_t);
|
void pulseEnable(uint8_t);
|
||||||
uint8_t _addr;
|
uint8_t _Addr;
|
||||||
uint8_t _displayfunction;
|
uint8_t _displayfunction;
|
||||||
uint8_t _displaycontrol;
|
uint8_t _displaycontrol;
|
||||||
uint8_t _displaymode;
|
uint8_t _displaymode;
|
||||||
|
uint8_t _numlines;
|
||||||
uint8_t _cols;
|
uint8_t _cols;
|
||||||
uint8_t _rows;
|
uint8_t _rows;
|
||||||
uint8_t _charsize;
|
|
||||||
uint8_t _backlightval;
|
uint8_t _backlightval;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // FDB_LIQUID_CRYSTAL_I2C_H
|
#endif
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
# Installation #
|
|
||||||
Create a new folder called "LiquidCrystal_I2C" under the folder named "libraries" in your Arduino sketchbook folder.
|
|
||||||
Create the folder "libraries" in case it does not exist yet. Place all the files in the "LiquidCrystal_I2C" folder.
|
|
||||||
|
|
||||||
# Usage #
|
|
||||||
To use the library in your own sketch, select it from *Sketch > Import Library*.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------------
|
|
||||||
This library is based on work done by DFROBOT (www.dfrobot.com).
|
|
||||||
|
|
||||||
File supplied by @swe-dude on the Arduino forum, and reported to be working with Maple mini
|
|
|
@ -1,32 +0,0 @@
|
||||||
#include <Wire.h>
|
|
||||||
#include <LiquidCrystal_I2C.h>
|
|
||||||
|
|
||||||
// Set the LCD address to 0x27 for a 16 chars and 2 line display
|
|
||||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
||||||
|
|
||||||
void setup()
|
|
||||||
{
|
|
||||||
// initialize the LCD
|
|
||||||
lcd.begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
void loop()
|
|
||||||
{
|
|
||||||
bool blinking = true;
|
|
||||||
lcd.cursor();
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
if (blinking) {
|
|
||||||
lcd.clear();
|
|
||||||
lcd.print("No cursor blink");
|
|
||||||
lcd.noBlink();
|
|
||||||
blinking = false;
|
|
||||||
} else {
|
|
||||||
lcd.clear();
|
|
||||||
lcd.print("Cursor blink");
|
|
||||||
lcd.blink();
|
|
||||||
blinking = true;
|
|
||||||
}
|
|
||||||
delay(4000);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +1,20 @@
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <LiquidCrystal_I2C.h>
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
|
||||||
uint8_t bell[8] = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4};
|
uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
|
||||||
uint8_t note[8] = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 0x0};
|
uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
|
||||||
uint8_t clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};
|
uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
|
||||||
uint8_t heart[8] = {0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0};
|
uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0};
|
||||||
uint8_t duck[8] = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 0x0};
|
uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0};
|
||||||
uint8_t check[8] = {0x0, 0x1 ,0x3, 0x16, 0x1c, 0x8, 0x0};
|
uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0};
|
||||||
uint8_t cross[8] = {0x0, 0x1b, 0xe, 0x4, 0xe, 0x1b, 0x0};
|
uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0};
|
||||||
uint8_t retarrow[8] = { 0x1, 0x1, 0x5, 0x9, 0x1f, 0x8, 0x4};
|
uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4};
|
||||||
|
|
||||||
// Set the LCD address to 0x27 for a 16 chars and 2 line display
|
LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
|
||||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
lcd.begin();
|
lcd.init(); // initialize the lcd
|
||||||
lcd.backlight();
|
lcd.backlight();
|
||||||
|
|
||||||
lcd.createChar(0, bell);
|
lcd.createChar(0, bell);
|
||||||
|
@ -35,24 +34,21 @@ void setup()
|
||||||
lcd.print(" arduinos!");
|
lcd.print(" arduinos!");
|
||||||
delay(5000);
|
delay(5000);
|
||||||
displayKeyCodes();
|
displayKeyCodes();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// display all keycodes
|
// display all keycodes
|
||||||
void displayKeyCodes(void) {
|
void displayKeyCodes(void) {
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
lcd.print("Codes 0x");
|
lcd.print("Codes 0x"); lcd.print(i, HEX);
|
||||||
lcd.print(i, HEX);
|
lcd.print("-0x"); lcd.print(i+16, HEX);
|
||||||
lcd.print("-0x");
|
|
||||||
lcd.print(i + 16, HEX);
|
|
||||||
lcd.setCursor(0, 1);
|
lcd.setCursor(0, 1);
|
||||||
|
for (int j=0; j<16; j++) {
|
||||||
for (int j = 0; j < 16; j++) {
|
lcd.write(i+j);
|
||||||
lcd.write(i + j);
|
|
||||||
}
|
}
|
||||||
i += 16;
|
i+=16;
|
||||||
|
|
||||||
delay(4000);
|
delay(4000);
|
||||||
}
|
}
|
||||||
|
@ -60,6 +56,5 @@ void displayKeyCodes(void) {
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// Do nothing here...
|
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,20 +1,17 @@
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <LiquidCrystal_I2C.h>
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
|
||||||
// Set the LCD address to 0x27 for a 16 chars and 2 line display
|
LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
|
||||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
// initialize the LCD
|
lcd.init(); // initialize the lcd
|
||||||
lcd.begin();
|
|
||||||
|
|
||||||
// Turn on the blacklight and print a message.
|
// Print a message to the LCD.
|
||||||
lcd.backlight();
|
lcd.backlight();
|
||||||
lcd.print("Hello, world!");
|
lcd.print("Hello, world!");
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// Do nothing here...
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
|
||||||
|
LiquidCrystal_I2C lcd1(0x20,16,2); // set the LCD address of the first lcd to 0x20 for a 16 chars and 2 line display
|
||||||
|
LiquidCrystal_I2C lcd2(0x21,16,2); // set the LCD address of the second lcd to 0x21 for a 16 chars and 2 line display
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
lcd1.init(); // initialize the first lcd
|
||||||
|
lcd2.init(); // initialize the second lcd
|
||||||
|
|
||||||
|
// Print a message on the first LCD.
|
||||||
|
lcd1.backlight();
|
||||||
|
lcd1.print("Hello, #1 world!");
|
||||||
|
|
||||||
|
// Print a message on the second LCD.
|
||||||
|
lcd2.backlight();
|
||||||
|
lcd2.print("Hello, #2 world!");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
}
|
|
@ -1,33 +1,30 @@
|
||||||
/**
|
/*
|
||||||
* Displays text sent over the serial port (e.g. from the Serial Monitor) on
|
* Displays text sent over the serial port (e.g. from the Serial Monitor) on
|
||||||
* an attached LCD.
|
* an attached LCD.
|
||||||
*/
|
*/
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include <LiquidCrystal_I2C.h>
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
|
||||||
// Set the LCD address to 0x27 for a 16 chars and 2 line display
|
LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
|
||||||
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
lcd.begin();
|
lcd.init(); // initialize the lcd
|
||||||
lcd.backlight();
|
lcd.backlight();
|
||||||
|
|
||||||
// Initialize the serial port at a speed of 9600 baud
|
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
// If characters arrived over the serial port...
|
// when characters arrive over the serial port...
|
||||||
if (Serial.available()) {
|
if (Serial.available()) {
|
||||||
// Wait a bit for the entire message to arrive
|
// wait a bit for the entire message to arrive
|
||||||
delay(100);
|
delay(100);
|
||||||
// Clear the screen
|
// clear the screen
|
||||||
lcd.clear();
|
lcd.clear();
|
||||||
|
// read all the available characters
|
||||||
// Write all characters received with the serial port to the LCD.
|
|
||||||
while (Serial.available() > 0) {
|
while (Serial.available() > 0) {
|
||||||
|
// display each character to the LCD
|
||||||
lcd.write(Serial.read());
|
lcd.write(Serial.read());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 457 KiB |
|
@ -0,0 +1,55 @@
|
||||||
|
Notes for users with a Pollin.de interface board
|
||||||
|
http://www.pollin.de/shop/dt/NDU4OTgxOTk-/Bausaetze_Module/Bausaetze/LCD_I2C_Modul.html
|
||||||
|
|
||||||
|
The pollin interface board will not work with de default library.
|
||||||
|
To get it working two control lines to the LCD need to be changed.
|
||||||
|
|
||||||
|
Open file "LiquidCrystal_I2C.h" with a text editor like Notepad (not WordPad !)
|
||||||
|
|
||||||
|
In that file look for:
|
||||||
|
#define En B00010000 // Enable bit
|
||||||
|
#define Rw B00100000 // Read/Write bit
|
||||||
|
#define Rs B01000000 // Register select bit
|
||||||
|
|
||||||
|
Replace these lines by:
|
||||||
|
#define En B01000000 // Enable bit
|
||||||
|
#define Rw B00100000 // Read/Write bit
|
||||||
|
#define Rs B00010000 // Register select bit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
People at Pollin also have misunderstood the PCF8574 Datasheet and list the wrong addresses on their PCB
|
||||||
|
For PCF8574A the addressing is:
|
||||||
|
|
||||||
|
Jp3 Jp2 Jp1
|
||||||
|
A2 A1 A0 Dec Hex
|
||||||
|
L L L 56 0x38
|
||||||
|
L L H 57 0x39
|
||||||
|
L H L 64 0x40
|
||||||
|
L H H 74 0x4A
|
||||||
|
H L L 75 0x4B
|
||||||
|
H L H 76 0x4C
|
||||||
|
H H L 77 0x4D
|
||||||
|
H H H 78 0x4E
|
||||||
|
|
||||||
|
They also seem to ship boards with a PCF8574
|
||||||
|
For PCF8574 the addressing is:
|
||||||
|
|
||||||
|
Jp3 Jp2 Jp1
|
||||||
|
A2 A1 A0 Dec Hex
|
||||||
|
L L L 32 0x20
|
||||||
|
L L H 33 0x21
|
||||||
|
L H L 34 0x22
|
||||||
|
L H H 35 0x23
|
||||||
|
H L L 36 0x24
|
||||||
|
H L H 37 0x25
|
||||||
|
H H L 38 0x26
|
||||||
|
H H H 39 0x27
|
||||||
|
|
||||||
|
|
||||||
|
They have also chosen two rather high pull-up resistors (10K) for the I2C lines. Usually two 4K7 resistors should do the job.
|
||||||
|
Please note that on a I2C bus only one device should have the pull-up resistors installed!
|
||||||
|
|
||||||
|
I hope this helps in getting your LCD working.
|
||||||
|
|
||||||
|
Mario
|
|
@ -0,0 +1,36 @@
|
||||||
|
LiquidCrystal_I2C V2.0
|
||||||
|
|
||||||
|
The LiquidCrystal_I2C library is a modified version of the standard LiquidCrystal library as found on
|
||||||
|
the Arduino website.
|
||||||
|
This library is intended to be used when a parallel HD44780 compatible LCD is controlled over I2C using
|
||||||
|
a PCF8574 extender (see datasheet for details).
|
||||||
|
4 of the 8 outputs are used for LDC data lines 4 to 7.
|
||||||
|
3 outputs are used for the Enable, register-select and Read/Write lines.
|
||||||
|
The one output left can be used to control the backlight of the LCD (if available).
|
||||||
|
For backlight control some extra resistors and a pnp-type transistor are required (for details see
|
||||||
|
schematic diagram).
|
||||||
|
|
||||||
|
The PCF8574 extender is available in two versions, the PCF8574 and the PCF8574A.
|
||||||
|
The only difference between the two is the I2C base address.
|
||||||
|
The base address for the PCF8574 is 0x20 and the base address for the PCF8574A is 0x38.
|
||||||
|
The examples included in this zip file assume the use of an PCF8574 set for address 0x20
|
||||||
|
(A0, A1 and A3 grounded).
|
||||||
|
|
||||||
|
For compatibility reasons this library contains some aliases for functions that are known under different
|
||||||
|
names in other libraries. This should make it fairly easy to implement the library in existing sketches
|
||||||
|
without changing to much code.
|
||||||
|
Functions not supported by this library will return nothing at all and in case a return value is expected
|
||||||
|
the function will return 0.
|
||||||
|
|
||||||
|
Update 8-12-2011:
|
||||||
|
Due to the relaese of Arduino IDE 1.0 some changes were made to the library to get it working under the new IDE.
|
||||||
|
Because of these changes this version of the LiquidCrystal_I2C library can not be used for older IDE versions.
|
||||||
|
The old version of the LiquidCrystal_I2Clibrary can be downloaded form http://www.xs4all.nl/~hmario/arduino/LiquidCrystal_I2C/V1.0/LiquidCrystal_I2C_V1.0.zip
|
||||||
|
|
||||||
|
Download the latest version from:
|
||||||
|
http://www.xs4all.nl/~hmario/arduino/LiquidCrystal_I2C/LiquidCrystal_I2C.zip
|
||||||
|
(Thanks to Ailton F. for beta testing.)
|
||||||
|
|
||||||
|
|
||||||
|
Mario H.
|
||||||
|
atmega@xs4all.nl
|
|
@ -1,5 +1,6 @@
|
||||||
###########################################
|
###########################################
|
||||||
# Syntax Coloring Map For LiquidCrystal_I2C
|
# Syntax Coloring Map For LiquidCrystal_I2C
|
||||||
|
# Version 2.0
|
||||||
###########################################
|
###########################################
|
||||||
|
|
||||||
###########################################
|
###########################################
|
||||||
|
|
Loading…
Reference in New Issue