一 硬件
电位器有三个接头,两端有五个接头V和GND,在中间端接一个模拟引脚,实际上电位器是一个可变电阻元件,旋转电位器旋钮,改变输出电压的值。
二 代码
功能:旋转电位器LED代码如下:
///旋转电位器,控制LED的亮度,从串口检查读取的模拟值 const int analogInPin = A0; // 模拟输入引脚 const int analogOutPin = 9; //接LED正极 PWM输出引脚 int sensorValue = 0; // 电位器电压值 int outputValue = 0; // 模拟输出值(PWM) void setup() { //pinMode(analogOUTPin,OUTPUT);//省略这句话,后续analogWrite()仍然有效 Serial.begin(9600); ///初始串口波特率为9600 } void loop() { sensorValue = analogRead(analogInPin); // 读取模拟量值 outputValue = map(sensorValue, 0, 1023, 0, 255); // 数据数据区间 analogWrite(analogOutPin, outputValue); // 输出对应的PWM值,控制LED的亮度 Serial.print("sensor = "); Serial.print(sensorValue); Serial.print("\t output = ");// \t 跳到下一个TAB位置 Serial.println(outputValue); delay(2); //延迟2毫秒 }
1)直接模拟口读值可以。模拟量不需要设置引脚模式,pinMode只用于数字引脚。
2)int value=读取的值value不是电压值,而是0和1023之间的整数值(意味着0和工作电压(5)V或3.3V)它们之间的电压值映射为0和1023之间的整数值)。例如,我这次连接了5V,然后5伏特分为10245 volts / 1024 units or, 0.0049 volts (4.9 mV) per unit】#,0伏特信号对应0值,5伏特信号对应1023。
3)读取的模拟值用于控制灯的亮度,结合前面PWM将读取值转换为0的知识~255,用函数,功能是数一个数value从一个范围(fromLow~ fromHigh)映射到另一个范围(toLow ~ toHigh )。
所以使用这个函数实际上可以反映读取的真实电压。
4) PWM在这种情况下,不需要设置LED正极引脚接口为OUTPUT模式,这个挺让我吃惊的,但是过了LED还是亮的,估计是因为后续是模拟输出analogWrite(),所以不需要。
#https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/