Super169 发表于 2014-3-25 22:52:24

用 Nano 接按鈕的問題

嘗試用 Nano 連接 OLED 及 按鈕, 由 A0 接收按鈕狀態去控制.
之前一直都用 analogRead(BUTTON) < 1 在 UNO 上測試是否被按下, 一直都沒有問題.

但同一套硬體, 同一個軟件, 放到 Nano 上就不停亂跳.
不斷簡化程序, 發覺原來是 analogRead 的結果, 極不穩定.

在沒按下時, 偶然會出現 0 的數值, 同樣在按下時, 也會有非 0 的數值.
因此程式誤判了按鈕的狀況, 當成被不斷按了, 所以不停執行按鈕程式而亂跳.

但同樣的接線, 回到 UNO 中又沒有問題了.

我只是用了最簡單的接線, 接到鈕上兩腳, 分別接上 A0 及 GND (兩個 GND: pin29 及 pin4 也試了, 結果一樣)

也有嘗試加入 10K 電阻串到 GND 的接線, 但結果還是一樣.

請問在 Nano 中使用按鈕時, 是否可以直接連線?
用 analogRead < 1 的測試是否正確 (我是我在開發套件抄出來的)?有什麼方法可以準確測知按鈕的狀態?

isilcala 发表于 2014-3-26 01:27:09

analogRead < 1?

analogRead的取值范围是0到1023。你要它<1也就只能等于0了。对于一个有1024分辨率的读取模拟量的接口,这个太极端了。

试试看< 512之类的值吧。

isilcala 发表于 2014-3-26 01:32:11

而且要接电阻也应该是上拉电阻到5v端吧

Super169 发表于 2014-3-26 01:43:42

isilcala 发表于 2014-3-26 01:27 static/image/common/back.gif
analogRead < 1?

analogRead的取值范围是0到1023。你要它

不行, 因為不論是否接了下去, 都會出現 0 或非 0 的數值.
現在用 val < 1, 基本上就是 val == 0, 但在沒按下時還是會觸發.
如果改成 val < 512, 錯誤觸發的機會就更大了.

正常如果按了下去, 接通的話, 應該會變成 0 的, 在 UNO 板上沒問題.
但我也不太懂, 因為只是跟套件的例子去做, 當中有些接駁較多東西時, 當中會串上一個 10K 的電阻, 所以我也試了一次, 結果還是不行.
好像是不論按下興否, 都有機會出現 0.如果沒按下, 出現的機會比較少, 相反按下去時, 大部份都是 0, 但當中亦會出現一些非零的數字, 實在難以捉摸.而且只是在 Nano 上發生, 在 UNO 上基本上非常穩定, 只是在間中會有時按完後, 變成非 0 後會突然有一次變回 0, 很快就回到完全非零了.

或者我也不肯定自己的接法是否正確, 由於現在只可以靠按鈕進行互動, 所以必需要把按鈕處理好.

Super169 发表于 2014-3-26 02:01:10

isilcala 发表于 2014-3-26 01:32 static/image/common/back.gif
而且要接电阻也应该是上拉电阻到5v端吧

oh, 那是我攪錯了.

請問如果上拉到 5v 的話, 我同時可能會並上幾個模塊, 但應該不會需要大電流的.
請問一般接 按鈕, 用多大的電阻會比較好?謝謝.

isilcala 发表于 2014-3-26 12:45:08

Super169 发表于 2014-3-26 02:01 static/image/common/back.gif
oh, 那是我攪錯了.

請問如果上拉到 5v 的話, 我同時可能會並上幾個模塊, 但應該不會需要大電流的.


10k的就可以。

另外如果很依赖按键的话,建议也做一下按键消抖。

Super169 发表于 2014-3-26 13:42:51

isilcala 发表于 2014-3-26 12:45 static/image/common/back.gif
10k的就可以。

另外如果很依赖按键的话,建议也做一下按键消抖。

唔該哂.

謝謝你的提意, 我從前也不知道要按键消抖, 看了你的提意再百度一下, 才知要這樣做.可信性可以提高.晚上回家試試.

isilcala 发表于 2014-3-26 13:59:22

Super169 发表于 2014-3-26 13:42 static/image/common/back.gif
唔該哂.

謝謝你的提意, 我從前也不知道要按键消抖, 看了你的提意再百度一下, 才知要這樣做.可信性可 ...

嗯不客气。如果用模拟口来读的话,还可以配合多个电阻,实现1个模拟口读取多个按键的状态。

又或者你只关心一个按键,但是对它的响应要非常敏感,那可以尝试用中断。

至于为什么NANO的读数乱飘,多数是因为一个板子小,另一个大多数NANO都是山寨货,做工也不咋地,受干扰比较厉害。

Super169 发表于 2014-3-26 22:09:17

isilcala 发表于 2014-3-26 13:59 static/image/common/back.gif
嗯不客气。如果用模拟口来读的话,还可以配合多个电阻,实现1个模拟口读取多个按键的状态。

又或者你只 ...

謝謝幫忙.

果然是我把電阻錯放了, 改成上拉電阻, 基本上用 512 去分界已很準確, 加入消抖就更準確了, 因為間中放手後會有一下跳動.

可能是我的 NANO 質量問題, 按下時不能全零..理論上按下就是接地了, 之前用 UNO 測試也很準確的.
不過, 加了上拉電阻之後, 分別就更大了, 總比只測試一個值的包容性更大.

isilcala 发表于 2014-3-26 22:47:17

本帖最后由 isilcala 于 2014-3-26 22:55 编辑

Super169 发表于 2014-3-26 22:09 static/image/common/back.gif
謝謝幫忙.

果然是我把電阻錯放了, 改成上拉電阻, 基本上用 512 去分界已很準確, 加入消抖就更準確了,...

玩这个是这样,常常要根据特定的硬件去修改软件的参数。

你可以观察一下读数,找到个包容性更强的值,可以同时适用NANO/UNO的。比如下放到1/3(334)甚至1/4左右的位置。
页: [1]
查看完整版本: 用 Nano 接按鈕的問題