2026年2月22日 星期日

Arduino Mega2560 EEPROM 的應用

問題: arduino mega2560 接電源接頭 跟 UART後設定完後斷開UART後設定值不見的問題 
在 Arduino 設計中,當序列埠 (Serial Port) 被開啟或關閉(例如拔掉 USB 或關閉序列監控視窗)時,DTR 訊號會觸發晶片重設。
這通常是因為 Arduino Mega 2560 的預設自動重設 (Auto-Reset) 機制,以及變數儲存在 RAM (隨機存取記憶體) 中導致的。
可以使用內建的 EEPROM 來保存設定!!
引入函式庫:#include <EEPROM.h>。
儲存設定:使用 EEPROM.put(address, data)。
讀取設定:在 setup() 中使用 EEPROM.get(address, data) 載入舊值。

#include <EEPROM.h>
// ==========================================================
// EEPROM 記憶體位址定義
// ==========================================================
const int MAGIC_NUMBER_ADDR = 0;
const int SETTINGS_ADDR = sizeof(byte); // 設定結構體的起始位址

const byte MAGIC_VALUE = 0xAC; // 自訂一個魔術數字

const int NUM_RELAYS = 16;
// ==========================================================
// 1. 定義設定的結構體
// ==========================================================
struct RelaySettings {
  byte orgConfigNumber;
  byte AllRelayFlag;
  byte RunConfigFlag;
  byte ConfigNumber;
  uint8_t ConfigFlag[NUM_RELAYS];
  unsigned long DelayTime ;  //--設定 relay1~16延遲打開時間
  unsigned long OnTime_Arr[NUM_RELAYS];
  unsigned long OffTime_Arr[NUM_RELAYS];
};
//unsigned long runMillis[NUM_RELAYS];
// ==========================================================
// 宣告一個全域變數來存放我們的設定
// ==========================================================
RelaySettings relayConfig;

void setup() {
Serial.println("\n--- Arduino EEPROM 陣列範例啟動 ---");
// ========================================================== // 檢查 EEPROM 中的魔術數字,判斷陣列資料是否有效 // ========================================================== byte storedMagicValue; EEPROM.get(MAGIC_NUMBER_ADDR, storedMagicValue); if (storedMagicValue == MAGIC_VALUE) { // 如果魔術數字匹配,表示 EEPROM 已經被初始化過,可以安全讀取陣列 Serial.println("偵測到有效設定,從 EEPROM 載入..."); EEPROM.get(SETTINGS_ADDR, relayConfig); } else { // 如果不匹配,表示首次運行或資料損毀,則載入預設值並存入 EEPROM Serial.println("EEPROM 無有效設定,載入預設值並儲存..."); loadDefaultsAndSave(); } printCurrentSettings(); // 顯示目前載入的設定 Serial.println("\n輸入 'reset' 將所有設定恢復為預設值。");

}











2026年2月2日 星期一

Arduino Mega2560 產品 Burn-In 燒機設計

依照專案需求
1. 同時16 port relay 切換電源
2. 有10組 Config 設定 可執行不一樣的開機跟關機時間
3. 治具端 有兩顆 按鍵 a. 當下的config 開始執行 b. 停止執行
4. 上位機設定程式, 可設定10組的config值
硬體: 
1. Mega2560 => FW 設計
2. 16 port 5VDC relay board 
上位機程式設計:


Demo: