analogWriteResolution()
analogWriteResolution()是用在Due and Zero上的Analog API的扩展 .
analogWriteResolution()用来设置 analogWrite() 的精度.默认是8位(0-255)向后兼容AVR板.
DUE有下列硬件特性:
12个默认8-bit的PWM引脚, 2个 12-bit DAC (数模转换)引脚 设置为12位精度,你就可以用 analogWrite() 得到0-4096的值来使用最大的DAC精度或者设置pwm信号.
Zero有以下的硬件特性:
10个默认8位的pwm引脚, 和AVR板一样. 可以改变到12位精度. 1个 10-bit DAC (数模转换)引脚 设置为10位精度,你就可以使用 analogWrite() 得到0-1023的值来使用最大的DAC精度
语法
analogWriteResolution(bits)
参数
bits:决定analogWrite()的精度值。这个值可以从1到32之间变化。如果你选择了高于或者低于板子的容量值,analogWrite()得到的值将会缩短或者以0填充,详细请看注意事项。
返回
无.
注意
如果你设置的 analogWriteResolution() 高于板子的容量,得到的数据将会抛弃额外的几位精度,例如:在DUE的12位DAC引脚上使用analogWriteResolution(16),只有前十二位值会被analogWrite()使用,后四位将被抛弃。
如果你设置的analogWriteResolution() 小于板子的容量,缺失的几位将会被0填充,来填补硬件需求,例如:在DUE的12位DAC引脚上使用analogWriteResolution(8),将会添加4位0到8位值后面来满足12位需求。
例子
void setup(){ // 打开串口 Serial.begin(9600); // 数字输出 pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop(){ // 读取A0输入,映射到PWM脚 // 连接的LED 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精度到12位 // 12位精度只在Due上支持 analogWriteResolution(12); analogWrite(12, map(sensorVal, 0, 1023, 0, 4095)); Serial.print(" , 12-bit PWM value : "); Serial.print(map(sensorVal, 0, 1023, 0, 4095)); // 改变pwm精度到4位 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); }