|
|
发表于 2014-9-26 17:03:30
|
显示全部楼层
lyhlyly 发表于 2014-9-26 14:40 
谢谢,我也看到这个了。我在试其他的办法,准备将 获得的值转换为二进制数,多开几个digtialPIN,通过digi ...
要注意, analogRead 跟 analogWrite 就是接對了線 (例如 D3 接了 A0), 結果也是不同的.
因為 analogWrite 是用 PWM 形式模擬 analog, 跟 analog output 不同的, 只會讀到 0 或 1023.
如果你可以準確量出 HIGH LOW 的比例, 或許可以把 PWM 接到 Digital In, 再用 pulseIn 去測量 HIGH LOW 比例, 而推算原來 analogWrite 的值.
例如: 用一塊板自行測試, 把 D3 接 D5, 執行以下程式:
- void setup() {
- Serial.begin(57600);
- // put your setup code here, to run once:
- pinMode(3, OUTPUT);
- pinMode(5, INPUT);
-
- analogWrite(3, 200);
-
- }
- void loop() {
- // put your main code here, to run repeatedly:
- int ph, pl, val;
- ph = pulseIn(5, HIGH);
- pl = pulseIn(5, LOW);
- val = 255.0 * ph / (ph + pl);
-
- Serial.print(pl);
- Serial.print(" ");
- Serial.print(ph);
- Serial.print(" ");
- Serial.print(val);
- Serial.println();
- delay(1000);
- }
复制代码
但由於 pulseIn 的準確性有些少偏差, 還原的數值會有少少變左, 但都在 +/- 1 之內.
是否可以用得著, 要看你對數值準確性的要求了. 如果只是用來控制光亮度, 應該是沒問題的. |
|