/* LedDisplay -- controller library for Avago HCMS-297x displays -- version 0.3 27 Jan 2010 ML: extended a bit to support up to four (4) 8 character displays. Copyright (c) 2009 Tom Igoe. Some right reserved. Revisions on version 0.2 and 0.3 by Mark Liebman, 27 Jan 2010 * extended a bit to support up to four (4) 8 character displays. vim: set ts=4: Controls an Avago HCMS29xx display. This display has 8 characters, each 5x7 LEDs This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Version changes: * Version 3 adds support for multiple displays. Just change the displayLength to the total number of characters (for example, 3 8-character displays, displayLength = 24). */ // ensure this library description is only included once #ifndef LedDisplay_h #define LedDisplay_h // supports up to four 8 character displays, connected as documented here, // under "Multiple Displays" http://playground.arduino.cc/Main/LedDisplay #define LEDDISPLAY_MAXCHARS 32 // include types & constants of Wiring core API #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif // Arduino Print library provides print() and println() functionality #include "Print.h" // library interface description class LedDisplay : public Print { public: // constructor: LedDisplay(uint8_t _dataPin, uint8_t _registerSelect, uint8_t _clockPin, uint8_t _chipEnable, uint8_t _resetPin, uint8_t _displayLength); // initializer method: void begin(); void clear(); // clear the display void home(); // set cursor to far left hand position void setCursor(int whichPosition); // set cursor to any position int getCursor(); // get the cursor position #if ARDUINO >= 100 virtual size_t write(uint8_t b); // write a character to the display and advance cursor #else virtual void write(uint8_t b); // write a character to the display and advance cursor #endif using Print::write; void setString(const char* _stringToDisplay); // set the displayString variable const char * getString(); // get the displayString int stringLength(); // get the length of displayString void scroll(int direction); // scroll whatever string is stored in library's displayString variable void setBrightness(uint8_t bright); // set display brightness, 0 - 15 // Control register setters. for addressing the display directly: void loadControlRegister(uint8_t dataByte); void loadAllControlRegisters(uint8_t dataByte); void loadDotRegister(); int version(void); // return library version private: // Character display setters: void writeCharacter(char whatCharacter, byte whatPosition); // write a character to a buffer which will // be sent to the display by loadDotRegister() int cursorPos; // position of the cursor uint8_t dotRegister[LEDDISPLAY_MAXCHARS * 5]; // 5 bytes per character * maxchars // Define pins for the LED display: uint8_t dataPin; // connects to the display's data in uint8_t registerSelect; // the display's register select pin uint8_t clockPin; // the display's clock pin uint8_t chipEnable; // the display's chip enable pin uint8_t resetPin; // the display's reset pin uint8_t displayLength; // number of bytes needed to pad the string char stringBuffer[LEDDISPLAY_MAXCHARS+1]; // buffer to hold initial display string const char * displayString; // string for scrolling }; #endif