有三种亮灯方式,怎么用arduino怎么写出按一下微动开关,可以切换一种亮灯方式?

如题所述

    
//假设有两个LED灯
#define PORT_LED1 10
#define PORT_LED2 11
//假设按键在12端口
#define PORT_KEY 12

#define KEYMODE_1 1
#define KEYMODE_2 2
#define KEYMODE_3 3

uint8_t keyMode;

// 按键处理初始化
void KeyScanInit(void)
{
pinMode(PORT_KEY,INPUT_PULLUP); //输入模式,内部上拉。
keyMode = KEYMODE_1;
}

// 任务:按键处理
void KeyScanTask(void)
{
static uint8_t keypre = 0; //按键被按下时置1.
if( (keypre == 0) && (digitalRead(PORT_KEY) = LOW) ) //按键被按下
{
keypre = 1; //置1,避免持续按下按键时再次进入此函数体。
switch(keyMode)
{
case KEYMODE_1:
keyMode = KEYMODE_2;
break;
case KEYMODE_2:
keyMode = KEYMODE_3;
break;
case KEYMODE_3:
keyMode = KEYMODE_1;
break;
default:
break;
}
}
if(digitalRead(PORT_KEY) = HIGH) //按键被放开
{
keypre = 0; //置0,允许再次切换LED模式
}
}

// LED初始化
void LEDInit(void)
{
pinMode(PORT_LED1,OUTPUT);
pinMode(PORT_LED2,OUTPUT);
digitalWrite(PORT_LED1,LOW);
digitalWrite(PORT_LED2,LOW);
}

// 任务:LED灯显示处理
void LEDTask(void)
{
switch(keyMode)
{
case KEYMODE_1:
digitalWrite(PORT_LED1,HIGH);
digitalWrite(PORT_LED2,LOW);
break;
case KEYMODE_2:
digitalWrite(PORT_LED1,LOW);
digitalWrite(PORT_LED2,HIGH);
break;
case KEYMODE_3:
digitalWrite(PORT_LED1,HIGH);
digitalWrite(PORT_LED2,HIGH);
break;
default:
break;
}
}

void setup ()
{
KeyScanInit();
LEDInit();
}

void loop()
{
KeyScanTask();
LEDTask();
}
温馨提示:答案为网友推荐,仅供参考
相似回答