test1 — ESP32 simulation

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

Components

Sketch code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <grove_two_rgb_led_matrix.h>
// 1. 设置地址和尺寸
// 注意:大多数LCD1602的地址是 0x27 或 0x3F
// 如果你用0x27扫不到,改成0x3F试试
// LiquidCrystal_I2C lcd(0x65, 16, 2); // 16列,2行
GroveTwoRGBLedMatrixClass matrix;
int scroll = 0;
int P_SDA = 4;
int P_SCL = 2;
int P_btn = 12;

volatile int num = 0;
volatile int oldnum = 0;

// 中断服务函数:必须极简,加上 IRAM_ATTR 属性
void IRAM_ATTR onButtonPressed() {
  // if (btnflag && oldnum != btnflag) 
  num++;
  // oldnum = btnflag;
}

void setup() {
  Serial.begin(115200);
  // ESP32 的 I2C 引脚:SDA=21, SCL=22
  Wire.begin(P_SDA, P_SCL);
  pinMode(32, OUTPUT);
  pinMode(P_btn, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(P_btn), onButtonPressed, FALLING);
  // 2. 初始化 LCD
  // lcd.init();       // 如果是旧版库,可能需要改成 lcd.begin();
  
  // 3. 打开背光(如果你没看到背光,就加上这句)
  // lcd.backlight(); 
  // 4. 关闭光标闪烁(就是你现在看到的那个闪动的小方块)
  // lcd.noBlink();
  // lcd.noCursor();
  digitalWrite(32, HIGH);

}

void loop() {
  int btnflag = digitalRead(P_btn) == HIGH;
  Serial.print(digitalRead(P_btn));
  // if (btnflag && oldnum != btnflag) num++;
  // oldnum = btnflag;
  // LCD1602 是静态显示,loop里不需要写东西
  // 5. 打印文字
  // lcd.clear();           // 先清屏,防止有乱码
  // lcd.setCursor(scroll, 0);   // 定位到第1行第1列
  // lcd.print("Hello World!"); // 打印文字

  Wire.begin(P_SDA, P_SCL);
  matrix.displayNumber(num, 0, true, green); 
  // lcd.setCursor(scroll, 1);   // 定位到第2行第1列
  // lcd.print("ESP32 LCD OK");
  if (scroll < -12) {
    scroll = 19;
  } else {
    scroll--;
  }
  // Serial.print(scroll);
  delay(200);
}