Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
# MiniEncoderC
# M5Hat-Mini-EncoderC

## Overview

Contains case programs of M5Stack MiniEncoderC.
### SKU:U157

Arduino library to control M5Stack Hat-Mini-EncoderC.

## Related Link

- [Hat Mini EncoderC](https://docs.m5stack.com/en/hat/MiniEncoderC%20Hat)
- [M5Unified (optional)](https://github.com/m5stack/M5Unified)

## Related Link

- [Docment - MiniEncoderC](https://docs.m5stack.com/en/hat/MiniEncoderC%20Hat)
- [I2C Protocol](https://github.com/m5stack/M5Unit-MiniEncoderC/blob/main/docs/MiniEncoderC_I2C_Protocol.pdf)

## License

[MiniEncoderC - MIT](LICENSE)
[M5HatMiniEncoderC - MIT](LICENSE)

72 changes: 35 additions & 37 deletions examples/getValue/getValue.ino
Original file line number Diff line number Diff line change
@@ -1,72 +1,70 @@

#include <M5StickCPlus.h>
#include "Unit_MiniEncoderC.h"
#include "M5Unified.h"
#include "M5HatMiniEncoderC.h"

TFT_eSprite tftSprite = TFT_eSprite(&M5.Lcd);
UNIT_MINIENCODERC sensor;
M5Canvas canvas(&M5.Lcd);
M5HatMiniEncoderC encoder;

uint16_t delay_time = 0;
int32_t last_value = 0;
int32_t last_value = 0;

uint8_t i2c_address = 0;

void page_get_encoder(void) {
int32_t encoder_value = sensor.getEncoderValue();
bool btn_status = sensor.getButtonStatus();
int32_t encoder_value = encoder.getEncoderValue();
bool btn_status = encoder.getButtonStatus();
Serial.println(encoder_value);
if (last_value != encoder_value) {
if (last_value > encoder_value) {
sensor.setLEDColor(1, 0x000011);
encoder.setLEDColor(0x000011); // Blue
} else {
sensor.setLEDColor(2, 0x110000);
encoder.setLEDColor(0x110000); // Red
}
last_value = encoder_value;
} else {
// sensor.setLEDColor(0, 0x001100);
// encoder.setLEDColor(0x001100);
}
if (!btn_status) {
sensor.setLEDColor(0, 0x001100);
encoder.setLEDColor(0x001100);
}
tftSprite.fillRect(0, 0, 135, 90, BLACK);
tftSprite.setTextColor(WHITE);
tftSprite.drawString("BTN:" + String(btn_status), 10, 10);
tftSprite.drawString("ENCODER:", 10, 40);
tftSprite.setCursor(10, 65);
tftSprite.setTextColor(GREEN);
tftSprite.printf("%d", encoder_value);
tftSprite.setTextColor(WHITE);
tftSprite.drawString("btnA:", 10, 120);
tftSprite.setTextColor(ORANGE);
tftSprite.drawString("get inc", 10, 150);
tftSprite.setTextColor(WHITE);
tftSprite.drawString("btnB:", 10, 180);
tftSprite.setTextColor(ORANGE);
tftSprite.drawString("reset", 10, 210);
tftSprite.pushSprite(0, 0);
canvas.fillRect(0, 0, 135, 90, BLACK);
canvas.setTextColor(WHITE);
canvas.drawString("BTN:" + String(btn_status), 10, 10);
canvas.drawString("ENCODER:", 10, 40);
canvas.setCursor(10, 65);
canvas.setTextColor(GREEN);
canvas.printf("%d", encoder_value);
canvas.setTextColor(WHITE);
canvas.drawString("btnA:", 10, 120);
canvas.setTextColor(ORANGE);
canvas.drawString("get inc", 10, 150);
canvas.setTextColor(WHITE);
canvas.drawString("btnB:", 10, 180);
canvas.setTextColor(ORANGE);
canvas.drawString("reset", 10, 210);
canvas.pushSprite(0, 0);
}

void get_inc_value(void) {
int32_t inc_value = sensor.getIncrementValue();
int32_t inc_value = encoder.getIncrementValue();
Serial.printf("Inc:%d", inc_value);
}

void setup() {
M5.begin(); // Init M5Stack. 初始化M5Stack
sensor.begin(&Wire, MINIENCODERC_ADDR, 0, 26, 100000UL);
tftSprite.setRotation(1);
tftSprite.createSprite(135, 240);
tftSprite.setTextSize(2);
delay_time = 20;
i2c_address = sensor.getI2CAddress();
// sensor.setEncoderValue(97900);
encoder.begin(&Wire, MiniEncoderC_ADDR, 0, 26, 100000UL);
canvas.setRotation(0);
canvas.createSprite(135, 240);
canvas.setTextSize(2);
i2c_address = encoder.getI2CAddress();
// encoder.setEncoderValue(0);
}

void loop() {
M5.update();
if (M5.BtnA.wasPressed()) {
get_inc_value();
} else if (M5.BtnB.wasPressed()) {
sensor.resetCounter();
encoder.resetCounter();
}
page_get_encoder();
}
11 changes: 6 additions & 5 deletions library.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
{
"name": "MiniEncoderC",
"description": "Library for M5Stack MiniEncoderC",
"keywords": "M5Stack MiniEncoderC",
"name": "M5Hat-Mini-EncoderC",
"description": "M5Stack Library of Hat Mini EncoderC",
"keywords": "M5Stack, Hat, Mini EncoderC, MiniEncoderC",
"authors": {
"name": "M5Stack",
"url": "http://www.m5stack.com"
},
"repository": {
"type": "git",
"url": "https://github.com/m5stack/M5Unit-MiniEncoderC.git"
"url": "https://github.com/m5stack/M5Hat-Mini-EncoderC.git"
},
"version": "0.0.1",
"frameworks": "arduino",
"platforms": "espressif32"
"platforms": "espressif32",
"headers": "M5HatMiniEncoderC.h"
}
10 changes: 5 additions & 5 deletions library.properties
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name=MiniEncoderC
name=M5Hat-Mini-EncoderC
version=0.0.1
author=M5Stack
maintainer=M5Stack
sentence=Library for M5Stack UNIT MiniEncoderC
paragraph=See more on http://M5Stack.com
sentence=M5Stack Library of Hat Mini EncoderC
paragraph=M5Stack, M5HatMiniEncoderC, See more on http://M5Stack.com
category=Device Control
url=https://github.com/m5stack/M5Unit-MiniEncoderC
url=https://github.com/m5stack/M5Hat-Mini-EncoderC
architectures=esp32
includes=Unit_MiniEncoderC.h
includes=M5HatMiniEncoderC.h
32 changes: 16 additions & 16 deletions src/Unit_MiniEncoderC.cpp → src/M5HatMiniEncoderC.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "Unit_MiniEncoderC.h"
#include "M5HatMiniEncoderC.h"

void UNIT_MINIENCODERC::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
void M5HatMiniEncoderC::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
uint8_t length) {
_wire->beginTransmission(addr);
_wire->write(reg);
Expand All @@ -10,7 +10,7 @@ void UNIT_MINIENCODERC::writeBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
_wire->endTransmission();
}

void UNIT_MINIENCODERC::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
void M5HatMiniEncoderC::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
uint8_t length) {
uint8_t index = 0;
_wire->beginTransmission(addr);
Expand All @@ -22,7 +22,7 @@ void UNIT_MINIENCODERC::readBytes(uint8_t addr, uint8_t reg, uint8_t *buffer,
}
}

bool UNIT_MINIENCODERC::begin(TwoWire *wire, uint8_t addr, uint8_t sda,
bool M5HatMiniEncoderC::begin(TwoWire *wire, uint8_t addr, uint8_t sda,
uint8_t scl, uint32_t speed) {
_wire = wire;
_addr = addr;
Expand All @@ -40,7 +40,7 @@ bool UNIT_MINIENCODERC::begin(TwoWire *wire, uint8_t addr, uint8_t sda,
}
}

void UNIT_MINIENCODERC::setEncoderValue(int32_t value) {
void M5HatMiniEncoderC::setEncoderValue(int32_t value) {
uint8_t data[4];

data[0] = value & 0xff;
Expand All @@ -50,43 +50,43 @@ void UNIT_MINIENCODERC::setEncoderValue(int32_t value) {
writeBytes(_addr, ENCODER_REG, data, 4);
}

int32_t UNIT_MINIENCODERC::getEncoderValue() {
int32_t M5HatMiniEncoderC::getEncoderValue() {
uint8_t data[4];
readBytes(_addr, ENCODER_REG, data, 4);
int32_t value =
data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
return value;
}

uint32_t UNIT_MINIENCODERC::getIncrementValue() {
uint32_t M5HatMiniEncoderC::getIncrementValue() {
uint8_t data[4];
readBytes(_addr, INCREMENT_REG, data, 4);
uint32_t value =
data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
return value;
}

bool UNIT_MINIENCODERC::getButtonStatus() {
bool M5HatMiniEncoderC::getButtonStatus() {
uint8_t data;
readBytes(_addr, BUTTON_REG, &data, 1);
return data;
}

void UNIT_MINIENCODERC::setLEDColor(uint8_t index, uint32_t color) {
void M5HatMiniEncoderC::setLEDColor(uint32_t rgb888color) {
uint8_t data[4];
data[2] = color & 0xff;
data[1] = (color >> 8) & 0xff;
data[0] = (color >> 16) & 0xff;
data[2] = rgb888color & 0xff;
data[1] = (rgb888color >> 8) & 0xff;
data[0] = (rgb888color >> 16) & 0xff;
writeBytes(_addr, RGB_LED_REG, data, 3);
}

void UNIT_MINIENCODERC::resetCounter(void) {
void M5HatMiniEncoderC::resetCounter(void) {
uint8_t data[4];
data[0] = 1;
writeBytes(_addr, RESET_COUNTER_REG, data, 1);
}

uint8_t UNIT_MINIENCODERC::setI2CAddress(uint8_t addr) {
uint8_t M5HatMiniEncoderC::setI2CAddress(uint8_t addr) {
_wire->beginTransmission(_addr);
_wire->write(I2C_ADDRESS_REG);
_wire->write(addr);
Expand All @@ -95,7 +95,7 @@ uint8_t UNIT_MINIENCODERC::setI2CAddress(uint8_t addr) {
return _addr;
}

uint8_t UNIT_MINIENCODERC::getI2CAddress(void) {
uint8_t M5HatMiniEncoderC::getI2CAddress(void) {
_wire->beginTransmission(_addr);
_wire->write(I2C_ADDRESS_REG);
_wire->endTransmission();
Expand All @@ -107,7 +107,7 @@ uint8_t UNIT_MINIENCODERC::getI2CAddress(void) {
return RegValue;
}

uint8_t UNIT_MINIENCODERC::getFirmwareVersion(void) {
uint8_t M5HatMiniEncoderC::getFirmwareVersion(void) {
_wire->beginTransmission(_addr);
_wire->write(FIRMWARE_VERSION_REG);
_wire->endTransmission();
Expand Down
15 changes: 8 additions & 7 deletions src/Unit_MiniEncoderC.h → src/M5HatMiniEncoderC.h
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#ifndef __UNIT_MINIENCODERC_H
#define __UNIT_MINIENCODERC_H
#ifndef __M5HATMINIENCODERC_H
#define __M5HATMINIENCODERC_H

#include "Arduino.h"
#include "Wire.h"

#define MINIENCODERC_ADDR 0x42
#define MiniEncoderC_ADDR 0x42
#define ENCODER_REG 0x00
#define INCREMENT_REG 0x10
#define BUTTON_REG 0x20
Expand All @@ -13,7 +13,7 @@
#define FIRMWARE_VERSION_REG 0xFE
#define I2C_ADDRESS_REG 0xFF

class UNIT_MINIENCODERC {
class M5HatMiniEncoderC {
private:
uint8_t _addr;
TwoWire* _wire;
Expand All @@ -24,13 +24,14 @@ class UNIT_MINIENCODERC {
void readBytes(uint8_t addr, uint8_t reg, uint8_t* buffer, uint8_t length);

public:
bool begin(TwoWire* wire = &Wire, uint8_t addr = MINIENCODERC_ADDR,
uint8_t sda = 21, uint8_t scl = 22, uint32_t speed = 100000L);
bool begin(TwoWire* wire = &Wire, uint8_t addr = MiniEncoderC_ADDR,
uint8_t sda = 0, uint8_t scl = 26,
uint32_t speed = 200000L); // Default StickC Plus
int32_t getEncoderValue();
void setEncoderValue(int32_t value);
uint32_t getIncrementValue();
bool getButtonStatus();
void setLEDColor(uint8_t index, uint32_t color);
void setLEDColor(uint32_t rgb888color);
uint8_t setI2CAddress(uint8_t addr);
uint8_t getI2CAddress(void);
uint8_t getFirmwareVersion(void);
Expand Down