作业2 — Arduino Mega simulation

An interactive Arduino Mega circuit simulation you can run free in your browser on Velxio, by mj9178666.

Components

Sketch code

#include <Keypad.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <DHT.h>

// ------------------- OLED 初始化 -------------------
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// ------------------- 键盘配置 -------------------
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3,2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// ------------------- 双矩阵配置 -------------------
#define MATRIX_1_PIN 2
#define MATRIX_2_PIN 3
Adafruit_NeoMatrix matrix1(8, 8, MATRIX_1_PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

Adafruit_NeoMatrix matrix2(8, 8, MATRIX_2_PIN,
  NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ROWS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800);

// ------------------- 传感器与执行器引脚 -------------------
#define DHT_PIN 11
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);

#define PIR_PIN 10
#define LDR_PIN A0
#define BUTTON_PIN 26
#define BUZZER_PIN 53

#define RGB_R_PIN 45
#define RGB_G_PIN 47
#define RGB_B_PIN 49

// ------------------- 系统业务变量 -------------------
String secretPassword = "1234"; // 默认密码
String inputBuffer = "";        // 用户输入缓存
int failedAttempts = 0;         // 失败计数

enum SystemState {
  STATE_LOCKED,
  STATE_UNLOCKED,
  STATE_ALARM
};
SystemState currentState = STATE_LOCKED;

// 非阻塞计时变量
unsigned long lastSensorRead = 0;
unsigned long alarmStartTime = 0;
unsigned long unlockStartTime = 0;
const unsigned long SENSOR_INTERVAL = 2000;
const unsigned long ALARM_DURATION = 5000;
const unsigned long UNLOCK_DURATION = 8000;

float temperature = 0.0;
float humidity = 0.0;
int lightValue = 0;
bool motionDetected = false;

void setup() {
  Serial.begin(9600);

  // OLED 初始化
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(F("System Booting..."));
  display.display();

  // 矩阵初始化
  matrix1.begin();
  matrix1.setTextWrap(false);
  matrix1.setBrightness(40);
  matrix2.begin();
  matrix2.setTextWrap(false);
  matrix2.setBrightness(40);

  // 传感器与 IO 初始化
  dht.begin();
  pinMode(PIR_PIN, INPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(RGB_R_PIN, OUTPUT);
  pinMode(RGB_G_PIN, OUTPUT);
  pinMode(RGB_B_PIN, OUTPUT);

  setRGB(0, 0, 255); // 初始蓝灯(锁定状态)
}

void loop() {
  // 1. 处理键盘事件
  char customKey = keypad.getKey();
  if (customKey && currentState != STATE_ALARM) {
    handle

More projects by mj9178666