智能产品创新方法04课——按钮控制RGB的颜色和用电位器控制RGB的亮度

一、总述

       将按钮单独通过一个引脚作为信号输入到stm32单片机,用来控制灯泡的颜色变化,电位器也通过一个引脚作为变量信号输入到单片机中,用这两个变量控制RGB灯的颜色及亮度,输出要用到单片机中的PWM引脚(脉冲宽度调制,将数字电压信号输出为模拟电压信号状态),按钮引脚要接上拉电阻,此处采用的是单片机中自带的上拉电阻(稳定信号和防止浮动),电位器要用到ADC引脚(模数转换器)

二、原理电路图

三、代码部分

          使用Arduion软件进行上传:

const int redPin = 3;   // PWM支持的引脚  
const int greenPin = 4; // PWM支持的引脚  
const int bluePin = 5; // PWM支持的引脚  
const int button= 2; // 按钮上拉电阻引脚
const int potPin = 1; // 选择一个支持ADC的引脚  
int button_count = 1;//按钮按动次数

void setup() { 
    pinMode(redPin, OUTPUT);  
    pinMode(greenPin, OUTPUT);  
    pinMode(bluePin, OUTPUT);    


    pinMode(button, INPUT_PULLUP); //初始化按键引脚为输入,并启用内部上拉电阻
    pinMode(potPin, INPUT);  // 初始化电位器引脚为模拟输入  
    Serial.begin(9600);//串口频率
}  
  
void loop() {    
 int value=map(analogRead(1),0,4095,0,255);//获取1号引脚输入的数据,0~4095为12位模数转换器的范围,map()为映射函数,将0~4095等比例归为0~255,0~255为输出的PWM的占空比
 Serial.println(value); //串口显示
 delay(100);
 if(digitalRead(button)==LOW)   //按键扫描
    {
        delay(20);//消抖,防止程序误以为短时间按了多次
        if(digitalRead(button)==LOW);  
        {
            button_count=button_count+1;
            while(digitalRead(button)==LOW);
        }
    }
    if(button_count==1)
    {
    analogWrite(redPin,value);  
    analogWrite(greenPin, 0);  
    analogWrite(bluePin,0 );    
    delay(200);
    }
    if(button_count==2)
    {
    analogWrite(redPin, 0);  
    analogWrite(greenPin, value);  
    analogWrite(bluePin, 0);
    delay(200);
    }  
    if(button_count==3)
    {
    analogWrite(redPin, 0);  
    analogWrite(greenPin, 0);  
    analogWrite(bluePin, value);
     delay(200);
    }
    if(button_count>3)
    {
        button_count=1;        
    }
}


四,最后pwm的值会在Arduion的串口监视器中显示,通过电位器控制灯泡的亮度的时候,其值会在0到255之间变化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值