Robofun 機器人論壇
標題:
程式碼求救,數值不會歸0
[打印本頁]
作者:
ates1687
時間:
2016-3-19 15:02
標題:
程式碼求救,數值不會歸0
float amps = 0;
float maxAmps = 0;
float minAmps = 0;
float lastAmps = 0;
float noise = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
amps = ((512 - analogRead(A0)) * 27.50 / 1023);
amps = (amps + lastAmps) / 2;
lastAmps = amps;
maxAmps = max(maxAmps, amps);
minAmps = min(minAmps, amps);
noise = maxAmps - minAmps;
//Serial.print(amps);
//Serial.print(" ");
Serial.println(noise);
if (Serial.read() != -1) {maxAmps = amps; minAmps = amps;}
delay(1000);
}
這程式碼一開始沒問題A0的數值都有出來,
但是當A0沒有數值進來時 noise 那一行數值並不會歸0,而是讀取到最後一個數值在上面
求解><"
作者:
超新手
時間:
2016-3-19 19:58
本帖最後由 超新手 於 2016-3-19 20:11 編輯
當然不會歸零, 因為你程式就是這樣寫的
如果沒看錯的話
noise 是指從開機以來
所讀到的amps 的最大值, 減去所讀到的amps 最小值
一旦沒輸入, "
通常
"它的差值不會比有輸入的小
更別說等於0了
你可以在沒輸入時, 在序列埠監控視窗的最上面
隨便打個字(如a), 再按傳送去重置它
應該就可得到接近0的值了
作者:
ates1687
時間:
2016-3-20 14:46
回復
2#
超新手
那要怎麼寫才會歸0,還是要重寫?
我這個程式是是交流電,正弦波最小+正弦波最大=電流值,
理論上如果最大跟最小都=0 的話 電流應該=0
作者:
超新手
時間:
2016-3-20 15:51
本帖最後由 超新手 於 2016-3-21 10:44 編輯
>>
理論上如果最大跟最小都=0 的話 電流應該=0
電流是 0 沒錯, 但一定小於有正弦波的電流值(不可能有比 0 小的正值了吧?)
所以顯示出來的一定是原來的值
你的程式是顯示 "
曾經發生過的最大
電流值"
而不是目前的
電流值
可以改成
在LOOP中只要執行的時間超過正弦波的週期
(建議至少2個週期)
就執行清除的動作, 如下
static int time;
if(++time >= 40)
{time = 0;
maxAmps = amps;
minAmps = amps;
}
40 是我亂寫的, 值要填多才少, 只有你知道
還有, 你的
lastAmps 沒給初始值, 程式會有點問題
作者:
ates1687
時間:
2016-3-22 21:59
回復
4#
超新手
=A=好像有點快懂又不太懂的....抱歉,因為我只有寫過取"差值",但是從來沒碰過會上下起伏的...
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2