用户工具

站点工具


reference:language: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);
}
reference/language/analogwriteresolution.txt · 最后更改: 2017/04/07 10:03 (外部编辑)