Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 3314|回復: 4
打印 上一主題 下一主題

程式碼求救,數值不會歸0

[複製鏈接]
跳轉到指定樓層
1#
發表於 2016-3-19 15:02:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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,而是讀取到最後一個數值在上面

求解><"
2#
發表於 2016-3-19 19:58:06 | 只看該作者
本帖最後由 超新手 於 2016-3-19 20:11 編輯

當然不會歸零, 因為你程式就是這樣寫的
如果沒看錯的話
noise 是指從開機以來
所讀到的amps 的最大值, 減去所讀到的amps 最小值
一旦沒輸入, "通常"它的差值不會比有輸入的小
更別說等於0了
你可以在沒輸入時, 在序列埠監控視窗的最上面
隨便打個字(如a), 再按傳送去重置它
應該就可得到接近0的值了
3#
 樓主| 發表於 2016-3-20 14:46:57 | 只看該作者
回復 2# 超新手


   那要怎麼寫才會歸0,還是要重寫?
我這個程式是是交流電,正弦波最小+正弦波最大=電流值,

理論上如果最大跟最小都=0 的話 電流應該=0
4#
發表於 2016-3-20 15:51:52 | 只看該作者
本帖最後由 超新手 於 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 沒給初始值, 程式會有點問題
5#
 樓主| 發表於 2016-3-22 21:59:36 | 只看該作者
回復 4# 超新手


   =A=好像有點快懂又不太懂的....抱歉,因為我只有寫過取"差值",但是從來沒碰過會上下起伏的...
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-5 04:37 , Processed in 0.243227 second(s), 7 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表