用户工具

站点工具


reference:language:analogwriteresolution

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
zh:reference:language:analogwriteresolution [2016/01/06 08:44] nzhureference:language:analogwriteresolution [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== 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位需求。
 +===== 例子 =====
 +
 +<code cpp>
 +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);
 +}
 +</code>