ESP32 +SSD1306写一个简单的发散性烟花动画
时间: 2023-08-12 13:05:42 浏览: 171
好的,下面是ESP32+SSD1306实现简单发散性烟花动画的代码,你可以参考一下:
首先,你需要准备好ESP32和SSD1306 OLED屏幕,并在Arduino IDE中安装ESP32和SSD1306的库。
然后,打开Arduino IDE,新建一个空白文件,命名为firework.ino,将以下代码复制粘贴到文件中:
```C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED屏幕宽度
#define SCREEN_HEIGHT 64 // OLED屏幕高度
#define OLED_RESET -1 // OLED屏幕复位引脚
#define SCREEN_ADDRESS 0x3C // OLED屏幕I2C地址
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); // 初始化OLED屏幕
display.clearDisplay(); // 清空屏幕
display.display();
}
void loop() {
for(int i=0; i<10; i++) { // 循环绘制10个烟花
firework(random(SCREEN_WIDTH), random(SCREEN_HEIGHT), random(2, 5)); // 在随机位置绘制随机大小的烟花
delay(200); // 等待200毫秒
}
}
void firework(int x, int y, int r) {
int colors[6][3] = { // 定义颜色数组,用于绘制烟花
{255, 255, 255}, // 白色
{255, 0, 0}, // 红色
{0, 255, 0}, // 绿色
{0, 0, 255}, // 蓝色
{255, 255, 0}, // 黄色
{255, 0, 255} // 紫色
};
for(int i=0; i<6; i++) { // 循环绘制6个小圆点
display.fillCircle(x, y, r, SSD1306_WHITE); // 绘制白色小圆点
display.fillCircle(x, y, r-1, colors[i][0]<<16 | colors[i][1]<<8 | colors[i][2]); // 绘制彩色小圆点
display.display(); // 更新屏幕显示
delay(100); // 等待100毫秒
}
for(int i=0; i<20; i++) { // 循环绘制20个线条
int angle = random(360); // 随机角度
int length = random(10, 20); // 随机长度
int x2 = x + length * cos(angle * PI / 180); // 计算线条的终点坐标
int y2 = y + length * sin(angle * PI / 180);
display.drawLine(x, y, x2, y2, colors[random(6)][0]<<16 | colors[random(6)][1]<<8 | colors[random(6)][2]); // 绘制彩色线条
display.display(); // 更新屏幕显示
delay(20); // 等待20毫秒
}
}
```
代码中,我们使用Adafruit_SSD1306库实现了OLED屏幕的控制,通过firework函数绘制发散性烟花动画。在loop函数中,我们循环绘制10个随机位置、随机大小的烟花,然后等待200毫秒。
firework函数中,我们使用一个颜色数组来绘制彩色烟花,先绘制6个小圆点,然后绘制20条线条,每条线条随机角度和长度,随机颜色。最后更新屏幕显示。
完成代码编写后,将ESP32连接到电脑上,选择正确的开发板和端口,编译并上传代码。屏幕上将会显示一个简单的发散性烟花动画。
阅读全文