Arduino通过电位器调节RGB灯颜色
电位器模块可以通过旋转旋钮调节调节内部可变电阻的阻值,从而输出0-1023的数值信号。那么就可以通过analogRead()函数读取输出值。
int analogInputVal = analogRead(A0);
一种简单的方法是直接用map()函数将0-1023映射到0-255上,并直接写入RGB灯的三个通道内:
int brightness = map(analogInputVal, 0, 1023, 0, 255);
analogWrite(PIN_RED, brightness);
analogWrite(PIN_GREEN, 255-brightness);
analogWrite(PIN_BLUE, 255);
如上,就可以实现RGB灯从红色到绿色随着旋钮旋转而逐渐变化的效果。


当然,Arduino UNO只有一个5V供电输出,我们所使用的RGB灯和电位器都需要5V供电,这里可以通过将引脚设置为高电平状态来充当一个5V供电。
pinMode(VCC, OUTPUT);
digitalWrite(VCC, HIGH);
有关Arduino引脚的问题可以查看这一篇文章:详解Arduino Uno开发板的引脚分配图及定义(重要且基础) - Neo0820 - 博客园 (cnblogs.com)
完整代码:
int PIN_RED = 9;
int PIN_GREEN = 10;
int PIN_BLUE = 11;
int r,g,b;
int VCC = 7;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
pinMode(PIN_BLUE, OUTPUT);
pinMode(VCC, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(VCC, HIGH);
int analogInputVal = analogRead(A0);
int brightness = map(analogInputVal, 0, 1023, 0, 255);
analogWrite(PIN_RED, brightness);
analogWrite(PIN_GREEN, 255-brightness);
analogWrite(PIN_BLUE, 255);
Serial.println(analogInputVal);
}

浙公网安备 33010602011771号