Files
libpigpio/piglcd.h
2025-08-05 22:33:23 +02:00

166 lines
3.4 KiB
C++

/*****************************************************************************
source::worx libPiGPio
Copyright © 2022 c.holzheuer
chris@sourceworx.org
This program 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; either version 2 of the License, or
(at your option) any later version.
Uses:
pigpiod_if2 by joan2937, pigpio @ abyz.me.uk
https://abyz.me.uk/rpi/pigpio
sigslot by 2017 Pierre-Antoine Lacaze
https://github.com/palacaze/sigslot
***************************************************************************/
#ifndef PIGLCD_H
#define PIGLCD_H
//#include <unistd.h>
//#include <inttypes.h>
#include <pigi2cnode.h>
/*
"""
This class provides simple functions to display text on an I2C LCD
based on the PCF8574T I2C 8-bit port expander.
PCF8574T P7 P6 P5 P4 P3 P2 P1 P0
HD44780 B7 B6 B5 B4 BL E RW RS
This code defaults to working with an adapter with the above
configuration.
If yours is different you will have to specify the mapping
when you instantiate the LCD.
"""
"""
Commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80
Flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00
Flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00
Flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00
Flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00
Flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00
"""
*/
/**
* @brief The pigLCD class für //HD44780
* Back-Port von python, siehe: https://abyz.me.uk/rpi/pigpio/code/i2c_lcd_py.zip
*
*/
class pigLCD : public pigI2CNode
{
//HD44780
public:
pigLCD() = default;
pigLCD( i2c_addr_t addr, i2c_bus_t bus = 1 );
virtual ~pigLCD();
void init( i2c_addr_t addr, i2c_bus_t bus=1, int width=16, bool bl=true,
uint8_t RS=0, uint8_t RW=1, uint8_t E=2, uint8_t BL=3, uint8_t B4=4 );
void set_backlight( bool bl );
void move_to( int row, int col );
void write( const char c );
void write( const std::string text );
void write( int row, int col, const std::string text );
// inwieweit notwendig?
void reset();
protected:
void put_byte( uint8_t MSb, uint8_t LSb );
void put_inst( uint8_t bits );
void put_data( uint8_t bits );
uint8_t _LCD_ROW[4] = { 0x80, 0xC0, 0x94, 0xD4 };
bool _backlight = false;
int _width = 16;
//?? Type?
uint8_t _RS;
uint8_t _E;
uint8_t _BL;
uint8_t _B4;
/*
// GPIO chip i2c address
uint8_t i2c=0x27;
// Control line PINs
uint8_t en=2;
uint8_t rw=1;
uint8_t rs=0;
// Data line PINs
uint8_t d4=4;
uint8_t d5=5;
uint8_t d6=6;
uint8_t d7=7;
// Backlight PIN
uint8_t bl=3;
// LCD display size (1x16, 2x16, 4x20)
uint8_t rows=2;
uint8_t cols=16;
*/
};
#endif // PIGLCD_H