mirror of
https://github.com/m5stack/M5Stack.git
synced 2026-05-20 10:06:46 -07:00
134 lines
3.5 KiB
Arduino
134 lines
3.5 KiB
Arduino
/*
|
||
* SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
|
||
*
|
||
* SPDX-License-Identifier: MIT
|
||
*/
|
||
/*
|
||
* @Hardwares: M5Core + Unit 8Angle
|
||
* @Platform Version: Arduino M5Stack Board Manager v2.1.3
|
||
* @Dependent Library:
|
||
* M5GFX@^0.2.3: https://github.com/m5stack/M5GFX
|
||
* M5Unified@^0.2.2: https://github.com/m5stack/M5Unified
|
||
* M5Unit-8Angle:https://github.com/m5stack/M5Unit-8Angle
|
||
*/
|
||
|
||
#include <M5Unified.h>
|
||
#include <M5GFX.h>
|
||
#include "M5_ANGLE8.h"
|
||
|
||
M5GFX display;
|
||
M5Canvas canvas(&display);
|
||
M5_ANGLE8 angle8;
|
||
|
||
uint32_t rgb_c = 0;
|
||
|
||
void print_adc_val(uint8_t i, uint16_t adc_v)
|
||
{
|
||
canvas.drawRect(0, i * 20, 200, 15, 1);
|
||
canvas.fillRect(0, i * 20, map(adc_v, 0, 4096, 0, 200), 15, 1);
|
||
canvas.setCursor(215, i * 20);
|
||
canvas.setTextSize(1);
|
||
canvas.printf("CH:%d ADC: %d", i, adc_v);
|
||
}
|
||
|
||
// ADC 12 Bit
|
||
void TaskADC12(uint16_t delay_t)
|
||
{
|
||
canvas.createSprite(display.width(), 160);
|
||
canvas.fillSprite(0);
|
||
uint16_t adc_v = 0;
|
||
for (uint8_t i = 0; i < ANGLE8_TOTAL_ADC; i++) {
|
||
adc_v = angle8.getAnalogInput(i, _12bit);
|
||
print_adc_val(i, adc_v);
|
||
}
|
||
canvas.pushSprite(0, 45);
|
||
vTaskDelay(delay_t);
|
||
}
|
||
|
||
// Breathing RGBLED
|
||
void TaskRGBLED_1(uint8_t br, uint16_t delay_t)
|
||
{
|
||
canvas.createSprite(display.width(), 35);
|
||
rgb_c = 0;
|
||
canvas.fillSprite(0);
|
||
for (uint8_t m = 0; m < 12; m++) {
|
||
rgb_c = 0x03 << (m * 2) | rgb_c;
|
||
for (uint8_t i = 0; i < ANGLE8_TOTAL_LED; i++) {
|
||
angle8.setLEDColor(i, rgb_c, br);
|
||
vTaskDelay(25);
|
||
}
|
||
canvas.setCursor(0, 0);
|
||
canvas.printf("COLOR: 0x%X", rgb_c);
|
||
canvas.pushSprite(0, 205);
|
||
vTaskDelay(delay_t);
|
||
}
|
||
}
|
||
|
||
void TaskRGBLED_2(uint8_t br, uint16_t delay_t)
|
||
{
|
||
canvas.createSprite(display.width(), 35);
|
||
rgb_c = 0;
|
||
canvas.fillSprite(0);
|
||
for (uint8_t m = 0; m < 6; m++) {
|
||
rgb_c = 0xF0 << (m * 4);
|
||
for (uint8_t i = 0; i < ANGLE8_TOTAL_LED; i++) {
|
||
angle8.setLEDColor(i, rgb_c, br);
|
||
vTaskDelay(25);
|
||
}
|
||
canvas.setCursor(0, 0);
|
||
canvas.printf("COLOR: 0x%X", rgb_c);
|
||
canvas.pushSprite(0, 205);
|
||
vTaskDelay(delay_t);
|
||
}
|
||
}
|
||
|
||
void TaskRGBLED_3(uint32_t color, uint8_t br, uint16_t delay_t)
|
||
{
|
||
canvas.createSprite(display.width(), 35);
|
||
rgb_c = 0;
|
||
canvas.fillSprite(0);
|
||
for (uint8_t i = 0; i < ANGLE8_TOTAL_LED; i++) {
|
||
angle8.setLEDColor(i, color, br);
|
||
vTaskDelay(delay_t);
|
||
}
|
||
canvas.setCursor(0, 0);
|
||
canvas.printf("COLOR: 0x%X", rgb_c);
|
||
canvas.pushSprite(0, 205);
|
||
}
|
||
|
||
void setup()
|
||
{
|
||
M5.begin();
|
||
display.begin();
|
||
canvas.setColorDepth(1); // mono color
|
||
canvas.setFont(&fonts::efontCN_14);
|
||
while (!angle8.begin(ANGLE8_I2C_ADDR)) {
|
||
Serial.println("angle8 Connect Error");
|
||
M5.Lcd.print("angle8 Connect Error");
|
||
delay(100);
|
||
}
|
||
canvas.createSprite(display.width(), 45);
|
||
canvas.setPaletteColor(1, GREENYELLOW);
|
||
canvas.fillSprite(0);
|
||
canvas.setTextSize(1);
|
||
canvas.drawString("UNIT ANGLE8", 120, 5);
|
||
canvas.drawString("FW VERSION: " + String(angle8.getVersion()), 10, 25);
|
||
canvas.pushSprite(0, 0);
|
||
}
|
||
|
||
void loop()
|
||
{
|
||
M5.update();
|
||
if (M5.BtnA.wasReleased()) {
|
||
TaskRGBLED_3(0xffffff, 100, 2);
|
||
} else if (M5.BtnB.wasReleased()) {
|
||
TaskRGBLED_3(0xffffff, 50, 2);
|
||
} else if (M5.BtnC.wasReleased()) {
|
||
TaskRGBLED_3(0xffffff, 10, 2);
|
||
}
|
||
if (angle8.getDigitalInput())
|
||
TaskADC12(100);
|
||
else
|
||
TaskRGBLED_2(5, 100);
|
||
}
|