ESP32 SSD1306 OLED 计数器 — ESP32 simulation

一个在SSD1306 OLED上显示计数和计算值的ESP32项目。

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by wsss.

Components

Sketch code

// ============================================================================
// ESP32 — SSD1306 128x64 OLED
// 恐龙游戏 + 计费进度条 + 硬币动画 + 云池 + 仙人掌密度宏
// ============================================================================
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <time.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1);

// ==================== WiFi & NTP ====================
const char* ssid        = "zhidian_502";
const char* password    = "zhidian@999";
const char* ntpServer   = "pool.ntp.org";
const long  gmtOffset_sec      = 8 * 3600;
const int   daylightOffset_sec = 0;

// ==================== 计费参数 ====================
#define PAY_1 5600.0f
#define PAY_2 23.0f
#define PAY_3 7.5f
#define PAY_S (PAY_1 / PAY_2 / PAY_3 / 3600.0f)

#define COIN_TRIGGER 0.01f

// ==================== 时间节点 ====================
#define MORNING_HOUR      9
#define MORNING_MIN       0
#define NOON_HOUR         12
#define NOON_MIN          0
#define AFTERNOON_HOUR    13
#define AFTERNOON_MIN     30
#define PROGRESS_END_HOUR 18
#define PROGRESS_END_MIN  0

// ==================== 屏幕页布局 ====================
#define PAGE_TITLE      0
#define PAGE_CLOUD      1
#define PAGE_DINO_TOP   5
#define PAGE_GROUND     6
#define PAGE_PROGRESS   7

#define COIN_PAGE_LOW   PAGE_DINO_TOP
#define COIN_PAGE_HIGH  2

// ============================================================================
//                        ★ 云参数(可调)
// ============================================================================
// 云密度:目标同时存在的云数量(值越大云越多)
#define CLOUD_DENSITY        4

// 生成间隔基准帧数:实际间隔 = BASE / DENSITY
// 数值越小 → 生成越快 → 屏幕上的云越多
#define CLOUD_SPAWN_BASE     100

// 云池容量(硬上限,需 ≥ CLOUD_DENSITY)
#define CLOUD_MAX            8

// 云的移动速度(像素/帧)
#define CLOUD_SPEED          2

// 每次生成时的随机抖动百分比(0~100,50 表示 ±50%)
#define CLOUD_SPAWN_JITTER   50

// ============================================================================
//                        ★ 仙人掌参数(可调)
// ============================================================================
// 仙人掌密度百分比(相对原始 100%)
#define CACTUS_DENSITY_PERCENT   230

// 基准生成间隔帧数(对应密度 100% 时)
#define CACTUS_SPAWN_BASE        40

// 实际生成间隔(帧),由基准值和密度百分比换算
#define CACTUS_SPAWN_INTERVAL    ((CACTUS_SPAWN_BASE * 100) / CACTUS_DENSITY_PERCENT)

// ==================== 自动跳跃参数 ====================
#define JUMP_TRIGGER_X      48
#define COIN_TRIGGER_X_MIN  56
#define COIN_TRIGGER_X_MAX  80

#define DOUBLE_JUMP_H_THRESHOLD  15
#define DOUBLE_JUMP_DANGER_MIN   16
#define DOUBLE_JUMP_DANGER_MAX   40
#define DOUBLE_JUMP_BMP_START    4

// ============================================================================
//                        ★ 冲撞触发阈值
// ============================================================================
#define CHARGE_GAP_FRONT_LOW     90
#define CHARGE_GAP_BEHIND_HIGH   120

// ============================================================================
//                        ★ 低硬币跳跃危险区
// =