|
|
|
#ifndef twiLCD_H
|
|
|
|
#define twiLCD_H
|
|
|
|
#include "../global.h"
|
|
|
|
|
|
|
|
#include "../configs/LCD/lcd.h"
|
|
|
|
#include "../configs/twiLCD/twiLCD.h"
|
|
|
|
|
|
|
|
#ifndef PCF8574_A0
|
|
|
|
#define PCF8574_A0 0
|
|
|
|
#endif
|
|
|
|
#ifndef PCF8574_A1
|
|
|
|
#define PCF8574_A1 0
|
|
|
|
#endif
|
|
|
|
#ifndef PCF8574_A2
|
|
|
|
#define PCF8574_A2 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define PCF8574_BASE_ADDR B00100000
|
|
|
|
#define PCF8574_WADDR PCF8574_BASE_ADDR | (PCF8574_A0 * B00000001) | (PCF8574_A1 * B00000010) | (PCF8574_A2 * B00000100)
|
|
|
|
#define PCF8574_RADDR PCF8574_WADDR | 0x01
|
|
|
|
|
|
|
|
#define TWI_LCD_RS 0 /* RS pin */
|
|
|
|
#define TWI_LCD_RW 1 /* RW pin */
|
|
|
|
#define TWI_LCD_ENABLE 2 /* Enable pin */
|
|
|
|
#ifdef TWI_LCD_CTRL
|
|
|
|
#ifdef TWI_LCD_BL_PWM
|
|
|
|
#define TWI_LCD_BACKLIGHT 9 /* This is an Arduino pin number! */
|
|
|
|
#else
|
|
|
|
#define TWI_LCD_BACKLIGHT 3 /* Backlight pin */
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define TWI_LCD_CONTROL B00000111 /* Mask for the 3 control bits (E, RS, RW) */
|
|
|
|
#define TWI_LCD_DATA B11110000 /* Mask for the 4 bit word */
|
|
|
|
#define TWI_LCD_DATAH B11110000
|
|
|
|
#define TWI_LCD_DATAL B00001111
|
|
|
|
#define TWI_LCD_BUSY B00001000
|
|
|
|
|
|
|
|
#ifndef printString
|
|
|
|
#define printString(str) printString_P(PSTR(str))
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef LCD_USE_CLRSCREEN_CALLBACK
|
|
|
|
volatile static voidFuncPtr twiLCDcallbackFunc[1];
|
|
|
|
#endif
|
|
|
|
|
|
|
|
class twiLCD {
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
* Constructor: initializes this class
|
|
|
|
**/
|
|
|
|
twiLCD();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* LCD Initilization method
|
|
|
|
**/
|
|
|
|
void Init();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* writeData: write a byte of data to the LCD
|
|
|
|
* @param: value: the byte to write
|
|
|
|
**/
|
|
|
|
void writeData(uint8_t);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* clearScreen: clears the LCD and resets the cursor position to 0,0
|
|
|
|
**/
|
|
|
|
void clearScreen(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* printString_P: prints a program string to the LCD
|
|
|
|
* To call this function, use the LCD.printString() macro!
|
|
|
|
**/
|
|
|
|
void printString_P(const char *);
|
|
|
|
|
|
|
|
#ifdef LCD_USE_CLRSCREEN_CALLBACK
|
|
|
|
void clrsSetCallback(void (*)(void));
|
|
|
|
#endif
|
|
|
|
/**
|
|
|
|
* These function are only available on the mega168 for space reasons
|
|
|
|
**/
|
|
|
|
#if defined(__AVR_ATmega168__) && !defined(TWI_LCD_SMALL)
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Methods for dealing with LCD timeout
|
|
|
|
* Returns true if the time is expired
|
|
|
|
**/
|
|
|
|
#ifdef TWI_LCD_USE_TIMEOUT
|
|
|
|
boolean checkTimeout(void);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Backlight control functions
|
|
|
|
* Optionally enabled above
|
|
|
|
**/
|
|
|
|
#ifdef TWI_LCD_CTRL
|
|
|
|
/**
|
|
|
|
* backlightOn: Turn on the backlight at full brightness
|
|
|
|
**/
|
|
|
|
void backlightOn(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* backlightOff: turn off the LCD backlight
|
|
|
|
**/
|
|
|
|
void backlightOff(void);
|
|
|
|
|
|
|
|
// PWM Backlight Control
|
|
|
|
#if defined(TWI_LCD_BL_PWM) || defined(TWI_LCD_DPOT_CTRL)
|
|
|
|
/**
|
|
|
|
* backlightOn: turns on the backlight with a specific brightness
|
|
|
|
**/
|
|
|
|
void backlightOn(uint8_t);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TWI_LCD_DPOT_CTRL
|
|
|
|
/**
|
|
|
|
* setBrightness: sets the brightness level using a digital pot
|
|
|
|
* If no param is passed TWI_LCD_DB_LEVEL is used
|
|
|
|
**/
|
|
|
|
void setBrightness(void);
|
|
|
|
void setBrightness(uint8_t);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* setCursor: set cursor a position "index"
|
|
|
|
**/
|
|
|
|
void setCursor(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* moveToXY: moves the cursor to position (row,column)
|
|
|
|
**/
|
|
|
|
void moveToXY(uint8_t, uint8_t);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Turn off the LCD (will turn off the backlight if control is enabled)
|
|
|
|
**/
|
|
|
|
void turnOff(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* goToLine: Allows to move at the beginning of a specific line
|
|
|
|
**/
|
|
|
|
void goToLine(uint8_t);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* goToNextLine: goes to the next line, wraps arround at the end
|
|
|
|
**/
|
|
|
|
void goToNextLine(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* goHome: goes to position (0,0)
|
|
|
|
**/
|
|
|
|
void goHome(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* clearLine: clears the current line
|
|
|
|
**/
|
|
|
|
void clearLine(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* shiftDisplayLeft: shift all lines of the display one position to the left
|
|
|
|
**/
|
|
|
|
void shiftDisplayLeft(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* shiftDisplayRight: shift all lines of the display one position to the right
|
|
|
|
**/
|
|
|
|
void shiftDisplayRight(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getCurrentLine: returns the current line
|
|
|
|
**/
|
|
|
|
uint8_t getCurrentLine(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* getCurrentStatus: returns whether the display is on or off
|
|
|
|
**/
|
|
|
|
bool getCurrentStatus(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* printInteger: writes an interger as text on the lcd
|
|
|
|
* The second version is only good for intergers < 99 and will add a leading zero
|
|
|
|
**/
|
|
|
|
void printInteger(int16_t);
|
|
|
|
void printInteger(uint16_t integer, bool leadingZero);
|
|
|
|
#endif
|
|
|
|
private:
|
|
|
|
#if defined(__AVR_ATmega168__) && !defined(TWI_LCD_SMALL)
|
|
|
|
#ifdef TWI_LCD_USE_TIMEOUT
|
|
|
|
unsigned long previousMillis;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(TWI_LCD_CTRL) && !defined(TWI_LCD_BL_PWM)
|
|
|
|
/**
|
|
|
|
* backlightStatus: used to keep track of the backlight status
|
|
|
|
**/
|
|
|
|
uint8_t backlightStatus;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* currentLine: keeps track of the current line
|
|
|
|
**/
|
|
|
|
uint8_t currentLine;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* displayStatus: keeps track of whether the display is on or off
|
|
|
|
**/
|
|
|
|
bool displayStatus;
|
|
|
|
#endif
|
|
|
|
/**
|
|
|
|
* sendPulse: sends a byte of data with the appropiate Enable pulse
|
|
|
|
**/
|
|
|
|
void sendPulse(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* writeToPCF: writes a new byte of data using twi
|
|
|
|
* This function is used to preserve some data through writes
|
|
|
|
* such as when bit3 of the expander is used to control the backlight
|
|
|
|
**/
|
|
|
|
void writeToPCF(int);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* writeCommand: Writes an LCD command
|
|
|
|
* @param: value: the value to write
|
|
|
|
**/
|
|
|
|
void writeCommand(uint8_t value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* checkLCDBusy: reads the busy state bit from the LCD
|
|
|
|
**/
|
|
|
|
boolean checkLCDBusy(void);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Define the object's name
|
|
|
|
**/
|
|
|
|
extern twiLCD LCD;
|
|
|
|
|
|
|
|
#endif
|