当前位置: 首页 > news >正文

协会秘书处工作建设 网站电子工程师网站

协会秘书处工作建设 网站,电子工程师网站,网站的内容策略,石家庄做商城网站的公司Xiao ESP32C3使用oled 0.96实现下雪的功能 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花 其他雪花下落的时候, 其他雪花的一圈如果遇到-1, 则停止下落, 并重复2 #include "oled.h" void …

Xiao ESP32C3使用oled 0.96实现下雪的功能

在这里插入图片描述

    1. 雪花下落的时候, 随机生成半径和位置 sandR和sandX,sandY
    1. 保存雪花下落位置的时候, 将其周边一圈设置为-1, 标记为有雪花
    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
http://www.yayakq.cn/news/17157/

相关文章:

  • 廊坊网站设计电子商务网站制作公司
  • 网上写作文的网站关键词林俊杰mp3
  • 网站收录图片永修中铁三局招聘
  • 地方门户网站运营企业邮箱可以自己申请吗
  • 专业网站设计服务合肥网站建设公司 千鸟
  • 三明住房和城乡建设部网站网站开发h5技术
  • 导航类网站怎么做潍坊做网站建设
  • 巴中网站建设培训班网站文章排版的重要性
  • 贵州做网站kuhugzwordpress文章伪静态
  • 哪个网站可以做翻译兼职wordpress如何调用html代码
  • 企业建立网站主要包括那些流程百度收录提交网址
  • 网站运营服务商网站开发仓库管理系统需求分析
  • 北京市建设工程信息网官方网站福田公司总部
  • 吴忠网站设计公司重庆建设工程施工安全网
  • 番禺网站建设哪个好济南网站建设推广服务
  • 网站开发一月工资多少深圳装修设计公司排名前十强
  • 如何做图让网站的图更清晰安阳县面积
  • 沈阳网站制作公司思路wordpress雷锋网
  • 最全的数据网站3d建模软件免费下载
  • 换个网站对seo有什么影响微信如何开公众号
  • 实验中心网站建设有网络网站打不开怎么回事啊
  • 做外贸去哪个网站找客户鹤壁做网站优化
  • 长沙模板建站哪家好单页面 网站
  • 网站下载的wordpress模板如何添加绿色模板网站
  • 简单做网站用什么软件做的门户网站怎么绑定ip地址
  • 烟台市建设工程质量监督站网站可口可乐广告策划书范文
  • 滕州 网站 建设少儿编程加盟店倒闭
  • 免费书画网站怎么做的自己做自营网站
  • 中国城乡建设部网站首页html代码怎么下载
  • 社交平台网站建设预算深圳特区报