河山 发表于 2014-4-5 21:01:14

求个不怕掉电有记忆状态的程序(最好使用EEPROM)

三个位置传感器输入(IN1=2脚,IN2=3脚,IN3=4脚),二个数字输出(A1=5脚,A2=6脚),都是数字信号。
初始都是0,(即IN1=0,IN2=0,IN3=0;A1=0,A2=0)
条件是:
当IN1为1时翻转 A1为1, A2为0 锁定并记忆输出状态,同时清除IN3为1时的输出状态记忆;
当IN2为1时翻转 A1为0, A2为1 锁定并记忆输出状态,同时清除IN1为1时的输出状态记忆;
当IN3为1时翻转 A1为1, A2为0 锁定并记忆输出状态,同时清除IN2为1时的输出状态记忆;

求个不怕掉电有记忆状态的程序(最好使用EEPROM)用I2C也可以,会的朋友给个程序,我想了一周时间,就是不会用这个记忆,汗啊!谢谢大家!

Super169 发表于 2014-4-5 22:24:00

同一個問題, 為何要問這麼多次, 不是已經答了你嗎?

如 shihaipeng04 兄所說的, 在 setup 中 執行 EEPROM.read(address);, 檢查是否有之前的記錄, 有的話就 set 一次.之後每次更改狀況時, 就做一次 EEPROM.write(addr, val);, 斷電再開也可以取得之前的狀況了.


要記錄三個 0,1 的資料, 用三個地址也好, 合成一個 byte 也好, 不會有困難吧.

你是那方面不明白?

河山 发表于 2014-4-6 09:10:35

Super169 发表于 2014-4-5 22:24 static/image/common/back.gif
同一個問題, 為何要問這麼多次, 不是已經答了你嗎?




嗯,是不明白呀,给个例子可好?

Super169 发表于 2014-4-6 10:52:42

本帖最后由 Super169 于 2014-4-6 11:07 编辑

例設用 0-3 既位置儲存, 0 為 signature 以確認是否之前的狀態記錄, 假設你用 0xAA 作檢測.
反正只有 3 個 status, 不合成個 byte 也不會太浪費.


#define SIGNATURE 0xAA

void setup()
{
:
byte s1, s2, s3;

if (EEPROM.read(0) == SIGNATURE )
{
s1 = EEPROM.read(1);
s2 = EEPROM.read(2);
s3 = EEPROM.read(3);
}
else
{
s1 = s2 = s3 = 0;
}
:
:
void loop()
{
:
}

// 當 status 改變時, call 以下 method

void updateStatus(byte s1, byte s2, byte s3)
{
EEPROM.write(0, SIGNATURE );
EEPROM.write(1, s1);
EEPROM.write(2, s2);
EEPROM.write(3, s3);
}
}

如資料多, 可改成 array 優化儲存/讀取程序.

河山 发表于 2014-4-6 10:57:10

Super169 发表于 2014-4-6 10:52 static/image/common/back.gif
例設用 0-3 既位置儲存, 0 為 signature 以確認是否之前的狀態記錄, 假設你用 0xAA 作檢測.
反正只有 3 個 ...

谢谢Super169,我试试。
页: [1]
查看完整版本: 求个不怕掉电有记忆状态的程序(最好使用EEPROM)