求个不怕掉电有记忆状态的程序(最好使用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也可以,会的朋友给个程序,我想了一周时间,就是不会用这个记忆,汗啊!谢谢大家! 同一個問題, 為何要問這麼多次, 不是已經答了你嗎?
如 shihaipeng04 兄所說的, 在 setup 中 執行 EEPROM.read(address);, 檢查是否有之前的記錄, 有的話就 set 一次.之後每次更改狀況時, 就做一次 EEPROM.write(addr, val);, 斷電再開也可以取得之前的狀況了.
要記錄三個 0,1 的資料, 用三個地址也好, 合成一個 byte 也好, 不會有困難吧.
你是那方面不明白? Super169 发表于 2014-4-5 22:24 static/image/common/back.gif
同一個問題, 為何要問這麼多次, 不是已經答了你嗎?
嗯,是不明白呀,给个例子可好? 本帖最后由 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 優化儲存/讀取程序.
Super169 发表于 2014-4-6 10:52 static/image/common/back.gif
例設用 0-3 既位置儲存, 0 為 signature 以確認是否之前的狀態記錄, 假設你用 0xAA 作檢測.
反正只有 3 個 ...
谢谢Super169,我试试。
页:
[1]