ESP32(掌控板) 陀螺仪显示与RGB灯

该程序使用ESP32掌控板,通过陀螺仪数据实时显示位置并控制RGB灯颜色。用户可通过触摸按键调节亮度,有四种颜色模式和关灯选项。陀螺仪的位置信息经过转换后影响RGB灯的颜色显示,代码中包含了动态变量处理和颜色转换函数。
摘要由CSDN通过智能技术生成

ESP32(掌控板) 陀螺仪显示与RGB灯

本程序图形化显示陀螺仪位置(注意要换算),根据陀螺仪位置控制RGB灯颜色并有3种颜色组合和关灯可选,通过触摸按键调节亮度。

图形化程序如下

d4f1b127ef234fe0a1d36662d4fe5c2c.png

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);
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路易斯720

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值