diff --git a/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp b/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp index 2506fea..e9e16c1 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp +++ b/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.cpp @@ -1,7 +1,10 @@ +// LiquidCrystal_I2C V2.0 + #include "LiquidCrystal_I2C.h" #include -#include -#include +#include "Wire.h" +#include "Arduino.h" + // When the display powers up, it is configured as follows: // @@ -22,55 +25,64 @@ // can't assume that its in that state when a sketch starts (and the // 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; - _cols = lcd_cols; - _rows = lcd_rows; - _charsize = charsize; - _backlightval = LCD_BACKLIGHT; + _Addr = lcd_Addr; + _cols = lcd_cols; + _rows = lcd_rows; + _backlightval = LCD_NOBACKLIGHT; } -void LiquidCrystal_I2C::begin() { +void LiquidCrystal_I2C::init(){ + init_priv(); +} + +void LiquidCrystal_I2C::init_priv() +{ Wire.begin(); _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; } + _numlines = lines; // 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; } // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // 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 - delay(50); - + delayMicroseconds(50000); + // Now we pull both RS and R/W low to begin commands expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) delay(1000); - //put the LCD into 4 bit mode + //put the LCD into 4 bit mode // this is according to the hitachi HD44780 datasheet // figure 24, pg 46 - + // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03 << 4); + write4bits(0x03); delayMicroseconds(4500); // wait min 4.1ms - + // second try - write4bits(0x03 << 4); + write4bits(0x03); delayMicroseconds(4500); // wait min 4.1ms - + // third go! - write4bits(0x03 << 4); + write4bits(0x03); delayMicroseconds(150); - + // finally, set to 4-bit interface - write4bits(0x02 << 4); + write4bits(0x02); + // set # lines, font size, etc. command(LCD_FUNCTIONSET | _displayfunction); @@ -89,8 +101,11 @@ void LiquidCrystal_I2C::begin() { command(LCD_ENTRYMODESET | _displaymode); home(); + } + + /********** high level commands, for the user! */ void LiquidCrystal_I2C::clear(){ 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){ int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if (row > _rows) { - row = _rows-1; // we count rows starting w/0 + if ( row > _numlines ) { + row = _numlines-1; // we count rows starting w/0 } command(LCD_SETDDRAMADDR | (col + row_offsets[row])); } @@ -193,6 +208,8 @@ void LiquidCrystal_I2C::backlight(void) { expanderWrite(0); } + + /*********** mid level commands, for sending data/cmds */ inline void LiquidCrystal_I2C::command(uint8_t value) { @@ -201,17 +218,19 @@ inline void LiquidCrystal_I2C::command(uint8_t value) { inline size_t LiquidCrystal_I2C::write(uint8_t value) { send(value, Rs); + return 0; } + /************ low level data pushing commands **********/ // write either command or data void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { - uint8_t highnib=value&0xf0; - uint8_t lownib=(value<<4)&0xf0; + uint8_t highnib=value>>4; + uint8_t lownib=value & 0x0F; write4bits((highnib)|mode); - write4bits((lownib)|mode); + write4bits((lownib)|mode); } void LiquidCrystal_I2C::write4bits(uint8_t value) { @@ -219,28 +238,47 @@ void LiquidCrystal_I2C::write4bits(uint8_t value) { pulseEnable(value); } -void LiquidCrystal_I2C::expanderWrite(uint8_t _data){ - Wire.beginTransmission(_addr); +void LiquidCrystal_I2C::expanderWrite(uint8_t _data){ + Wire.beginTransmission(_Addr); Wire.write((int)(_data) | _backlightval); Wire.endTransmission(); } -void LiquidCrystal_I2C::pulseEnable(uint8_t _data){ - expanderWrite(_data | En); // En high - delayMicroseconds(1); // enable pulse must be >450ns +void LiquidCrystal_I2C::pulseEnable(uint8_t _data){ + expanderWrite(_data | En); // En high + delayMicroseconds(1); // enable pulse must be >450ns - expanderWrite(_data & ~En); // En low - delayMicroseconds(50); // commands need > 37us to settle + expanderWrite(_data & ~En); // En low + 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){ - createChar(char_num, rows); + createChar(char_num, rows); } void LiquidCrystal_I2C::setBacklight(uint8_t new_val){ - if (new_val) { + if(new_val){ backlight(); // turn backlight on - } else { + }else{ 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 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){} + + \ No newline at end of file diff --git a/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h b/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h index df8ac7d..9e4054d 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h +++ b/STM32F1/libraries/LiquidCrystal_I2C/LiquidCrystal_I2C.h @@ -1,8 +1,11 @@ -#ifndef FDB_LIQUID_CRYSTAL_I2C_H -#define FDB_LIQUID_CRYSTAL_I2C_H +// LiquidCrystal_I2C V2.0 + +#ifndef LiquidCrystal_I2C_h +#define LiquidCrystal_I2C_h #include -#include +#include "Print.h" +#include // commands #define LCD_CLEARDISPLAY 0x01 @@ -43,122 +46,78 @@ #define LCD_5x8DOTS 0x00 // flags for backlight control -#define LCD_BACKLIGHT 0x08 -#define LCD_NOBACKLIGHT 0x00 +#define LCD_BACKLIGHT 0x00 +#define LCD_NOBACKLIGHT 0x80 -#define En B00000100 // Enable bit -#define Rw B00000010 // Read/Write bit -#define Rs B00000001 // Register select bit +#define En B00010000 // Enable bit +#define Rw B00100000 // Read/Write 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 { public: - /** - * Constructor - * - * @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); + LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); + void clear(); + void home(); + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void printLeft(); + void printRight(); + void leftToRight(); + void rightToLeft(); + void shiftIncrement(); + void shiftDecrement(); + void noBacklight(); + void backlight(); + void autoscroll(); + void noAutoscroll(); + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); + virtual size_t write(uint8_t); + void command(uint8_t); + void init(); - /** - * 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(); - - /** - * Next print/write operation will will start from the first position on the LCD display. - */ - void home(); +////compatibility API function aliases +void blink_on(); // alias for blink() +void blink_off(); // alias for noBlink() +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[]); - /** - * 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(); - - /** - * 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(); +////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); + - /** - * Do not blink the cursor indicator. - */ - void noBlink(); - - /** - * Start blinking the cursor indicator. - */ - void blink(); - - /** - * Do not show a cursor indicator. - */ - 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 scrollDisplayLeft(); - void scrollDisplayRight(); - void printLeft(); - void printRight(); - void leftToRight(); - void rightToLeft(); - void shiftIncrement(); - void shiftDecrement(); - void noBacklight(); - void backlight(); - void autoscroll(); - void noAutoscroll(); - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); - virtual size_t write(uint8_t); - void command(uint8_t); - - inline void blink_on() { blink(); } - inline void blink_off() { noBlink(); } - inline void cursor_on() { cursor(); } - inline void cursor_off() { noCursor(); } - -// 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: - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void expanderWrite(uint8_t); - void pulseEnable(uint8_t); - uint8_t _addr; - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - uint8_t _cols; - uint8_t _rows; - uint8_t _charsize; - uint8_t _backlightval; + void init_priv(); + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void expanderWrite(uint8_t); + void pulseEnable(uint8_t); + uint8_t _Addr; + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + uint8_t _numlines; + uint8_t _cols; + uint8_t _rows; + uint8_t _backlightval; }; -#endif // FDB_LIQUID_CRYSTAL_I2C_H +#endif diff --git a/STM32F1/libraries/LiquidCrystal_I2C/README.md b/STM32F1/libraries/LiquidCrystal_I2C/README.md deleted file mode 100644 index 5d25c2e..0000000 --- a/STM32F1/libraries/LiquidCrystal_I2C/README.md +++ /dev/null @@ -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 \ No newline at end of file diff --git a/STM32F1/libraries/LiquidCrystal_I2C/examples/BlinkingCursor/BlinkingCursor.ino b/STM32F1/libraries/LiquidCrystal_I2C/examples/BlinkingCursor/BlinkingCursor.ino deleted file mode 100644 index addc18d..0000000 --- a/STM32F1/libraries/LiquidCrystal_I2C/examples/BlinkingCursor/BlinkingCursor.ino +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -// 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); - } -} diff --git a/STM32F1/libraries/LiquidCrystal_I2C/examples/CustomChars/CustomChars.ino b/STM32F1/libraries/LiquidCrystal_I2C/examples/CustomChars/CustomChars.ino index 1b8de06..182f0f7 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/examples/CustomChars/CustomChars.ino +++ b/STM32F1/libraries/LiquidCrystal_I2C/examples/CustomChars/CustomChars.ino @@ -1,65 +1,60 @@ -#include -#include - -uint8_t bell[8] = {0x4, 0xe, 0xe, 0xe, 0x1f, 0x0, 0x4}; -uint8_t note[8] = {0x2, 0x3, 0x2, 0xe, 0x1e, 0xc, 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 duck[8] = {0x0, 0xc, 0x1d, 0xf, 0xf, 0x6, 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 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(0x27, 16, 2); - -void setup() -{ - lcd.begin(); - lcd.backlight(); - - lcd.createChar(0, bell); - lcd.createChar(1, note); - lcd.createChar(2, clock); - lcd.createChar(3, heart); - lcd.createChar(4, duck); - lcd.createChar(5, check); - lcd.createChar(6, cross); - lcd.createChar(7, retarrow); - lcd.home(); - - lcd.print("Hello world..."); - lcd.setCursor(0, 1); - lcd.print(" i "); - lcd.write(3); - lcd.print(" arduinos!"); - delay(5000); - displayKeyCodes(); -} - -// display all keycodes -void displayKeyCodes(void) { - uint8_t i = 0; - - while (1) { - lcd.clear(); - lcd.print("Codes 0x"); - lcd.print(i, HEX); - lcd.print("-0x"); - lcd.print(i + 16, HEX); - lcd.setCursor(0, 1); - - for (int j = 0; j < 16; j++) { - lcd.write(i + j); - } - i += 16; - - delay(4000); - } -} - -void loop() -{ - // Do nothing here... -} - +#include +#include + +uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; +uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,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 duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,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 retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; + +LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + lcd.backlight(); + + lcd.createChar(0, bell); + lcd.createChar(1, note); + lcd.createChar(2, clock); + lcd.createChar(3, heart); + lcd.createChar(4, duck); + lcd.createChar(5, check); + lcd.createChar(6, cross); + lcd.createChar(7, retarrow); + lcd.home(); + + lcd.print("Hello world..."); + lcd.setCursor(0, 1); + lcd.print(" i "); + lcd.write(3); + lcd.print(" arduinos!"); + delay(5000); + displayKeyCodes(); + +} + +// display all keycodes +void displayKeyCodes(void) { + uint8_t i = 0; + while (1) { + lcd.clear(); + lcd.print("Codes 0x"); lcd.print(i, HEX); + lcd.print("-0x"); lcd.print(i+16, HEX); + lcd.setCursor(0, 1); + for (int j=0; j<16; j++) { + lcd.write(i+j); + } + i+=16; + + delay(4000); + } +} + +void loop() +{ + +} \ No newline at end of file diff --git a/STM32F1/libraries/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.ino b/STM32F1/libraries/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.ino index da83de3..c4c9b4c 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.ino +++ b/STM32F1/libraries/LiquidCrystal_I2C/examples/HelloWorld/HelloWorld.ino @@ -1,20 +1,17 @@ -#include -#include - -// 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(); - - // Turn on the blacklight and print a message. - lcd.backlight(); - lcd.print("Hello, world!"); -} - -void loop() -{ - // Do nothing here... -} +#include +#include + +LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + + // Print a message to the LCD. + lcd.backlight(); + lcd.print("Hello, world!"); +} + +void loop() +{ +} diff --git a/STM32F1/libraries/LiquidCrystal_I2C/examples/MultipleLcd/MultipleLcd.ino b/STM32F1/libraries/LiquidCrystal_I2C/examples/MultipleLcd/MultipleLcd.ino new file mode 100644 index 0000000..aef2567 --- /dev/null +++ b/STM32F1/libraries/LiquidCrystal_I2C/examples/MultipleLcd/MultipleLcd.ino @@ -0,0 +1,24 @@ +#include +#include + +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() +{ +} diff --git a/STM32F1/libraries/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.ino b/STM32F1/libraries/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.ino index 4adc976..5ebb147 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.ino +++ b/STM32F1/libraries/LiquidCrystal_I2C/examples/SerialDisplay/SerialDisplay.ino @@ -1,34 +1,31 @@ -/** - * Displays text sent over the serial port (e.g. from the Serial Monitor) on - * an attached LCD. - */ -#include -#include - -// Set the LCD address to 0x27 for a 16 chars and 2 line display -LiquidCrystal_I2C lcd(0x27, 16, 2); - -void setup() -{ - lcd.begin(); - lcd.backlight(); - - // Initialize the serial port at a speed of 9600 baud - Serial.begin(9600); -} - -void loop() -{ - // If characters arrived over the serial port... - if (Serial.available()) { - // Wait a bit for the entire message to arrive - delay(100); - // Clear the screen - lcd.clear(); - - // Write all characters received with the serial port to the LCD. - while (Serial.available() > 0) { - lcd.write(Serial.read()); - } - } -} +/* + * Displays text sent over the serial port (e.g. from the Serial Monitor) on + * an attached LCD. + */ +#include +#include + +LiquidCrystal_I2C lcd(0x20,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + lcd.backlight(); + Serial.begin(9600); +} + +void loop() +{ + // when characters arrive over the serial port... + if (Serial.available()) { + // wait a bit for the entire message to arrive + delay(100); + // clear the screen + lcd.clear(); + // read all the available characters + while (Serial.available() > 0) { + // display each character to the LCD + lcd.write(Serial.read()); + } + } +} diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/BC557.pdf b/STM32F1/libraries/LiquidCrystal_I2C/info/BC557.pdf new file mode 100644 index 0000000..05790db Binary files /dev/null and b/STM32F1/libraries/LiquidCrystal_I2C/info/BC557.pdf differ diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/Image.jpg b/STM32F1/libraries/LiquidCrystal_I2C/info/Image.jpg new file mode 100644 index 0000000..a72b23d Binary files /dev/null and b/STM32F1/libraries/LiquidCrystal_I2C/info/Image.jpg differ diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/PCF8574P.pdf b/STM32F1/libraries/LiquidCrystal_I2C/info/PCF8574P.pdf new file mode 100644 index 0000000..e164e76 Binary files /dev/null and b/STM32F1/libraries/LiquidCrystal_I2C/info/PCF8574P.pdf differ diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/Schematic_diagram.jpg b/STM32F1/libraries/LiquidCrystal_I2C/info/Schematic_diagram.jpg new file mode 100644 index 0000000..e818b4b Binary files /dev/null and b/STM32F1/libraries/LiquidCrystal_I2C/info/Schematic_diagram.jpg differ diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/notes_for_pollin_interface.txt b/STM32F1/libraries/LiquidCrystal_I2C/info/notes_for_pollin_interface.txt new file mode 100644 index 0000000..32072c7 --- /dev/null +++ b/STM32F1/libraries/LiquidCrystal_I2C/info/notes_for_pollin_interface.txt @@ -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 \ No newline at end of file diff --git a/STM32F1/libraries/LiquidCrystal_I2C/info/readme.txt b/STM32F1/libraries/LiquidCrystal_I2C/info/readme.txt new file mode 100644 index 0000000..21dd8ae --- /dev/null +++ b/STM32F1/libraries/LiquidCrystal_I2C/info/readme.txt @@ -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 \ No newline at end of file diff --git a/STM32F1/libraries/LiquidCrystal_I2C/keywords.txt b/STM32F1/libraries/LiquidCrystal_I2C/keywords.txt index 8c450a9..198480f 100644 --- a/STM32F1/libraries/LiquidCrystal_I2C/keywords.txt +++ b/STM32F1/libraries/LiquidCrystal_I2C/keywords.txt @@ -1,5 +1,6 @@ ########################################### # Syntax Coloring Map For LiquidCrystal_I2C +# Version 2.0 ########################################### ###########################################