通过按键切换LED颜色

通过按键切换LED颜色

实验现象

按键每次按下,LED切换一种颜色,依次为红 绿 蓝 黄 紫 青 白

原理图

在这里插入图片描述

代码编写

#define led_r 2
#define led_g 3
#define led_b 4
#define key 5
void scan_key();
void change_color();
unsigned char key_num = 0;
unsigned char color_value = 0;
//枚举类型,定义了一串类型
enum {
    
     color_r, color_g, color_b, color_rg, color_rb, color_gb, color_rgb };
//红 绿 蓝 黄 紫 青 白
void setup() {
    
    
	//设置输出
	pinMode(led_r, OUTPUT);
	pinMode(led_g, OUTPUT);
	pinMode(led_b, OUTPUT);
	pinMode(key, INPUT_PULLUP);
	change_color(color_rgb);
}
void loop() {
    
    
	scan_key();//按键扫描
	if (key_num == 1) {
    
    //按键执行程序
		key_num = 0;//清空标志位
		change_color(color_value);//切换颜色
		color_value++;//颜色变量进行加一操作
		if (color_value == color_rgb+ 1) {
    
    
			//当颜色变量 == 7
			color_value = color_r;//颜色变量清零
		}
	}
}
//选择颜色的函数
void change_color(unsigned char data_color) {
    
    
	switch (data_color)
	{
    
    
		//红色
		case color_r: {
    
    
			digitalWrite(led_r, LOW);
			digitalWrite(led_g, HIGH);
			digitalWrite(led_b, HIGH);
			break;
		}
		//绿色
		case color_g:
		{
    
    
			digitalWrite(led_r, HIGH);
			digitalWrite(led_g, LOW);
			digitalWrite(led_b, HIGH);
			break;
		}
		//蓝色
		case color_b:
		{
    
    
			digitalWrite(led_r, HIGH);
			digitalWrite(led_g, HIGH);
			digitalWrite(led_b, LOW);
			break;
		}
		//紫色
		case color_rb:
		{
    
    
			digitalWrite(led_r, LOW);
			digitalWrite(led_g, HIGH);
			digitalWrite(led_b, LOW);
			break;
		}
		//黄色
		case color_rg:
		{
    
    
			digitalWrite(led_r, LOW);
			digitalWrite(led_g, LOW);
			digitalWrite(led_b, HIGH);
			break;
		}
		//青色
		case color_gb:
		{
    
    
			digitalWrite(led_r, HIGH);
			digitalWrite(led_g, LOW);
			digitalWrite(led_b, LOW);
			break;
		}
		//白色
		case color_rgb:
		{
    
    
			digitalWrite(led_r, LOW);
			digitalWrite(led_g, LOW);
			digitalWrite(led_b, LOW);
			break;
		}
		default: {
    
    
			break;
		}
	}
}
void scan_key() {
    
    
	//按键扫描
	if (digitalRead(key) == 0) {
    
    
		//查看按键是否按下
		delay(20);//延时20ms
		if (digitalRead(key) == 0) {
    
    
			//查看按键是否按下
			key_num = 1;
			while (digitalRead(key) == 0) {
    
    
				//松手检测
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45671732/article/details/109238521
今日推荐