arduino Xiao ESP32C3 oled0.96 下雪花

这篇具有很好参考价值的文章主要介绍了arduino Xiao ESP32C3 oled0.96 下雪花。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

arduino Xiao ESP32C3 oled0.96 下雪花,# arduino,esp32,oled文章来源地址https://www.toymoban.com/news/detail-658710.html

    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 64



static Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
void oled_init() {
  // oled初始化
  if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x32
    Serial.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 下雪花的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 新上架的简约版合宙ESP32C3使用arduino开发的教程

    经过两个月的缺货下架后,9块9包邮的合宙ESP32C3又重新上架了,真香。这一批都是没有带串口芯片的简约版(9块9要啥自行车)。在下架前,简约版要使用2.0.0版本的ESP32开发板库才能下载,而2.0.0版本有一些丢失arduino自带库的诡异BUG,所以一直没法用于下载。现在由于发布了2

    2024年02月05日
    浏览(92)
  • ESP32 入门笔记04: 0.96寸OLED 显示屏 + u8g2库丝滑显示UI (ESP32 for Arduino IDE)

    先导知识 ESP32 入门笔记01:开发板信息、开发环境搭建以及学资料准备 ESP32 入门笔记02: GPIO参考指南 在本例中,我们使用 I2C 通信协议。ESP32 中最适合 I2C 通信的引脚是通用输入输出接口 22(SCL) 和通用输入输出接口 21(SDA) 。 安装 SSD1306 OLED 库 – ESP32 (也可以用u8g2库,在Ardu

    2024年01月19日
    浏览(56)
  • 手把手使用Micropython+合宙Esp32c3(驱动安装,为合宙Esp32c3安装Micropython固件库,代码上传到ESP32C3中)含Thonny和vscode两种方法

    CH343驱动下载 下载最新版本就好 驱动下载好后,以管理员身份运行,并点击“安装” 安装完成之后连接设备就可以在设备管理器中看到自己设备及端口 MicroPython 是一种精简版的 Python 语言实现,专门用于嵌入式系统和物联网设备。它提供了一个适用于微控制器的交互式解释

    2024年02月10日
    浏览(67)
  • XIAO ESP32-C3烧录程序上传失败: 上传错误: exit status 2

    现象 本来正常在调试并烧录程序,突然就无法上传了,并报错: 从信息上看,是可以排除没有连接到串口问题,因为之前也是可以正常烧录的。 解决办法 重新烧录引导程序 把下开发板从USB口上拔下 按住板载的Boot按钮,一直按住,不要松开哦 把开发板插入电脑的USB口,此

    2024年02月11日
    浏览(38)
  • ESP32C3 移植ST7735 LVGL

    关于lvgl LVGL是一个C语言编写的免费的开源图形库,其提供了用于嵌入式GUI的各种元素。用户可以利用丰富的图形库资源,在消耗极低内存的情况下构建视觉效果丰富多彩的GUI 。只需 64kB 闪存和 8kB RAM 就足以满足简单的用户界面。LVGL 可以驱动单色OLED、TFT 显示器、监视器或任

    2023年04月24日
    浏览(50)
  • ESP32C3简约版---笔记(一)&固件烧录

      前段时间买了块合宙的ESP32C3简约版。正好有时间,就试着尝试玩一下。顺便记录一下过程,方便以后回忆时,能快速使用。大体是按照官网的流程来,加上自己的一些记录。其实官网也有比较详细教程了,也可以看看。合宙ESP32C3简约版官方教程   文章虽然主要是以介

    2024年02月05日
    浏览(55)
  • ESP32C3学习&开发之路——VScode开发环境搭建

    上次搭建好了ESP IDF离线版的开发环境,但是我不想每次开发的时候都要打开“PowerShell”终端,也不想要输入指令进行编译和下载的操作,所以再搭建在VScode的软件上开发ESP32系列WiFi模组的开发环境。 VScode全称Visual Studio Code,免费而强大,可在Windows、Linux和Mac OS上运行。所以

    2024年02月10日
    浏览(58)
  • ESP32C3 LuatOS TM1650①驱动测试

    合宙TM1650驱动资料 TM1650.lua源码 TM1650 ESP32C3 SCL GPIO5 SDA GPIO4

    2024年02月07日
    浏览(61)
  • 物联网开发笔记(87)- 使用Micropython开发ESP32开发板之烧录合宙ESP32C3开发板

    一、目的         这一节我们学习如何使用我们的ESP32开发板来学习合宙ESP32C3开发板,该开发板有两种:一种是带串口通讯的,一种是通过使用USB通讯接口的。  二、环境         ESP32 + 合宙ESP32C3开发板 + USB转type-C线  + Win10 接线方法:         开发板通过USB线插到

    2024年02月14日
    浏览(53)
  • ESP32C3 BLE5.0 吞吐速率的分析与测试

    前言: 本篇文章主要探讨下影响 BLE 传输速率的因素,分析和计算 BLE 1M PHY、BLE 2M PHY 的最大传输速率以及使用 ESP32-C3 验证两种 PHY 的传输速率 当前蓝牙核心规范的版本是v5.3, 从 BLE5.0 版本时, BLE已经可以支持多种物理层:LE 1M UNCODED PHY、LE 2M UNCODED PHY 以及 LE CODED PHY, 其中

    2024年02月12日
    浏览(144)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包