ESP32(掌控板) 陀螺仪显示与RGB灯
本程序图形化显示陀螺仪位置(注意要换算),根据陀螺仪位置控制RGB灯颜色并有3种颜色组合和关灯可选,通过触摸按键调节亮度。
图形化程序如下
Arduino代码如下
/*!
* MindPlus
* mpython
*
*/
#include <MPython.h>
// 动态变量
volatile float mind_n_i, mind_n_lb, mind_n_lx, mind_n_ly, mind_n_x, mind_n_y, mind_n_xx,
mind_n_yy;
// 函数声明
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b);
// 主程序开始
void setup() {
mPython.begin();
accelerometer.setOffset(0, -187, 0);
mind_n_i = 0;
mind_n_lb = 3;
}
void loop() {
if (((buttonA.isPressed()) && (mind_n_i>0))) {
mind_n_i -= 1;
}
if (((buttonB.isPressed()) && (mind_n_i<3))) {
mind_n_i += 1;
}
display.fillScreen(0);
if ((mind_n_i==0)) {
display.setCursor(12, 23);
display.print("关灯");
}
if ((mind_n_i==1)) {
display.setCursor(15, 23);
display.print("RG");
}
if ((mind_n_i==2)) {
display.setCursor(15, 23);
display.print("GB");
}
if ((mind_n_i==3)) {
display.setCursor(15, 23);
display.print("BR");
}
mind_n_lx = (round(((255 * (accelerometer.getY())) / 1000)));
mind_n_ly = (round(((255 * (accelerometer.getX())) / 1000)));
mind_n_x = (round(((90 * mind_n_lx) / 255)));
mind_n_y = (round(((90 * mind_n_ly) / 255)));
mind_n_xx = (round(((mind_n_x * 32) / 90)));
mind_n_yy = (round(((mind_n_y * 32) / 90)));
display.setCursor(5, 5);
display.print("X:");
display.setCursor(20, 5);
display.print(mind_n_x);
display.setCursor(5, 42);
display.print("Y:");
display.setCursor(20, 42);
display.print(mind_n_y);
display.drawCircle(74, 30, 31);
display.fillCircle((74 - mind_n_xx), (32 - mind_n_yy), 3);
if ((touchPadP.isTouched())) {
mind_n_lb = 1;
}
if ((touchPadY.isTouched())) {
mind_n_lb = 2;
}
if ((touchPadT.isTouched())) {
mind_n_lb = 3;
}
if ((touchPadH.isTouched())) {
mind_n_lb = 4;
}
if ((touchPadO.isTouched())) {
mind_n_lb = 5;
}
if ((touchPadN.isTouched())) {
mind_n_lb = 6;
}
display.setCursor(110, 5);
display.print("亮");
display.setCursor(110, 20);
display.print("度");
display.setCursor(110, 35);
display.print(mind_n_lb);
if ((mind_n_lb==1)) {
mind_n_lx = (round(((mind_n_lx + 255) / 2)));
mind_n_ly = (round(((mind_n_ly + 255) / 2)));
}
if ((mind_n_lb==2)) {
mind_n_lx = (round(((mind_n_lx + 255) / 4)));
mind_n_ly = (round(((mind_n_ly + 255) / 4)));
}
if ((mind_n_lb==3)) {
mind_n_lx = (round(((mind_n_lx + 255) / 6)));
mind_n_ly = (round(((mind_n_ly + 255) / 6)));
}
if ((mind_n_lb==4)) {
mind_n_lx = (round(((mind_n_lx + 255) / 8)));
mind_n_ly = (round(((mind_n_ly + 255) / 8)));
}
if ((mind_n_lb==5)) {
mind_n_lx = (round(((mind_n_lx + 255) / 10)));
mind_n_ly = (round(((mind_n_ly + 255) / 10)));
}
if ((mind_n_lb==6)) {
mind_n_lx = (round(((mind_n_lx + 255) / 12)));
mind_n_ly = (round(((mind_n_ly + 255) / 12)));
}
if ((mind_n_i==0)) {
rgb.write(-1, rgbToColor(round(0), round(0), round(0)));
}
if ((mind_n_i==1)) {
rgb.write(-1, rgbToColor(round(mind_n_lx), round(mind_n_ly), round(0)));
}
if ((mind_n_i==2)) {
rgb.write(-1, rgbToColor(round(0), round(mind_n_lx), round(mind_n_ly)));
}
if ((mind_n_i==3)) {
rgb.write(-1, rgbToColor(round(mind_n_ly), round(0), round(mind_n_lx)));
}
delay(20);
}
// 静态函数
uint32_t rgbToColor(uint8_t r, uint8_t g, uint8_t b)
{
return (uint32_t)((((uint32_t)r<<16) | ((uint32_t)g<<8)) | (uint32_t)b);
}