analogWriteResolution()
描述
analogWriteResolution()
可以设定 analogWrite()
函式的解析度,analogWrite()
的输入值预设是 0 到 255 (8 bits),相容于 AVR 系列的 Arduino板。
86Duino 的 CPU 有 12 个 32-bit PWM 计时器,每个 PWM 计时器的最小时间间隔为 10ns。
在 86Duino 上,analogWrite()
函式的 PWM 频率为 1000Hz ,最高解析度是 13,使用 analogWriteResolution()
将解析度设定为 13 就可以让 analogWrite()
的输入数值范围变成 0 到 8191。
语法
analogWriteResolution(bits)
参数
bits
: 决定 analogWrite()
函式使用的解析度 (以 bit 为单位),可以设定的范围从 1 到 32;你可以把解析度设定的比硬体解析度更高也可以更低,但使用的 analogWrite()
数值会因为数值太大或者太小而被截断,详细说明可以看下面的注解。
回传值
无回传值
注解
如果你将 analogWriteResolution()
的数值设定的比板子的硬体解析度还要高的时候,将会舍去额外的位元;举个例子:在 86Duino 上呼叫 analogWriteResolution(16)
之后,实际上 analogWrite() 使用的数值只有较低的 13 bits,而较高的 3 bits 会被舍去。
如果你将 analogWriteResolution()
的数值设定的比板子的硬体解析度还要低的时候,会补上 0 以达到所需的解析度;举个例子:在 86Duino 上呼叫 analogWriteResolution(8)
之后,实际上 analogWrite() 会在输入的 8-bit 数值中自动补上 5 个 0 以符合 13-bit 的解析度。
范例
void setup(){ // 开启序列埠 Serial.begin(9600); // 让数位讯号 pin 脚变成输出 pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop(){ // 从 A0 读入数值并传给下列与 LED 相连的 PWM pin 脚 int sensorVal = analogRead(A0); Serial.print("Analog Read) : "); Serial.print(sensorVal); // 预设的 PWM 解析度 analogWriteResolution(8); analogWrite(11, map(sensorVal, 0, 1023, 0 ,255)); Serial.print(" , 8-bit PWM value : "); Serial.print(map(sensorVal, 0, 1023, 0 ,255)); // 将 PWM 解析度变成 13 bits // 在 86Duino 上使用 13 bits 的解析度 analogWriteResolution(13); analogWrite(12, map(sensorVal, 0, 1023, 0, 8191)); Serial.print(" , 13-bit PWM value : "); Serial.print(map(sensorVal, 0, 1023, 0, 8191)); // 将 PWM 解析度变成 4 bit analogWriteResolution(4); analogWrite(13, map(sensorVal, 0, 1023, 0, 127)); Serial.print(", 4-bit PWM value : "); Serial.println(map(sensorVal, 0, 1023, 0, 127)); delay(5); }
See also
- analogWrite()
- map()
本页由热血青年 LBU 译自英文版。
The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.