极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11872|回复: 4

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

[复制链接]
发表于 2014-4-5 21:01:14 | 显示全部楼层 |阅读模式
三个位置传感器输入(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也可以,会的朋友给个程序,我想了一周时间,就是不会用这个记忆,汗啊!谢谢大家!
回复

使用道具 举报

发表于 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
同一個問題, 為何要問這麼多次, 不是已經答了你嗎?

嗯,是不明白呀,给个例子可好?
回复 支持 反对

使用道具 举报

发表于 2014-4-6 10:52:42 | 显示全部楼层
本帖最后由 Super169 于 2014-4-6 11:07 编辑

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


  1. #define SIGNATURE 0xAA

  2. void setup()
  3. {
  4. :
  5. byte s1, s2, s3;

  6. if (EEPROM.read(0) == SIGNATURE )
  7. {
  8.   s1 = EEPROM.read(1);
  9.   s2 = EEPROM.read(2);
  10.   s3 = EEPROM.read(3);
  11. }
  12. else
  13. {
  14.   s1 = s2 = s3 = 0;
  15. }
  16. :
  17. :
  18. void loop()
  19. {
  20. :
  21. }

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

  23. void updateStatus(byte s1, byte s2, byte s3)
  24. {
  25.   EEPROM.write(0, SIGNATURE );
  26.   EEPROM.write(1, s1);
  27.   EEPROM.write(2, s2);
  28.   EEPROM.write(3, s3);
  29. }
  30. }
复制代码


如資料多, 可改成 array 優化儲存/讀取程序.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-6 10:57:10 | 显示全部楼层
Super169 发表于 2014-4-6 10:52
例設用 0-3 既位置儲存, 0 為 signature 以確認是否之前的狀態記錄, 假設你用 0xAA 作檢測.
反正只有 3 個 ...

谢谢Super169,我试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 01:01 , Processed in 0.034400 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表