analogRead 跟analogWrite 的问题
最近遇到一个问题,两块板子间通信,我想通过 上位机 往analogWrite(A0),两块板子的A0口直联(试过直接加电阻,或者电阻接地,测电压的方法),下位机直接去 analogRead(A0).然后我去通过同一块板子去测试,
analogWrite(9, brightness);
value=analogRead(9);
Serial.print(value);
Serial.print("-");
Serial.println(brightness);
发现value的值跟brightness的值是不一样的?这是为什么呢?
264-205
261-200
264-195
260-190
264-185
259-180
264-175
259-170
265-165
262-160
267-155
261-150
266-145
262-140
266-135
260-130
263-125
261-120
262-115
或者我怎么能实现将上位机的值 直接通过下位机的pin口传输过去?
是不是要共地一下?
另外,用这个口传数字型号应该不是很合适吧? analogWrite(9, brightness);
value=analogRead(9);
analogWrite 是對 PWM 接口的.
而 analogRead 是對 analog 接口的.
analogWrite (9,..)跟analogRead(9) 並非指向同一地方.
Super169 发表于 2014-9-26 14:02 static/image/common/back.gif
analogWrite(9, brightness);
value=analogRead(9);
谢谢,我也看到这个了。我在试其他的办法,准备将 获得的值转换为二进制数,多开几个digtialPIN,通过digitalWrite,跟digtitalRead 去试试 lyhlyly 发表于 2014-9-26 14:40 static/image/common/back.gif
谢谢,我也看到这个了。我在试其他的办法,准备将 获得的值转换为二进制数,多开几个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 之內.
是否可以用得著, 要看你對數值準確性的要求了.如果只是用來控制光亮度, 應該是沒問題的. 本帖最后由 Super169 于 2014-9-26 17:39 编辑
相信如果加入一定的濾波程式, 或者可以準確還原模擬輸出的數值.
又或耆每次只發出一個代表 0-51 的數值, 以5 個 數為一格, 輸出中間值, 而接收時把數值 / 5.
例如以:0-4 代表 0, 輸出 2, 5-9 代表 1, 輸出 7, 即輸出 5 * N + 2 去代表 N, 應該可以較準確地還原的.
有興趣可以一試.
Super169 发表于 2014-9-26 17:06 static/image/common/back.gif
相信如果加入一定的濾波程式, 或者可以準確還原模擬輸出的數值.
又或耆每次只發出一個代表 0-51 的數值, 以 ...
:lol目前实现了 digitalWrite 跟digitalRead.这两天在玩多线程。 看了你的回复,国庆这几天又有得玩啦。非常感谢!
页:
[1]