极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10151|回复: 2

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

[复制链接]
发表于 2014-4-5 20:59:48 | 显示全部楼层 |阅读模式
三个位置传感器输入(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-8 11:39:16 | 显示全部楼层
  1. #include <EEPROM.h>

  2. int address = 0;
  3. int flag = 0;
  4. int in1 = 2;
  5. int in2 = 3;
  6. int in3 = 4;
  7. int a1 = 5;
  8. int a2 = 6;

  9. void setup()
  10. {
  11.   pinMode(a1, OUTPUT);
  12.   pinMode(a2, OUTPUT);
  13.   flag = EEPROM.read(address);
  14. }

  15. void loop()
  16. {
  17.   if(digitalRead(in1)==HIGH)
  18.     flag = 1;

  19.   if(digitalRead(in2)==HIGH)
  20.     flag = 2;

  21.   if(digitalRead(in3)==HIGH)
  22.     flag = 3;

  23.   switch (flag) {
  24.         case 1:
  25.           EEPROM.write(address, flag);
  26.           digitalWrite(a1, HIGH);
  27.           digitalWrite(a2, LOW);
  28.           flag = 0;
  29.           break;

  30.         case 2:
  31.           EEPROM.write(address, flag);
  32.           digitalWrite(a1, LOW);
  33.           digitalWrite(a2, HIGH);
  34.           flag = 0;
  35.           break;

  36.         case 3:
  37.           EEPROM.write(address, flag);
  38.           digitalWrite(a1, HIGH);
  39.           digitalWrite(a2, LOW);
  40.           flag = 0;
  41.           break;  

  42.         default:
  43.           ;// do nothing
  44.          
  45.     }  
  46. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-8 13:58:06 | 显示全部楼层
i7456 发表于 2014-4-8 11:39

3Qi7456,非常感谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 13:15 , Processed in 0.034762 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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