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.