123 lines
3.7 KiB
C++
123 lines
3.7 KiB
C++
#pragma once
|
|
|
|
#include "hardware/i2c.h"
|
|
#include "hardware/gpio.h"
|
|
|
|
namespace pimoroni {
|
|
|
|
class LTP305 {
|
|
//--------------------------------------------------
|
|
// Constants
|
|
//--------------------------------------------------
|
|
public:
|
|
static constexpr uint8_t WIDTH = 10;
|
|
static constexpr uint8_t HEIGHT = 7;
|
|
|
|
static const uint8_t DEFAULT_I2C_ADDRESS = 0x61;
|
|
static const uint8_t I2C_ADDRESS_ALTERNATE1 = 0x62;
|
|
static const uint8_t I2C_ADDRESS_ALTERNATE2 = 0x63;
|
|
static const uint8_t DEFAULT_SDA_PIN = 20;
|
|
static const uint8_t DEFAULT_SCL_PIN = 21;
|
|
|
|
static const uint8_t DEFAULT_BRIGHTNESS = 64;
|
|
static const uint8_t MAX_BRIGHTNESS = 127;
|
|
static const uint8_t DEFAULT_ON_LEVEL = 0x7f;
|
|
|
|
private:
|
|
static const uint8_t MODE = 0b00011000;
|
|
static const uint8_t OPTS = 0b00001110; // 1110 = 35mA, 0000 = 40mA
|
|
|
|
static const uint8_t CMD_BRIGHTNESS = 0x19;
|
|
static const uint8_t CMD_MODE = 0x00;
|
|
static const uint8_t CMD_UPDATE = 0x0C;
|
|
static const uint8_t CMD_OPTIONS = 0x0D;
|
|
|
|
static const uint8_t CMD_MATRIX_L = 0x0E;
|
|
static const uint8_t CMD_MATRIX_R = 0x01;
|
|
|
|
static const uint8_t BUFFER_LENGTH = 8;
|
|
static const uint8_t BUFFER_CMD = 1;
|
|
|
|
|
|
//--------------------------------------------------
|
|
// Variables
|
|
//--------------------------------------------------
|
|
private:
|
|
i2c_inst_t *i2c = i2c0;
|
|
|
|
// interface pins with our standard defaults where appropriate
|
|
int8_t address = DEFAULT_I2C_ADDRESS;
|
|
int8_t sda = DEFAULT_SDA_PIN;
|
|
int8_t scl = DEFAULT_SCL_PIN;
|
|
|
|
uint8_t brightness = DEFAULT_BRIGHTNESS;
|
|
|
|
//Including CMD in buffer to make transmission easier later on
|
|
uint8_t buf_matrix_left[BUFFER_CMD + BUFFER_LENGTH] = { CMD_MATRIX_L, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
uint8_t buf_matrix_right[BUFFER_CMD + BUFFER_LENGTH] = { CMD_MATRIX_R, 0, 0, 0, 0, 0, 0, 0, 0 };
|
|
|
|
/* How matrix buffers look with all leds illuminated
|
|
buf_matrix_left = {
|
|
// Row 7654321
|
|
0b01111111, // col 1, bottom = msb
|
|
0b01111111, // col 2
|
|
0b01111111, // col 3
|
|
0b01111111, // col 4
|
|
0b01111111, // col 5
|
|
0b00000000,
|
|
0b00000000,
|
|
0b01000000 # bit 7 = decimal dot
|
|
};
|
|
|
|
buf_matrix_right = {
|
|
// Col 12345
|
|
0b00011111, // row 1
|
|
0b00011111, // row 2
|
|
0b00011111, // row 3
|
|
0b00011111, // row 4
|
|
0b00011111, // row 5
|
|
0b00011111, // row 6
|
|
0b10011111, // row 7 + bit 8 = decimal dot
|
|
0b00000000
|
|
};*/
|
|
|
|
|
|
//--------------------------------------------------
|
|
// Constructors/Destructor
|
|
//--------------------------------------------------
|
|
public:
|
|
LTP305() {}
|
|
|
|
LTP305(uint8_t address) :
|
|
address(address) {}
|
|
|
|
LTP305(i2c_inst_t *i2c, uint8_t address, uint8_t sda, uint8_t scl) :
|
|
i2c(i2c), address(address), sda(sda), scl(scl) {}
|
|
|
|
|
|
//--------------------------------------------------
|
|
// Methods
|
|
//--------------------------------------------------
|
|
public:
|
|
bool init();
|
|
|
|
i2c_inst_t* get_i2c() const;
|
|
int get_address() const;
|
|
int get_sda() const;
|
|
int get_scl() const;
|
|
|
|
void set_brightness(uint8_t brightness, bool update = false);
|
|
void set_decimal(bool left = false, bool right = false);
|
|
void set_pixel(uint8_t x, uint8_t y, bool c);
|
|
void set_character(uint8_t x, uint16_t ch);
|
|
void set_image(const uint8_t *image, uint16_t image_width, uint16_t image_height,
|
|
uint16_t offset_x, uint16_t offset_y, bool wrap = false, bool bg = false, uint8_t on_level = DEFAULT_ON_LEVEL, uint8_t padding = 0);
|
|
void clear();
|
|
void show();
|
|
|
|
private:
|
|
void i2c_reg_write_uint8(uint8_t reg, uint8_t value);
|
|
};
|
|
|
|
}
|