arduino Xiao ESP32C3 oled0.96 下雪花
Xiao ESP32C3使用oled 0.96实现下雪的功能

-
- 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY
-
- 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花
-
- 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2
#include "oled.h"
void setup() {// 串口初始化Serial.begin(115200);oled_init();randomSeed(micros());print_vulnerability_init();
}
void run900msTasks() {oled.clearDisplay();playSnowing();oled.display(); // 这放到最后
}
// oled.h
#ifndef __OLED_H_
#define __OLED_H_
#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64static Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
void oled_init() {// oled初始化if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32Serial.println(F("SSD1306 allocation failed"));for (;;); // Don't proceed, loop forever}Serial.println(F("SSD1306 allocation success!!!"));oled.display();delay(500); oled.setTextSize(1);oled.setTextColor(WHITE);oled.setRotation(0);oled.clearDisplay();delay(1000);
}void oled_println(int16_t x, int16_t y, const char *msg) {oled.setCursor(x, y);oled.println(msg);
}struct snow {// 定义落点个数int numPoints = 10;int snows[SCREEN_WIDTH][SCREEN_HEIGHT];int sandX = 0;int sandY = 0; int sandR = 1; // 半径void init() {for (int i=0; i<SCREEN_WIDTH; i++) {for(int j=0; j<SCREEN_HEIGHT; j++) {snows[i][j] = 0;}}random_snow_pos();
}/*** 设置当前的雪花位置*/void setSnow(int x, int y, int r) {sandX = x;sandY = y;sandR = r;}/*** 初始化随机点*/void random_snow_pos() {setSnow(0, random(0, SCREEN_HEIGHT), random(2, 5));}/*** 将下落的雪花放到数组中*/ void snowToSnows() {snows[sandX][sandY] = sandR;}/*** 向右移动*/void move(int distance) {sandX+=distance;}/*** 计算雪花点的周围一圈是否有雪花*/bool collideBorder() {if(sandX >= SCREEN_WIDTH || sandY >= SCREEN_HEIGHT) return true;for (int i = 0; i < numPoints; i++) {float theta = (float)i / numPoints * 2 * PI;int x = sandX + sandR * cos(theta);int y = sandY + sandR * sin(theta);// 不管是-1还是其他, 都算是触底了if(x>=0 && y>=0 && snows[x][y] != 0) return true;}return false;}/*** 设置雪花周边都为-1*/void setSnowEdge() {for (int i = 0; i < numPoints; i++) {float theta = (float)i / numPoints * 2 * PI;int x = sandX + sandR * cos(theta);int y = sandY + sandR * sin(theta);snows[x][y] = -1;}}} snow;void print_vulnerability_init() {for(int i=0; i<SCREEN_HEIGHT; i++) {snow.snows[SCREEN_WIDTH-1][i] = 1;}snow.snows[60][10] = 1;snow.random_snow_pos();
}/*** 根据128*64的数组里面为1的点绘制○
*/
void print_snow() {for (int i=0; i<SCREEN_WIDTH; i++) {for(int j=0; j<SCREEN_HEIGHT; j++) {if(snow.snows[i][j] <= 0) {continue;} else {oled.fillCircle(i, j, snow.snows[i][j], WHITE);} }}
}/*** 模拟漏斗
*/
void playSnowing() {int while_i = 0;Serial.print(",");Serial.print(snow.sandX);Serial.print(",");Serial.println(snow.sandY);while(snow.collideBorder()) {snow.snowToSnows();snow.setSnowEdge();snow.random_snow_pos();while_i ++ ;if(while_i == 100) {snow.init();break;}}// 绘制沙子的点oled.fillCircle(snow.sandX, snow.sandY, snow.sandR, WHITE);// 沙子移动snow.move(1);print_snow();
}/*** 1. 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY* 2. 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花* 3. 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2*/ #endif
相关文章:
arduino Xiao ESP32C3 oled0.96 下雪花
Xiao ESP32C3使用oled 0.96实现下雪的功能 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2 #include "oled.h" void …...
ElasticSearch索引库、文档、RestClient操作
文章目录 一、索引库1、mapping属性2、索引库的crud 二、文档的crud三、RestClient 一、索引库 es中的索引是指相同类型的文档集合,即mysql中表的概念 映射:索引中文档字段的约束,比如名称、类型 1、mapping属性 mapping映射是对索引库中文…...
Effective Java 案例分享(九)
46、使用无副作用的Stream 本章节主要举例了Stream的几种用法。 案例一: // Uses the streams API but not the paradigm--Dont do this! Map<String, Long> freq new HashMap<>(); try (Stream<String> words new Scanner(file).tokens()) …...
SpringBoot复习:(56)使用@Transactional注解标记的方法的执行流程
首先,如果在某个类或某个方法被标记为Transactional时,Spring boot底层会在创建这个bean时生成代理对象(默认使用cglib) 示例: 当调用studentService的addStudent方法时,会直接跳到CglibAopProxy类去执行intercept方…...
JVM——引言+JVM内存结构
引言 什么是JVM 定义: Java VirtualMachine -java 程序的运行环境 (ava 二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收功能数组下标越界检查,多态 比较: jvm jre jdk 学习jvm的作用 面试理解底层实现原理中…...
open cv学习 (十)图形检测
图形检测 demo1 # 绘制几何图像的轮廓 import cv2img cv2.imread("./shape1.png")gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将图像二值化 t, binary cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 检测图像中的所有轮廓 contours, hierarchy cv2.f…...
【C语言】字符函数和字符串函数
目录 1.求字符串长度strlen 2.长度不受限制的字符串函数 字符串拷贝strcpy 字符串追加strcat 字符串比较strcmp 3.长度受限制的字符串函数介绍strncpy strncat 编辑strncmp 4.字符串查找strstr 5.字符串分割strtok 6.错误信息报告 strerror perror 7.字符分类函…...
前馈神经网络正则化例子
直接看代码: import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…...
spring的核心技术---bean的生命周期加案例分析详细易懂
目录 一.spring管理JavaBean的初始化过程(生命周期) Spring Bean的生命周期: 二.spring的JavaBean管理中单例模式及原型(多例)模式 2.1 . 默认为单例,但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2…...
【Maven教程】(一)入门介绍篇:Maven基础概念与其他构建工具:理解构建过程与Maven的多重作用,以及与敏捷开发的关系 ~
Maven入门介绍篇 1️⃣ 基础概念1.1 构建1.2 maven对构建的支持1.3 Maven的其他作用 2️⃣ 其他构建工具2.1 IDE2.2 Make2.3 Ant2.4 Jenkins 3️⃣ Maven与敏捷开发🌾 总结 1️⃣ 基础概念 "Maven"可以翻译为 “知识的积累者” 或 “专家”。这个词源于波…...
今天,谷歌Chrome浏览器部署抗量子密码
谷歌已开始部署混合密钥封装机制(KEM),以保护在建立安全的 TLS 网络连接时共享对称加密机密。 8月10日,Chrome 浏览器安全技术项目经理Devon O’Brien解释说,从 8 月 15 日发布的 Chrome 浏览器 116 开始,谷…...
SUMO traci接口控制电动车前往充电站充电
首先需要创建带有停车位的充电站(停车场和充电站二合一),具体参考我的专栏中其他文章。如果在仿真的某个时刻,希望能够控制电动车前往指定的充电站充电,并且在完成充电后继续前往车辆原来的目的地,那么可以使用以下API:…...
现代CSS中的换行布局技术
在现代网页设计中,为了适应不同屏幕尺寸和设备类型,换行布局是一项重要的技术。通过合适的布局技术,我们可以实现内容的自适应和优雅的排版。本文将介绍CSS中几种常见的换行布局技术,探索它们的属性、代码示例和解析,帮…...
简单理解Python中的深拷贝与浅拷贝
I. 简介 深拷贝会递归的创建一个完全独立的对象副本,包括所有嵌套的对象,而浅拷贝只复制嵌套对象的引用,不复制嵌套对象本身。 简单来说就是两者都对原对象进行了复制,因此使用is运算符来比较新旧对象时,返回的都是F…...
C++之std::pair<uint64_t, size_t>应用实例(一百七十七)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
前端打开后端返回的HTML格式的数据
前端打开后端返回的 HTML格式 的数据: 后端返回的数据格式如下示例: 前端通过 js 方式处理(核心代码如下) console.log(回调, path); // path 是后端返回的 HTML 格式数据// 必须要存进localstorage,否则会报错&am…...
How to deal with document-oriented data
Schema designData models for e-commerceNuts and bolts of databases, collection, and documents. Principles of schema design What are your application access pattern?Whats the basic unit of data? the basic unit of data is the BSON documentWhat are the ca…...
Http 状态码汇总
文章目录 Http 状态码汇总1xx(信息性状态码)2xx(成功状态码)3xx(重定向状态码)4xx(客户端错误状态码)5xx(服务器错误状态码) Http 状态码汇总 1xx(…...
mysql自定义实体类框架
根据表结构自动生产实体类和方法,根据反射与io生成,可自定义扩展方法 package com.digital.web.front; /*** pom依赖* <dependency>* <groupId>mysql</groupId>* <artifactId>mysql-connector-java</artifactId>* <version>5.1.27</ve…...
批量将Excel中的第二列内容从拼音转换为汉字
要批量将Excel中的第二列内容从拼音转换为汉字,您可以使用Python的openpyxl库来实现。下面是一个示例代码,演示如何读取Excel文件并将第二列内容进行拼音转汉字: from openpyxl import load_workbook from xpinyin import Pinyin # 打开Exce…...
三节点zookeeper集群搭建
1、环境准备 1.1、 设置三台虚拟机主机名# 在node1执行 sudo hostnamectl set-hostname node1 # 在node2执行 sudo hostnamectl set-hostname node2 # 在node3执行 sudo hostnamectl set-hostname node31.2、修改hosts# 使用vim编辑hosts文件 sudo vim /etc/hosts # 添加以下内…...
前端拖拽交互实现:别再只会用原生拖拽了
前端拖拽交互实现:别再只会用原生拖拽了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行,咱们今天聊聊前端拖拽交互。别告诉我你还在用原生的HTML5拖拽API,那感觉就像在用诺基亚手机——能打电话,但体验太差。 为什…...
别再花钱买云API了!手把手教你用Docker+Ollama在本地免费跑通Strix渗透测试
零成本打造企业级渗透测试环境:DockerOllama本地化实战指南 当安全团队每月收到云服务商五位数的API账单时,当关键测试任务因网络抖动被迫中断时,越来越多的技术决策者开始重新审视渗透测试的基础架构。本文将揭示如何用消费级硬件构建媲美商…...
3大核心功能:让iOS推送调试效率提升10倍的SmartPush工具全解析
3大核心功能:让iOS推送调试效率提升10倍的SmartPush工具全解析 【免费下载链接】SmartPush SmartPush,一款iOS苹果远程推送测试程序,Mac OS下的APNS工具APP,iOS Push Notification Debug App 项目地址: https://gitcode.com/gh_mirrors/smar/SmartPush 一、问…...
Qwen3-14B-AWQ模型效果深度评测:在算法题求解上的表现
Qwen3-14B-AWQ模型效果深度评测:在算法题求解上的表现 1. 评测背景与模型简介 在AI技术快速发展的今天,大语言模型在代码生成和算法解题领域展现出越来越强的能力。Qwen3-14B-Int4-AWQ作为通义千问系列的最新量化版本,在保持较高推理能力的…...
别再用ls了!从Linux文件系统卡顿,看透MinIO多级目录的性能陷阱与正确用法
从Linux文件系统卡顿到MinIO性能陷阱:高效查询的工程哲学 当你在Linux终端输入ls命令后,系统突然卡死——这种经历对许多开发者来说并不陌生。但很少有人意识到,同样的性能陷阱正潜伏在MinIO这类对象存储系统的日常使用中。本文将揭示文件系…...
开源bert-base-chinese应用:中文社交媒体谣言检测的语义表征建模
开源bert-base-chinese应用:中文社交媒体谣言检测的语义表征建模 1. 引言:当谣言遇上AI 你有没有在社交媒体上刷到过一些真假难辨的消息?比如“某地出现不明病毒”、“某食品含有致癌物”,这些信息往往传播迅速,让人…...
2026年小红书文案降AI工具怎么选?自媒体人亲测这4款最靠谱
开始做小红书内容之前,我以为降AI只是学生的事。后来才发现,品牌方审稿也在查AI率,小红书平台自己也有AI检测机制。 自媒体文案的降AI需求和论文不一样,核心要求是:保留口语化语感,不能变成学术腔。降完还…...
数据清洗避坑指南:缺失值和异常值处理的5个常见错误(附真实案例)
数据清洗避坑指南:缺失值和异常值处理的5个常见错误(附真实案例) 在电商平台的用户行为分析中,我们曾遇到一个诡异现象:某促销活动页面的转化率突然飙升到98%。进一步排查发现,是爬虫程序将未加载完成的页…...
PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析
PlayCover如何重塑Mac游戏体验?社交与云服务革新玩法深度解析 【免费下载链接】PlayCover Community fork of PlayCover 项目地址: https://gitcode.com/gh_mirrors/pl/PlayCover PlayCover作为一款开源的Mac iOS模拟器,通过深度整合Discord社交功…...
