查看: 393|回复: 2
打印 上一主题 下一主题

关于三个按钮的优先权问题求大神解答

[复制链接] qrcode

35

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2015-11-5 06:26 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设定三个按键(B1,B2,B3)分別控制三个LED(红绿黄),按住B1红色LED会快闪(0.5秒),按住B2绿色LED会慢慢变亮慢慢变暗(Fade),按住B3黄色LED会慢闪(1秒),当放开时LED要灭掉
并加入优先权问题,权限大小分別为B1>B2>B3。
例如:
(1)当B1与B2同时按住,只会有B1红色LED会快闪(0.5秒)的结果。
(2)当B1与B3同时按住,只会有B1红色LED会快闪(0.5秒)的结果。
(3)当B2与B3同时按住,只会有B2绿色LED会慢慢变亮慢慢变暗(Fade)的结果。

(4)若是个別启动,输出结果不变。



我只能完成分别控制按钮,关于优先权问题一直做不出 求大神指导

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
const int xR = 13;
const int xG = 11;
const int xY = 8;

const int xB1 = 5;
const int xB2 = 4;
const int xB3 = 3;

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(xR, OUTPUT);
  pinMode(xG, OUTPUT);
  pinMode(xY, OUTPUT);
  pinMode(xB1, INPUT);
  pinMode(xB2, INPUT);
  pinMode(xB3, INPUT);
  Serial.begin(9600);
}

unsigned long intR = 500;
unsigned long intY = 1000;

unsigned long tR = 0;
unsigned long tY = 0;

int sR = LOW;
int sY = LOW;


// the loop routine runs over and over again forever:
void loop() {
int b1 = digitalRead(xB1);
int b2 = digitalRead(xB2);
int b3 = digitalRead(xB3);
    unsigned long ct = millis();
  
  if (b1 && (ct - tR >= intR)) {
    tR = ct;
sR=flip(sR);
    digitalWrite(xR, sR);
  } 

  if (b3 && (ct - tY >= intY)) {
    tY = ct;
sY=flip(sY);
    digitalWrite(xY, sY);
  }
  
  if (b1==LOW)
  digitalWrite(xR,LOW);

  if (b3==LOW)
  digitalWrite(xY,LOW);

  Serial.println(b1);
  
  delay(10);  
}

int flip(int s) {
  if (s==LOW)
  return HIGH;
  else
    return LOW;
}


回复

使用道具 举报

0

主题

74

帖子

16

积分

新手上路

Rank: 1

积分
16
沙发
发表于 2015-11-5 06:26 PM | 只看该作者

把两个按键同时按下的情况,分别定义出来,然后在运行的时候加以区分。

const int xB1&B2=1;

const int xB1&B3=2;

const int xB2&B3=6;

回复 支持 反对

使用道具 举报

0

主题

72

帖子

4

积分

新手上路

Rank: 1

积分
4
板凳
发表于 2015-11-6 08:16 AM | 只看该作者
利用中断的优先级试试呢。。好吧。我不怎么会Aridu……
回复 支持 反对

使用道具 举报

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

本版积分规则

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