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.
