first commit
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// HelloWorld - simple demonstration of lcd
|
||||
// Created by Bill Perry 2016-07-02
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// Sketch prints "Hello, World!" on the lcd
|
||||
//
|
||||
// See below for configuring the Arduino pins used.
|
||||
//
|
||||
// While not all hd44780 use the same pinout, here is the one that most use:
|
||||
// pin 1 is the pin closest to the edge of the PCB
|
||||
// 1 - LCD gnd
|
||||
// 2 - VCC (5v)
|
||||
// 3 - Vo Contrast Voltage
|
||||
// 4 - RS Register Select (rs)
|
||||
// 5 - Read/Write
|
||||
// 6 - Enable (en)
|
||||
// 7 - Data 0 (db0) ----
|
||||
// 8 - Data 1 (db1) |-------- Not used in 4 bit mode
|
||||
// 9 - Data 2 (db2) |
|
||||
// 10 - Data 3 (db3) ----
|
||||
// 11 - Data 4 (db4)
|
||||
// 12 - Data 5 (db5)
|
||||
// 13 - Data 6 (db6)
|
||||
// 14 - Data 7 (db7)
|
||||
// 15 - Backlight Anode (+5v)
|
||||
// 16 - Backlight Cathode (Gnd)
|
||||
//
|
||||
// ----------------------------------------------------------------------------
|
||||
// LiquidCrystal compability:
|
||||
// Since hd44780 is LiquidCrystal API compatible, most existing LiquidCrystal
|
||||
// sketches should work with hd44780 hd44780_pinIO i/o class once the
|
||||
// includes are changed to use hd44780 and the lcd object constructor is
|
||||
// changed to use the hd44780_pinIO class.
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// The parameters used by hd44780_pinIO are the same as those used by
|
||||
// the IDE bundled LiquidCrystal library
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14;
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// LCD geometry
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
void setup()
|
||||
{
|
||||
// initialize LCD with number of columns and rows:
|
||||
//
|
||||
// note:
|
||||
// begin() will automatically turn on the backlight if backlight
|
||||
// control is specified in the lcd object constructor
|
||||
//
|
||||
lcd.begin(LCD_COLS, LCD_ROWS);
|
||||
|
||||
// if backlight control was specified, the backlight should be on now
|
||||
|
||||
// Print a message to the LCD
|
||||
lcd.print("Hello, World!");
|
||||
}
|
||||
|
||||
void loop() {}
|
||||
@@ -0,0 +1,385 @@
|
||||
static const int dummyvar = 0; // dummy declaration for older broken IDEs!!!!
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// LCDCustomChars - simple demonstration of lcd custom characters
|
||||
// Created by Bill Perry 2016-10-06
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// Sketch demonstrates how to assign custom characters to the eight hd44780
|
||||
// custom character codepoints and how to display on the LCD using
|
||||
// write() and print()
|
||||
//
|
||||
// You can create your own custom characters.
|
||||
// Here are a couple of web pages that have a tool that will generate the data
|
||||
// values needed for custom character.
|
||||
// https://kakedev.github.io/GlyphGenerator/
|
||||
// http://www.quinapalus.com/hd44780udg.html
|
||||
// https://omerk.github.io/lcdchargen
|
||||
//
|
||||
// See below for configuring the Arduino pins used.
|
||||
//
|
||||
// While not all hd44780 use the same pinout, here is the one that most use:
|
||||
// pin 1 is the pin closest to the edge of the PCB
|
||||
// 1 - LCD gnd
|
||||
// 2 - VCC (5v)
|
||||
// 3 - Contrast Voltage (Vo) (use center pin of contrast pot)
|
||||
// 4 - Register Select (rs)
|
||||
// 5 - Read/Write
|
||||
// 6 - Enable (en)
|
||||
// 7 - Data 0 (db0) ----
|
||||
// 8 - Data 1 (db1) |-------- Not used in 4 bit mode
|
||||
// 9 - Data 2 (db2) |
|
||||
// 10 - Data 3 (db3) ----
|
||||
// 11 - Data 4 (db4)
|
||||
// 12 - Data 5 (db5)
|
||||
// 13 - Data 6 (db6)
|
||||
// 14 - Data 7 (db7)
|
||||
// 15 - Backlight Anode (+5v)
|
||||
// 16 - Backlight Cathode (Gnd)
|
||||
//
|
||||
// ----------------------------------------------------------------------------
|
||||
// LiquidCrystal compability:
|
||||
// Since hd44780 is LiquidCrystal API compatible, most existing LiquidCrystal
|
||||
// sketches should work with hd44780 hd44780_pinIO i/o class once the
|
||||
// includes are changed to use hd44780 and the lcd object constructor is
|
||||
// changed to use the hd44780_pinIO class.
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// The parameters used by hd44780_pinIO are the same as those used by
|
||||
// the IDE bundled LiquidCrystal library
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// LCD geometry
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
const int LongDelay = 5000;
|
||||
const int ShortDelay = 800;
|
||||
|
||||
int customcharRow = 1; // default to printing custom chars on row 1
|
||||
|
||||
// Below are some custom characters for demonstration
|
||||
|
||||
// You can ensure that the data for these custom characters is only
|
||||
// in flash and not in RAM by using the const qualifier.
|
||||
// However....
|
||||
// If using the AVR part, the AVR proprietary PROGMEM directive must be used.
|
||||
// PROGMEM is only required on AVR parts since the AVR parts cannot directly
|
||||
// access const data stored in flash like all the other processors.
|
||||
// PROGMEM is an AVR specific proprietary kludge that tells the linker and
|
||||
// startup code to handle the data differently.
|
||||
// PROGMEM is only used by the AVR and not required by any other processor.
|
||||
//
|
||||
// Most non AVR cores provide AVR compatibilty by providing support (emulation)
|
||||
// for the AVR proprietary PROGMEM directive and corresponding access functions,
|
||||
// but some do not.
|
||||
//
|
||||
// Because of this AVR const data and PROGMEM issue, there is no way to
|
||||
// guarantee code portability across all cores when using const data.
|
||||
//
|
||||
//
|
||||
// the hd44780 library assumes that if a const qualifier is used on the AVR
|
||||
// processor that the data has been stored in flash using the PROGMEM directive.
|
||||
// There is no way for the hd44780 library to know or detect if PROGMEM has
|
||||
// been used.
|
||||
// So if the const qualifer is used but the PROGMEM directive is not used on
|
||||
// an AVR processor, the custom char will be garbage.
|
||||
//
|
||||
// Examples:
|
||||
// For all processors other than AVR:
|
||||
// const char bell[8] = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
// const uint8_ bell[8] = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
//
|
||||
// For AVR: (and non AVR cores that have AVR PROGMEM emulation)
|
||||
// const char bell[8] PROGMEM = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
// const uint8_t bell[8] PROGMEM = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
// OR
|
||||
// const PROGMEM char bell[8] = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
// const PROGMEM uint8_t bell[8] = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
// NOTE:
|
||||
// if PROGMEM is used on older AVR compilers it generates a warning.
|
||||
//
|
||||
|
||||
uint8_t bell[8] = {0x04,0x0e,0x0e,0x0e,0x1f,0x00,0x04,0x00};
|
||||
uint8_t note[8] = {0x02,0x03,0x02,0x0e,0x1e,0x0c,0x00,0x00};
|
||||
uint8_t clockface[8] = {0x00,0x0e,0x15,0x17,0x11,0x0e,0x00,0x00};
|
||||
uint8_t heart[8] = {0x00,0x0a,0x1f,0x1f,0x0e,0x04,0x00,0x00};
|
||||
uint8_t duck[8] = {0x00,0x0c,0x1d,0x0f,0x0f,0x06,0x00,0x00};
|
||||
uint8_t check[8] = {0x00,0x01,0x03,0x16,0x1c,0x08,0x00,0x00};
|
||||
uint8_t cross[8] = {0x00,0x1b,0x0e,0x04,0x0e,0x1b,0x00,0x00};
|
||||
uint8_t smile[8] = {0x00,0x0a,0x0a,0x00,0x00,0x11,0x0e,0x00};
|
||||
|
||||
uint8_t degreeSymbol[8]= {0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00};
|
||||
uint8_t degreeC[8] = {0x18,0x18,0x03,0x04,0x04,0x04,0x03,0x00};
|
||||
uint8_t degreeF[8] = {0x18,0x18,0x07,0x04,0x07,0x04,0x04,0x00};
|
||||
|
||||
const PROGMEM uint8_t vsigbar[][8] = {
|
||||
{0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 0 bars, same as <space>
|
||||
{0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1F}, // 1 bars
|
||||
{0x00, 0x00,0x00,0x00,0x00,0x00,0x1F,0x1F}, // 2 bars
|
||||
{0x00, 0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F}, // 3 bars
|
||||
{0x00, 0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F}, // 4 bars
|
||||
{0x00, 0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F}, // 5 bars
|
||||
{0x00, 0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, // 6 bars
|
||||
{0x00, 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, // 7 bars
|
||||
{0x1F, 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F}, // 8 bars
|
||||
};
|
||||
|
||||
void setup()
|
||||
{
|
||||
int status;
|
||||
|
||||
// initialize LCD with number of columns and rows:
|
||||
// hd44780 returns a status from begin() that can be used
|
||||
// to determine if initalization failed.
|
||||
// the actual status codes are defined in <hd44780.h>
|
||||
// See the values RV_XXXX
|
||||
//
|
||||
// looking at the return status from begin() is optional
|
||||
// it is being done here to provide feedback should there be an issue
|
||||
//
|
||||
// note:
|
||||
// begin() will automatically turn on the backlight
|
||||
//
|
||||
status = lcd.begin(LCD_COLS, LCD_ROWS);
|
||||
if(status) // non zero status means it was unsuccesful
|
||||
{
|
||||
// begin() failed so blink error code using the onboard LED if possible
|
||||
hd44780::fatalError(status); // does not return
|
||||
}
|
||||
|
||||
// initalization was successful, the backlight should be on now
|
||||
}
|
||||
void loop(void)
|
||||
{
|
||||
lcd.clear();
|
||||
|
||||
lcd.print("Custom Chars");
|
||||
|
||||
// create custom characters
|
||||
// int rval = createChar(charval, charmap[]);
|
||||
//
|
||||
// createChar() creates a custom character
|
||||
// for the character at the charval codepoint.
|
||||
// It returns zero if successful.
|
||||
//
|
||||
// to display the custom character, simply call write()
|
||||
// with the charval use in createChar()
|
||||
//
|
||||
// The display must be initialized *before* you attempt
|
||||
// to create custom characters.
|
||||
//
|
||||
// Note: On hd44780 displays there are 8 custom characters.
|
||||
// They are assigned to character codepoint values 0x00 to 0x07
|
||||
// The codepoints 0x08 to 0x0f are duplicates for 0x00 to 0x07
|
||||
// i.e. 0x08 is the same as 0x00, 0x09 same as 0x01, etc...
|
||||
|
||||
// create 8 custom characters
|
||||
lcd.createChar(0, bell);
|
||||
lcd.createChar(1, note);
|
||||
lcd.createChar(2, clockface);
|
||||
lcd.createChar(3, heart);
|
||||
lcd.createChar(4, duck);
|
||||
lcd.createChar(5, check);
|
||||
lcd.createChar(6, cross);
|
||||
lcd.createChar(7, smile);
|
||||
|
||||
// prepare to display the custom characters
|
||||
// on multi line displays the custom characters will be
|
||||
// displayed on the 2nd line
|
||||
// on single line displays, delay a bit to see the initial display,
|
||||
// then clear the display to display the custom characters on the top line
|
||||
if(LCD_ROWS < 2)
|
||||
{
|
||||
customcharRow = 0;
|
||||
delay(LongDelay);
|
||||
lcd.clear();
|
||||
}
|
||||
|
||||
lcd.setCursor(0, customcharRow);
|
||||
|
||||
// write() or print() can be used to display custom characters.
|
||||
//
|
||||
// To use write() pass the charval of the desired custom character.
|
||||
// lcd.write(charval);
|
||||
// NOTE:
|
||||
// The Print class has an issue that does not allow 0 (zero) to be used
|
||||
// on write() without casting it. The Arduino team refuses to fix this.
|
||||
// hd44780 has a work around in it to remove this issue so you can call
|
||||
// write() with a constant value of 0 without having to cast it.
|
||||
//
|
||||
// write() can also be used with literal characters that contain
|
||||
// an octal (base 8) escape seuence.
|
||||
// lcd.write('\###');
|
||||
//
|
||||
// To use print() pass in the charval of the desired custom character
|
||||
// as a character *not* an integer.
|
||||
// This requires using a literal character with an octal escape sequence.
|
||||
// lcd.print('\###');
|
||||
//
|
||||
|
||||
// Since both write() & print() both accept octal escaped literal characters
|
||||
// it is the most compatible & portable way of sending custom characters
|
||||
|
||||
// display all 8 custom characters.
|
||||
|
||||
// write() with character codepoint values
|
||||
lcd.write(0); // casting to an uint8_t or byte not needed with hd44780
|
||||
lcd.write(1);
|
||||
|
||||
// write() & print() with octal escaped literal characters
|
||||
lcd.write('\002'); // this is an octal escaped literal character
|
||||
lcd.write('\003'); // this is an octal escaped literal character
|
||||
lcd.print('\004'); // this is an octal escaped literal character
|
||||
lcd.print('\005'); // this is an octal escaped literal character
|
||||
|
||||
// can also drop the leading zeros on small litereal values like these
|
||||
lcd.print('\06'); // this is an octal escaped literal character
|
||||
lcd.print('\7'); // this is an octal escaped literal character
|
||||
|
||||
delay(LongDelay);
|
||||
|
||||
// You can also insert custom character codepoints into C strings.
|
||||
// To do so, insert the character codepoint value as an octal constant.
|
||||
// However,
|
||||
// because zero indicates the end of string in C you cannot use zero.
|
||||
// Example:
|
||||
// lcd.print("charval #1: \001"); // prints custom character at codepoint 1
|
||||
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code1: \001");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code2: \002");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code3: \003");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code4: \004");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code5: \005");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code6: \006");
|
||||
delay(ShortDelay);
|
||||
|
||||
lcd.setCursor(0,customcharRow);
|
||||
lcd.print("code7: \007");
|
||||
delay(ShortDelay);
|
||||
|
||||
// Another nifty trick is that you can modify custom characters on the
|
||||
// display without having to re-write the characters on the display.
|
||||
// To do this, simply create a new character for a codepoint.
|
||||
// All characters on the display which have that codepoint will "magically"
|
||||
// change to the new custom character.
|
||||
// So for example, if the entire display was written with custom character
|
||||
// zero and character zero was a bell, if you called createChar() to
|
||||
// redefine character codepoint zero to be a duck,
|
||||
// the entire display would turn to ducks without having to send any
|
||||
// characters to the display.
|
||||
|
||||
// create the initial custom character
|
||||
lcd.createChar(0, bell);
|
||||
|
||||
// fill the custom character line with the custom character.
|
||||
lcd.setCursor(0,customcharRow);
|
||||
for(uint8_t col=0; col<LCD_COLS; col++)
|
||||
lcd.write(0);
|
||||
|
||||
delay(ShortDelay);
|
||||
|
||||
// change the single custom character previously written on the row
|
||||
// and all the characters on the row will change
|
||||
// without having to re-write the characters.
|
||||
lcd.createChar(0, note);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, clockface);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, heart);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, duck);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, check);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, cross);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, smile);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, degreeSymbol);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, degreeC);
|
||||
delay(ShortDelay);
|
||||
lcd.createChar(0, degreeF);
|
||||
delay(ShortDelay);
|
||||
|
||||
// show multiple vertical bars rising
|
||||
// by changing the single custom character that is already written
|
||||
// to the entire row on the display
|
||||
for(int i = 0; i < 9; i++)
|
||||
{
|
||||
lcd.createChar(0, vsigbar[i]);
|
||||
delay(ShortDelay);
|
||||
}
|
||||
|
||||
delay(LongDelay);
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
//
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// LCDKeypadCheck - LCD keypad shield backlight circuitry test
|
||||
// Copyright 2013-2020 Bill Perry
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// LCDKeypadCheck is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation version 3 of the License.
|
||||
//
|
||||
// LCDKeypadCheck is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with LCDKeypadCheck. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// sketch to test lcd keypad shields for bad backlight circuitry
|
||||
//
|
||||
// See this Arduino forum thread for a discussion about the isue:
|
||||
// http://forum.arduino.cc//index.php?topic=96747
|
||||
//
|
||||
// NOTE:
|
||||
// As of 2016-11-12 in release 0.8.1 the hd44780_pinIO class now
|
||||
// automatically detects broken backlight circuits and will use backlight
|
||||
// control methods to protect the Arduino processor. The sketch can simply
|
||||
// use all the backlight API functions setbacklight(), backlight(), and
|
||||
// noBacklight() without concern.
|
||||
//
|
||||
// To use this sketch, fill in the proper pin assignements if they are
|
||||
// different from below.
|
||||
//
|
||||
// upload the sketch.
|
||||
// The LCD display will show whether the backlight circuit is good/bad.
|
||||
//
|
||||
// If the LCD shows that the backlight circuit is bad,
|
||||
// it means that the backlight control circuit on the shield is a bad design
|
||||
// and has a short circuit issue on the Arduino pin that controls the
|
||||
// backlight circuit. (usually digital pin 10)
|
||||
// This means that you need to be careful not to ever set the backlight control
|
||||
// pin (D10) to HIGH as the high current draw could damage the Arduino processor.
|
||||
//
|
||||
// All is not lost, the shield can still be used and the backlight can still
|
||||
// be controlled. Just keep in mind that unless the hardware is
|
||||
// modified, some precautions must be taken when controlling the backlight.
|
||||
// The main thing is that backlight control pin (digital pin 10) should
|
||||
// never be set to HIGH.
|
||||
// This means that PWM or analogWrite() cannot be used to dim the backlight.
|
||||
//
|
||||
// If you are happy with the backlight on all the time, then nothing needs to
|
||||
// be done and you can use the LCD without backlight control.
|
||||
//
|
||||
// A simple software only solution for backlight on/off control
|
||||
// is to set the backlight pin to INPUT to turn on the backlight and set the
|
||||
// backlight pin to OUTPUT mode to turn the backlight off.
|
||||
// If using hd44780 library 0.8.1 or newer the library will automatically
|
||||
// do this for the sketch when the backlight API functions are used.
|
||||
//
|
||||
// History
|
||||
// 2018.09.18 bperrybap - updated comments to clarify what
|
||||
// "BL Circuit BAD" means
|
||||
// 2017.01.07 bperrybap - updated comments to reflect that library now
|
||||
// automatically detects bad backlight circuits
|
||||
// 2016.11.08 bperrybap - updated for inclusion in hd44780 library
|
||||
// 2013.10.29 bperrybap - Original creation
|
||||
//
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// initialize the library with the numbers of the interface pins
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // for esp8266 devices
|
||||
const int pin_BL = D10; // arduino pin wired to LCD backlight circuit
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14;
|
||||
const int pin_BL=5; // gpio pin # wired to LCD backlight circuit
|
||||
#else
|
||||
const int rs = 8; // arduino pin wired to LCD RS
|
||||
const int en = 9; // arduino pin wired to LCD EN
|
||||
const int db4 = 4;// arduino pin wired to LCD db4
|
||||
const int db5 = 5;// arduino pin wired to LCD db5
|
||||
const int db6 = 6;// arduino pin wired to LCD db6
|
||||
const int db7 = 7;// arduino pin wired to LCD db7
|
||||
const int pin_BL = 10; // arduino pin wired to LCD backlight circuit
|
||||
#endif
|
||||
|
||||
hd44780_pinIO lcd( rs, en, db4, db5, db6, db7);
|
||||
|
||||
|
||||
/*
|
||||
* Macros to safely turn on the backlight even with back BL hardware
|
||||
* These assume that the BL pin is not touched or used after RESET other
|
||||
* than by these macros.
|
||||
*/
|
||||
|
||||
#define SafeBLon(pin) pinMode(pin, INPUT)
|
||||
#define SafeBLoff(pin) pinMode(pin, OUTPUT)
|
||||
|
||||
int status;
|
||||
|
||||
void setup()
|
||||
{
|
||||
// set up the LCD's number of columns and rows:
|
||||
lcd.begin(16, 2);
|
||||
|
||||
status = pinTest(pin_BL); // only run the actual test once
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
lcd.clear();
|
||||
if(status)
|
||||
{
|
||||
/*
|
||||
* Shield has BL circuit issue
|
||||
*/
|
||||
lcd.print("BL Circuit BAD");
|
||||
safeBlink(pin_BL, 5); // safely blink the backlight
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
* Shield is OK (no BL circuit issue)
|
||||
*/
|
||||
lcd.print("BL Circuit GOOD");
|
||||
softBlink(pin_BL, 2); // soft blink the backlight (uses PWM)
|
||||
}
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function to test a backlight pin
|
||||
* Returns non-zero if test fails (bad circuit design)
|
||||
*/
|
||||
int pinTest(int pin)
|
||||
{
|
||||
int val;
|
||||
|
||||
/*
|
||||
* Check to see if there
|
||||
* is a problem in the backlight circuit
|
||||
* So far, the "broken" designs connected D10
|
||||
* directly to the base of a NPN transistor,
|
||||
* this will cause a short when D10 is set to HIGH
|
||||
* as there is no current limiting resistor in the path
|
||||
* between D10 to the base and the emitter to ground.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Set the pin to an input with pullup disabled.
|
||||
* This should be safe on all shields.
|
||||
* The reason for the digitalWrite() first is that
|
||||
* only the newer Arduino cores disable the pullup
|
||||
* when setting the pin to INPUT.
|
||||
* On boards that have a pullup on the transistor base,
|
||||
* this should cause the backlight to be on.
|
||||
*/
|
||||
digitalWrite(pin, LOW);
|
||||
pinMode(pin, INPUT);
|
||||
|
||||
/*
|
||||
* Set the backlight pin to an output.
|
||||
* since the pullup was turned off above by
|
||||
* setting the pin to input mode,
|
||||
* it should drive the pin LOW which should
|
||||
* be safe given the known design flaw.
|
||||
*/
|
||||
pinMode(pin, OUTPUT);
|
||||
|
||||
|
||||
/*
|
||||
* Set the backlight pin to HIGH
|
||||
* NOTE: This is NOT a safe thing to do
|
||||
* on the broken designs. The code will minimize
|
||||
* the time this is done to prevent any potential damage.
|
||||
*/
|
||||
|
||||
digitalWrite(pin, HIGH);
|
||||
|
||||
|
||||
/*
|
||||
* Now read back the pin value to
|
||||
* See if a short is pulling down the HIGH output.
|
||||
*/
|
||||
|
||||
delayMicroseconds(5); // give some time for the signal to droop
|
||||
|
||||
val = digitalRead(pin); // read the level on the pin
|
||||
|
||||
/*
|
||||
* Restore the pin to a safe state
|
||||
* Input with pullup turned off
|
||||
*/
|
||||
digitalWrite(pin, LOW);
|
||||
pinMode(pin, INPUT);
|
||||
|
||||
/*
|
||||
* If the level read back is not HIGH
|
||||
* Then there is a problem because the pin is
|
||||
* being driven HIGH by the Arduino processor.
|
||||
*/
|
||||
if (val != HIGH)
|
||||
return(-1); // test failed
|
||||
else
|
||||
return(0); // all is ok.
|
||||
}
|
||||
|
||||
void safeBlink(int pin, int count)
|
||||
{
|
||||
/*
|
||||
* Safely blink the backlight on LCD shields that have
|
||||
* broken BL hardware
|
||||
* Uses the SafeBL macros defined above.
|
||||
*/
|
||||
|
||||
while(count--)
|
||||
{
|
||||
delay(200);
|
||||
SafeBLoff(pin); // turn on the backlight (safe to use for all shields)
|
||||
delay(50);
|
||||
SafeBLon(pin); // turn off the backlight (safe to use for all shields)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* soft blink the backlight.
|
||||
* NOTE: this should not be used on a shield
|
||||
* with a bad backlight circuit
|
||||
*/
|
||||
void softBlink(int pin, int count)
|
||||
{
|
||||
// note: esp32 core does not support analogWrite()
|
||||
#if !defined(ARDUINO_ARCH_ESP32)
|
||||
// soft blink the backlight by ramping down then back up
|
||||
pinMode(pin, OUTPUT);
|
||||
for(int times = 0; times < count; times++)
|
||||
{
|
||||
for(int x = 1; x < 16; x++)
|
||||
{
|
||||
analogWrite(pin, 256-x * 16);
|
||||
delay(50);
|
||||
}
|
||||
for(int x = 1; x < 16; x++)
|
||||
{
|
||||
analogWrite(pin, x * 16);
|
||||
delay(50);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// LineWrap - simple demonstration of automatic linewrap functionality
|
||||
// Created by Bill Perry 2017-05-10
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// Sketch demonstrates hd44780 library automatic line wrapping functionality.
|
||||
//
|
||||
// Background:
|
||||
// hd44780 LCDs do not use linear continuous memory for the characters
|
||||
// on the lines on the display.
|
||||
// This means that simply sending continuous characters to the
|
||||
// display will not fill lines and wrap appropriately as might be expected.
|
||||
// The hd44780 library solves this issue by adding a line wrapping capability
|
||||
// in s/w that can be enabled & disabled.
|
||||
// This allows the host to send characters to the display continuously and they
|
||||
// will wrap to the next lower line when the end of the visible line has been
|
||||
// reached. When on the bottom line it will wrap back to the top line.
|
||||
//
|
||||
// (Configure LCD_COLS & LCD_ROWS if desired/needed)
|
||||
// Expected behavior of the sketch:
|
||||
// - display a banner announcing the test.
|
||||
// - print the configured LCD geometry
|
||||
// - print a long text string to demostrate automatic line wrapping
|
||||
// - print lots of characters (slowly) to show how the full wrapping works.
|
||||
// (loop)
|
||||
//
|
||||
// If initialization of the LCD fails and the arduino supports a built in LED,
|
||||
// the sketch will simply blink the built in LED with the initalization error
|
||||
// code.
|
||||
//
|
||||
// Special note for certain 16x1 displays:
|
||||
// Some 16x1 displays are actually a 8x2 display that have both lines on
|
||||
// a single line on the display.
|
||||
// If you have one of these displays, simply set the geometry to 8x2 instead
|
||||
// of 16x1.
|
||||
// In normal sketches, lineWrap() mode will allow this type of display to
|
||||
// properly function as a 16x1 display in that it will allow printing up to
|
||||
// 16 characters on the display without having to manually set the cursor
|
||||
// position to print the right characters on the half of the display.
|
||||
// However, when using this 8x2 display as a 16x1 display,
|
||||
// scrollDisplayLeft() and scrollDisplayRight() will not work as intended.
|
||||
// They will shift the two halves of the display rather than the entire display.
|
||||
// This is because the hd44780 chip is doing the shift and chip is hard coded
|
||||
// internally for two lines.
|
||||
//
|
||||
// ----------------------------------------------------------------------------
|
||||
// While not all hd44780 use the same pinout, here is the one that most use:
|
||||
// pin 1 is the pin closest to the edge of the PCB
|
||||
// 1 - LCD gnd
|
||||
// 2 - VCC (5v)
|
||||
// 3 - Vo Contrast Voltage
|
||||
// 4 - RS Register Select (rs)
|
||||
// 5 - Read/Write
|
||||
// 6 - Enable (en)
|
||||
// 7 - Data 0 (db0) ----
|
||||
// 8 - Data 1 (db1) |-------- Not used in 4 bit mode
|
||||
// 9 - Data 2 (db2) |
|
||||
// 10 - Data 3 (db3) ----
|
||||
// 11 - Data 4 (db4)
|
||||
// 12 - Data 5 (db5)
|
||||
// 13 - Data 6 (db6)
|
||||
// 14 - Data 7 (db7)
|
||||
// 15 - Backlight Anode (+5v)
|
||||
// 16 - Backlight Cathode (Gnd)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// LCD geometry
|
||||
// while 16x2 will work on most displays even if the geometry is different,
|
||||
// for actual wrap testing of a particular LCD it is best to use the correct
|
||||
// geometry.
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
void setup()
|
||||
{
|
||||
int status;
|
||||
|
||||
// initialize LCD with number of columns and rows:
|
||||
// hd44780 returns a status from begin() that can be used
|
||||
// to determine if initalization failed.
|
||||
// the actual status codes are defined in <hd44780.h>
|
||||
status = lcd.begin(LCD_COLS, LCD_ROWS);
|
||||
if(status) // non zero status means it was unsuccesful
|
||||
{
|
||||
// begin() failed so blink error code using the onboard LED if possible
|
||||
hd44780::fatalError(status); // does not return
|
||||
}
|
||||
|
||||
// turn on automatic line wrapping
|
||||
// which automatically wraps lines to the next lower line and wraps back
|
||||
// to the top when at the bottom line
|
||||
// NOTE:
|
||||
// noLineWrap() can be used to disable automatic line wrapping.
|
||||
// _write() can be called instead of write() to send data bytes
|
||||
// to the display bypassing any special character or line wrap processing.
|
||||
lcd.lineWrap();
|
||||
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
lcd.clear();
|
||||
lcd.print("WrapTest");
|
||||
delay(2000);
|
||||
lcd.clear();
|
||||
|
||||
//print the configured LCD geometry
|
||||
lcd.print(LCD_COLS);
|
||||
lcd.print("x");
|
||||
lcd.print(LCD_ROWS);
|
||||
delay(3000);
|
||||
lcd.clear();
|
||||
|
||||
// print a long text string
|
||||
// without line wrapping enabled, the text would not wrap properly
|
||||
// to the next line.
|
||||
|
||||
if(LCD_COLS == 8)
|
||||
lcd.print("A long text line");
|
||||
else
|
||||
lcd.print("This is a very long line of text");
|
||||
delay(3000);
|
||||
|
||||
lcd.clear();
|
||||
|
||||
// now print 2 full displays worth of characters to show
|
||||
// the full wrapping.
|
||||
|
||||
lcd.cursor(); // turn on cursor so you can see where it is
|
||||
|
||||
char c = '0'; // start at the character for the number zero
|
||||
for(int i = 2*LCD_COLS*LCD_ROWS; i; i--)
|
||||
{
|
||||
lcd.print(c++);
|
||||
delay(200); // slow things down to watch the printing & wrapping
|
||||
|
||||
if(c > 0x7e) // wrap back to beginning of printable ASCII chars
|
||||
c = '!';
|
||||
}
|
||||
delay(3000);
|
||||
lcd.noCursor(); // turn off cursor
|
||||
}
|
||||
33
libraries/hd44780/examples/ioClass/hd44780_pinIO/README.md
Normal file
33
libraries/hd44780/examples/ioClass/hd44780_pinIO/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
hd44780_pinIO examples
|
||||
=======================
|
||||
|
||||
The examples included in this directory are for the hd44780_pinIO i/o class.<br>
|
||||
The hd44780_pinIO i/o class is used to control an LCD using direct Arduino pin connections.
|
||||
|
||||
#### The following examples are included:
|
||||
|
||||
- `HelloWorld`<br>
|
||||
Prints "Hello, World!" on the lcd
|
||||
|
||||
- `LCDKeypadCheck`<br>
|
||||
Tests lcd keypad shields for bad backlight circuitry
|
||||
|
||||
- `LCDCustomChars`<br>
|
||||
Demonstrates using custom characters
|
||||
|
||||
- `LineWrap`<br>
|
||||
Demonstrates automatic linewrap functionality
|
||||
|
||||
- `ReadWrite`<br>
|
||||
Demonstrate the ability to read data from the LCD.
|
||||
|
||||
- `Serial2LCD`<br>
|
||||
Displays a message read from the serial port on the lcd.
|
||||
|
||||
- `UpTime`<br>
|
||||
Prints the amount of time since the Arduino has been reset.
|
||||
|
||||
- `hd44780examples`<br>
|
||||
The hd44780examples subdirectory contains
|
||||
hd44780_pinIO class specific wrapper sketches for sketches under
|
||||
examples/hd44780examples.
|
||||
@@ -0,0 +1,195 @@
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// ReadWrite - simple demonstration reading data from LCD
|
||||
// Created by Bill Perry 2016-08-19
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// The purpose of the sketch is demonstrate the ability to read data from
|
||||
// the LCD. As such, it requires an extra Arduino pin to control the R/W LCD
|
||||
// pin. See below for configuring the Arduino pins used.
|
||||
//
|
||||
// Sketch will print the amount of time since the Arduino has been reset
|
||||
// on the top row and then read the data from the LCD to print it on the
|
||||
// second row
|
||||
//
|
||||
// If there are errors and the arduino supports a built in LED,
|
||||
// an error status code will blink on the built in LED.
|
||||
// Error codes:
|
||||
// (1) lcd device initalization failed
|
||||
// (2) lcd device does not support reads
|
||||
// (3) error reading data from lcd device
|
||||
// (4) error writing data to lcd device
|
||||
// (5) read data mismatch
|
||||
//
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, rw=A0, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, rw=A0, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, rw=A0, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, rw, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, rw=A0, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, rw=A0, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, rw=A0, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, rw, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// LCD geometry
|
||||
const int LCD_ROWS = 2;
|
||||
const int LCD_COLS = 16;
|
||||
|
||||
void setup()
|
||||
{
|
||||
// initialize LCD with number of columns and rows:
|
||||
if( lcd.begin(LCD_COLS, LCD_ROWS))
|
||||
{
|
||||
// begin() failed so blink the onboard LED if possible
|
||||
fatalError(1);
|
||||
}
|
||||
|
||||
// check to see if device can read by attempting to read
|
||||
// the lcd status register. If it fails then assume it was
|
||||
// because the lcd device does not support reads.
|
||||
if(lcd.status() < 0)
|
||||
{
|
||||
lcd.print("No Read Support");
|
||||
fatalError(2);
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static unsigned long lastsecs = -1; // pre-initialize with non zero value
|
||||
unsigned long secs;
|
||||
|
||||
secs = millis() / 1000;
|
||||
|
||||
// see if 1 second has passed
|
||||
// so the display is only updated once per second
|
||||
if(secs != lastsecs)
|
||||
{
|
||||
lastsecs = secs; // keep track of last seconds
|
||||
|
||||
// set the cursor position to top line: column 0, row 0
|
||||
lcd.setCursor(0, 0);
|
||||
|
||||
// print uptime on lcd device: (time since last reset)
|
||||
PrintUpTime(lcd, secs);
|
||||
|
||||
// Now copy the characters from the top line to the 2nd line
|
||||
// This is done character by character by:
|
||||
// - setting the character position to read
|
||||
// - reading a character
|
||||
// - setting the character position to write
|
||||
// - writing the charcter read
|
||||
for(int col = 0; col < LCD_COLS; col++)
|
||||
{
|
||||
int c;
|
||||
|
||||
lcd.setCursor(col, 0);
|
||||
if((c = lcd.read()) < 0) // if a read error, bomb out
|
||||
{
|
||||
lcd.clear();
|
||||
lcd.print("read fail");
|
||||
fatalError(3);
|
||||
}
|
||||
|
||||
// check for ':' characters in col 2 and 5
|
||||
// if not there, consider it a fatal read error
|
||||
if((col == 2 || col == 5) && c != ':')
|
||||
{
|
||||
lcd.clear();
|
||||
lcd.print("read fail");
|
||||
fatalError(5);
|
||||
}
|
||||
|
||||
lcd.setCursor(col, 1);
|
||||
if(lcd.write((uint8_t) c) != 1)
|
||||
{
|
||||
lcd.clear();
|
||||
lcd.print("write fail");
|
||||
fatalError(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PrintUpTime(outdev, secs) - print uptime in HH:MM:SS format
|
||||
// outdev - the device to send output
|
||||
// secs - the total number of seconds uptime
|
||||
void PrintUpTime(Print &outdev, unsigned long secs)
|
||||
{
|
||||
unsigned int hr, mins, sec;
|
||||
|
||||
// convert total seconds to hours, mins, seconds
|
||||
mins = secs / 60; // how many total minutes
|
||||
hr = mins / 60; // how many total hours
|
||||
mins = mins % 60; // how many minutes within the hour
|
||||
sec = secs % 60; // how many seconds within the minute
|
||||
|
||||
|
||||
// print uptime in HH:MM:SS format
|
||||
// Print class does not support fixed width formatting
|
||||
// so insert a zero if number smaller than 10
|
||||
if(hr < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)hr);
|
||||
outdev.write(':');
|
||||
if(mins < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)mins);
|
||||
outdev.write(':');
|
||||
if(sec < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)sec);
|
||||
}
|
||||
|
||||
// fatalError() - loop & blink and error code
|
||||
void fatalError(int ecode)
|
||||
{
|
||||
hd44780::fatalError(ecode); // does not return
|
||||
}
|
||||
|
||||
@@ -0,0 +1,170 @@
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// Serial2LCD - simple demonstration printing characters from serial port
|
||||
// Created by Bill Perry 2020-06-28
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// Sketch demonstrates hd44780 how to read a message of characters from
|
||||
// serial port and display it on the LCD.
|
||||
// It takes advantage of the hd44780 library automatic line
|
||||
// wrapping capability.
|
||||
// See the LineWrap sketch for details about line wrapping.
|
||||
//
|
||||
// Configure LCD_COLS, LCD_ROWS and BAUDRATE if desired/needed
|
||||
// Expected behavior of the sketch:
|
||||
// - characters received from serial port are displayed on LCD
|
||||
// - CR and LF are ignored/dropped
|
||||
//
|
||||
// If initialization of the LCD fails and the arduino supports a built in LED,
|
||||
// the sketch will simply blink the built in LED with the initalization error
|
||||
// code.
|
||||
//
|
||||
// Some 16x1 displays are actually a 8x2 display that have both lines on
|
||||
// a single line on the display.
|
||||
// If you have one of these displays, simply set the geometry to 8x2 instead
|
||||
// of 16x1.
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// pinout:
|
||||
// 1 - LCD gnd
|
||||
// 2 - VCC (5v)
|
||||
// 3 - not connected
|
||||
// 4 - RS Register Select (rs)
|
||||
// 5 - Read/Write
|
||||
// 6 - Enable (en)
|
||||
// 7 - Data 0 (db0) ----
|
||||
// 8 - Data 1 (db1) |-------- Not used in 4 bit mode
|
||||
// 9 - Data 2 (db2) |
|
||||
// 10 - Data 3 (db3) ----
|
||||
// 11 - Data 4 (db4)
|
||||
// 12 - Data 5 (db5)
|
||||
// 13 - Data 6 (db6)
|
||||
// 14 - Data 7 (db7)
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
|
||||
// LCD geometry
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
const int BAUDRATE = 9600;
|
||||
|
||||
void setup()
|
||||
{
|
||||
int status;
|
||||
|
||||
// initalize Serial port
|
||||
Serial.begin(BAUDRATE);
|
||||
|
||||
// initialize LCD with number of columns and rows:
|
||||
// hd44780 returns a status from begin() that can be used
|
||||
// to determine if initalization failed.
|
||||
// the actual status codes are defined in <hd44780.h>
|
||||
status = lcd.begin(LCD_COLS, LCD_ROWS);
|
||||
if(status) // non zero status means it was unsuccesful
|
||||
{
|
||||
// begin() failed
|
||||
|
||||
Serial.print("LCD initalization failed: ");
|
||||
Serial.println(status);
|
||||
|
||||
// blink error code using the onboard LED if possible
|
||||
hd44780::fatalError(status); // does not return
|
||||
}
|
||||
|
||||
// turn on automatic line wrapping
|
||||
// which automatically wraps lines to the next lower line and wraps back
|
||||
// to the top when at the bottom line
|
||||
// NOTE:
|
||||
// noLineWrap() can be used to disable automatic line wrapping.
|
||||
// _write() can be called instead of write() to send data bytes
|
||||
// to the display bypassing any special character or line wrap processing.
|
||||
lcd.lineWrap();
|
||||
|
||||
lcd.print("Serial2LCD");
|
||||
if(LCD_ROWS > 1)
|
||||
{
|
||||
lcd.setCursor(0,1);
|
||||
lcd.print("Baud:");
|
||||
lcd.print(BAUDRATE);
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
|
||||
// check to see if characters available
|
||||
// indicating a message is coming in
|
||||
if (Serial.available())
|
||||
{
|
||||
// wait some time for rest of message to arrive
|
||||
delay(100);
|
||||
|
||||
// Clear the display before showing the new message
|
||||
lcd.clear();
|
||||
|
||||
// print the message on the LCD
|
||||
while (Serial.available() > 0)
|
||||
{
|
||||
char c;
|
||||
c = Serial.read();
|
||||
if(c != '\r' && c != '\n') // drop CR and LF characters
|
||||
lcd.write(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
// vi:ts=4
|
||||
// ----------------------------------------------------------------------------
|
||||
// UpTime - simple demonstration of lcd
|
||||
// Created by Bill Perry 2017-05-11
|
||||
// bperrybap@opensource.billsworld.billandterrie.com
|
||||
//
|
||||
// This example code is unlicensed and is released into the public domain
|
||||
// ----------------------------------------------------------------------------
|
||||
//
|
||||
// This sketch is for LCDs that are directly controlled with Arduino pins.
|
||||
//
|
||||
// Sketch will print "UpTime" on top row of lcd
|
||||
// and will print the amount of time since the Arduino has been reset
|
||||
// on the second row.
|
||||
//
|
||||
//
|
||||
// See below for configuring the Arduino pins used.
|
||||
//
|
||||
// If initialization of the LCD fails and the arduino supports a built in LED,
|
||||
// the sketch will simply blink the built in LED.
|
||||
//
|
||||
// While not all hd44780 use the same pinout, here is the one that most use:
|
||||
// pin 1 is the pin closest to the edge of the PCB
|
||||
// 1 - LCD gnd
|
||||
// 2 - VCC (5v)
|
||||
// 3 - Vo Contrast Voltage
|
||||
// 4 - RS Register Select (rs)
|
||||
// 5 - Read/Write
|
||||
// 6 - Enable (en)
|
||||
// 7 - Data 0 (db0) ----
|
||||
// 8 - Data 1 (db1) |-------- Not used in 4 bit mode
|
||||
// 9 - Data 2 (db2) |
|
||||
// 10 - Data 3 (db3) ----
|
||||
// 11 - Data 4 (db4)
|
||||
// 12 - Data 5 (db5)
|
||||
// 13 - Data 6 (db6)
|
||||
// 14 - Data 7 (db7)
|
||||
// 15 - Backlight Anode (+5v)
|
||||
// 16 - Backlight Cathode (Gnd)
|
||||
// ----------------------------------------------------------------------------
|
||||
// LiquidCrystal compability:
|
||||
// Since hd44780 is LiquidCrystal API compatible, most existing LiquidCrystal
|
||||
// sketches should work with hd44780 hd44780_pinIO i/o class once the
|
||||
// includes are changed to use hd44780 and the lcd object constructor is
|
||||
// changed to use the hd44780_pinIO class.
|
||||
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // Arduino pin i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// The parameters used by hd44780_pinIO are the same as those used by
|
||||
// the IDE bundled LiquidCrystal library
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
// Dimming will not work on esp32 as it does not have analogWrite()
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// LCD geometry
|
||||
const int LCD_COLS = 16;
|
||||
const int LCD_ROWS = 2;
|
||||
|
||||
void setup()
|
||||
{
|
||||
int status;
|
||||
|
||||
// initialize LCD with number of columns and rows:
|
||||
// hd44780 returns a status from begin() that can be used
|
||||
// to determine if initalization failed.
|
||||
// the actual status codes are defined in <hd44780.h>
|
||||
//
|
||||
// note:
|
||||
// begin() will automatically turn on the backlight if backlight
|
||||
// control is specified in the lcd object constructor
|
||||
//
|
||||
|
||||
status = lcd.begin(LCD_COLS, LCD_ROWS);
|
||||
if(status) // non zero status means it was unsuccesful
|
||||
{
|
||||
// hd44780 has a fatalError() routine that blinks an led if possible
|
||||
// begin() failed so call fatalError() with the error code.
|
||||
hd44780::fatalError(status); // does not return
|
||||
}
|
||||
|
||||
// if backlight control was specified, the backlight should be on now
|
||||
|
||||
// Print a message to the LCD
|
||||
lcd.print(" UpTime");
|
||||
|
||||
if(LCD_ROWS < 2)
|
||||
delay(3000);
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
static unsigned long lastsecs = -1; // pre-initialize with non zero value
|
||||
unsigned long secs;
|
||||
int status;
|
||||
|
||||
secs = millis() / 1000;
|
||||
|
||||
// see if 1 second has passed
|
||||
// so the display is only updated once per second
|
||||
if(secs != lastsecs)
|
||||
{
|
||||
lastsecs = secs; // keep track of last seconds
|
||||
|
||||
// set the cursor position to column 0, row 1
|
||||
// note: row 1 is the second row from top,
|
||||
// since row counting begins with 0
|
||||
// if display has only 1 line, it will appear on that line
|
||||
status = lcd.setCursor(0, 1);
|
||||
if(status) // non zero status means it was unsuccesful
|
||||
{
|
||||
// setCursor() failed so call fatalError() with the error code.
|
||||
hd44780::fatalError(status); // does not return
|
||||
}
|
||||
|
||||
// print uptime on lcd device: (time since last reset)
|
||||
PrintUpTime(lcd, secs);
|
||||
}
|
||||
}
|
||||
|
||||
// PrintUpTime(outdev, secs) - print uptime in HH:MM:SS format
|
||||
// outdev - the device to send output
|
||||
// secs - the total number of seconds uptime
|
||||
//
|
||||
// This is a fancy output routine.
|
||||
// outdev is a Print class object which indicates
|
||||
// where the output should be sent.
|
||||
// PrintUpTime can be used with any object that uses the Print class.
|
||||
// This code works with Serial objects, as well as the the hd44780 lcd objects.
|
||||
// i.e. you can call with Serial: PrintUpTime(Serial, seconds);
|
||||
|
||||
void PrintUpTime(Print &outdev, unsigned long secs)
|
||||
{
|
||||
unsigned int hr, mins, sec;
|
||||
|
||||
// convert total seconds to hours, mins, seconds
|
||||
mins = secs / 60; // how many total minutes
|
||||
hr = mins / 60; // how many total hours
|
||||
mins = mins % 60; // how many minutes within the hour
|
||||
sec = secs % 60; // how many seconds within the minute
|
||||
|
||||
// print uptime in HH:MM:SS format
|
||||
|
||||
if(hr > 99)
|
||||
hr %= 100; // limit hr to 0-99
|
||||
|
||||
// Print class does not support fixed width formatting
|
||||
// so insert a zero if number smaller than 10
|
||||
|
||||
if(hr < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)hr);
|
||||
outdev.write(':');
|
||||
if(mins < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)mins);
|
||||
outdev.write(':');
|
||||
if(sec < 10)
|
||||
outdev.write('0');
|
||||
outdev.print((int)sec);
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// LCDcharset - Display LCD character set for hd44780 hd44780_pinIO i/o class
|
||||
// ----------------------------------------------------------------------------
|
||||
// This sketch is a wrapper sketch for the hd44780 library example LCDcharset.
|
||||
// Note:
|
||||
// This is not a normal sketch and should not be used as model or example
|
||||
// of hd44780 library sketches.
|
||||
// This sketch is simple wrapper that declares the needed lcd object for the
|
||||
// hd44780 library sketch.
|
||||
// It is provided as a convenient way to run a pre-configured sketch for
|
||||
// the i/o class.
|
||||
// The source code for this sketch lives in hd44780 examples:
|
||||
// hd44780/examples/hd44780examples/LCDcharset/LCDcharset.ino
|
||||
// From IDE:
|
||||
// [File]->Examples-> hd44780/hd44780examples/LCDcharset
|
||||
//
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h>
|
||||
|
||||
// define the LCD geometry
|
||||
#define LCD_COLS 16
|
||||
#define LCD_ROWS 2
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// tell the hd44780 sketch the lcd object has been declared
|
||||
#define HD44780_LCDOBJECT
|
||||
|
||||
// include the hd44780 library LCDcharset sketch source code
|
||||
#include <examples/hd44780examples/LCDcharset/LCDcharset.ino>
|
||||
@@ -0,0 +1,71 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// LCDiSpeed - LCD Interface Speed test for hd44780 hd44780_pinIO i/o class
|
||||
// ----------------------------------------------------------------------------
|
||||
// This sketch is a wrapper sketch for the hd44780 library example.
|
||||
// Note:
|
||||
// This is not a normal sketch and should not be used as model or exmaple
|
||||
// of hd44780 library sketches.
|
||||
// This sketch is simple wrapper that declares the needed lcd object for the
|
||||
// hd44780 library sketch.
|
||||
// It is provided as a convenient way to run a pre-configured sketch for
|
||||
// the i/o class.
|
||||
// The source code for this sketch lives in the hd44780 examples.
|
||||
// hd44780/examples/hd44780examples/LCDiSpeed/LCDiSpeed.ino
|
||||
// From IDE:
|
||||
// [File]->Examples-> hd44780/hd44780examples/LCDiSpeed
|
||||
//
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h>
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
// note that ESP8266 based arduinos must use the Dn defines rather than
|
||||
// raw pin numbers.
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// tell the hd44780 sketch the lcd object has been declared
|
||||
#define HD44780_LCDOBJECT
|
||||
|
||||
// include the hd44780 library sketch source code
|
||||
#include <examples/hd44780examples/LCDiSpeed/LCDiSpeed.ino>
|
||||
@@ -0,0 +1,56 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// LCDLibTest - LCD library test sketch for hd44780 hd44780_pinIO i/o class
|
||||
// ----------------------------------------------------------------------------
|
||||
// This sketch is a wrapper sketch for the hd44780 library example.
|
||||
// Note:
|
||||
// This is not a normal sketch and should not be used as model or exmaple
|
||||
// of hd44780 library sketches.
|
||||
// This sketch is simple wrapper that declares the needed lcd object for the
|
||||
// hd44780 library sketch.
|
||||
// It is provided as a convenient way to run a pre-configured sketch for
|
||||
// the i/o class.
|
||||
// The source code for this sketch lives in the hd44780 examples.
|
||||
// hd44780/examples/hd44780examples/LCDlibTest/LCDlibTest.ino
|
||||
// From IDE:
|
||||
// [File]->Examples-> hd44780/hd44780examples/LCDlibTest
|
||||
//
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // include i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: espduino32 GPIO12 needs a pulldown resistor
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14;
|
||||
#else
|
||||
//const int rs=12, en=11, db4=5, db5=4, db6=3, db7=2; // IDE LiquidCrystal pins
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // lcd keypad shield pins
|
||||
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// tell the hd44780 sketch the lcd object has been declared
|
||||
#define HD44780_LCDOBJECT
|
||||
|
||||
// include the hd44780 library sketch source code
|
||||
#include <examples/hd44780examples/LCDlibTest/LCDlibTest.ino>
|
||||
@@ -0,0 +1,69 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// lcdproc - LCD library lcdproc wrapper sketch for hd44780_pinIO i/o class
|
||||
// ----------------------------------------------------------------------------
|
||||
// This sketch is a wrapper sketch for the hd44780 library example.
|
||||
// Note:
|
||||
// This is not a normal sketch and should not be used as model or exmaple
|
||||
// of hd44780 library sketches.
|
||||
// This sketch is simple wrapper that declares the needed lcd object for the
|
||||
// hd44780 library sketch.
|
||||
// It is provided as a convenient way to run a pre-configured sketch for
|
||||
// the i/o class.
|
||||
// The source code for this sketch lives in the hd44780 examples.
|
||||
// hd44780/examples/hd44780examples/lcdproc/lcdproc.ino
|
||||
// From IDE:
|
||||
// [File]->Examples-> hd44780/hd44780examples/lcdproc
|
||||
//
|
||||
|
||||
#include <hd44780.h>
|
||||
#include <hd44780ioClass/hd44780_pinIO.h> // include i/o class header
|
||||
|
||||
// declare Arduino pins used for LCD functions
|
||||
// and the lcd object
|
||||
|
||||
// Note: this can be with or without backlight control:
|
||||
|
||||
// without backlight control:
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7; // esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14; // esp32 espduino32 D1 R32 (uno form factor)
|
||||
#else
|
||||
const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7; // for all other devices
|
||||
#endif
|
||||
hd44780_pinIO lcd(rs, en, db4, db5, db6, db7);
|
||||
|
||||
//with backlight control:
|
||||
// backlight control requires two additional parameters
|
||||
// - an additional pin to control the backlight
|
||||
// - backlight active level which tells the library the level
|
||||
// needed to turn on the backlight.
|
||||
// note: If the backlight control pin supports PWM, dimming can be done
|
||||
// using setBacklight(dimvalue);
|
||||
//
|
||||
// WARNING: some lcd keypads have a broken backlight circuit
|
||||
// If you have a lcd keypad, it is recommended that you first run the
|
||||
// LCDKeypadCheck sketch to verify that the backlight circuitry
|
||||
// is ok before enabling backlight control.
|
||||
// However, the hd44780_PinIO class will autodetect the issue and
|
||||
// work around it in s/w. If the backlight circuitry is broken,
|
||||
// dimming will not be possible even if the backlight pin supports PWM.
|
||||
//
|
||||
#if defined (ARDUINO_ARCH_ESP8266)
|
||||
// esp8266 Lolin/Wemos D1 R1 (uno form factor)
|
||||
//const int rs=D8, en=D9, db4=D4, db5=D5, db6=D6, db7=D7, bl=D10, blLevel=HIGH;
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
// esp32 espduino32 D1 R32 (uno form factor)
|
||||
// note: GPIO12 needs a pulldown resistor
|
||||
//const int rs=12, en=13, db4=17, db5=16, db6=27, db7=14, bl=5, blLevel=HIGH;
|
||||
#else
|
||||
//const int rs=8, en=9, db4=4, db5=5, db6=6, db7=7, bl=10, blLevel=HIGH;
|
||||
#endif
|
||||
//hd44780_pinIO lcd(rs, en, db4, db5, db6, db7, bl, blLevel);
|
||||
|
||||
// tell the hd44780 sketch the lcd object has been declared
|
||||
#define HD44780_LCDOBJECT
|
||||
|
||||
// include the hd44780 library sketch source code
|
||||
#include <examples/hd44780examples/lcdproc/lcdproc.ino>
|
||||
Reference in New Issue
Block a user