极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12569|回复: 9

用 Nano 接按鈕的問題

[复制链接]
发表于 2014-3-25 22:52:24 | 显示全部楼层 |阅读模式
嘗試用 Nano 連接 OLED 及 按鈕, 由 A0 接收按鈕狀態去控制.
之前一直都用 analogRead(BUTTON) < 1 在 UNO 上測試是否被按下, 一直都沒有問題.

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

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

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

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

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

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

使用道具 举报

发表于 2014-3-26 01:27:09 | 显示全部楼层
analogRead < 1?

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

试试看< 512之类的值吧。
回复 支持 反对

使用道具 举报

发表于 2014-3-26 01:32:11 | 显示全部楼层
而且要接电阻也应该是上拉电阻到5v端吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-26 01:43:42 | 显示全部楼层
isilcala 发表于 2014-3-26 01:27
analogRead < 1?

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

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

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

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

使用道具 举报

 楼主| 发表于 2014-3-26 02:01:10 | 显示全部楼层
isilcala 发表于 2014-3-26 01:32
而且要接电阻也应该是上拉电阻到5v端吧

oh, 那是我攪錯了.

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

使用道具 举报

发表于 2014-3-26 12:45:08 | 显示全部楼层
Super169 发表于 2014-3-26 02:01
oh, 那是我攪錯了.

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

10k的就可以。

另外如果很依赖按键的话,建议也做一下按键消抖。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-26 13:42:51 | 显示全部楼层
isilcala 发表于 2014-3-26 12:45
10k的就可以。

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

唔該哂.

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

使用道具 举报

发表于 2014-3-26 13:59:22 | 显示全部楼层
Super169 发表于 2014-3-26 13:42
唔該哂.

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

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

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

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

使用道具 举报

 楼主| 发表于 2014-3-26 22:09:17 | 显示全部楼层
isilcala 发表于 2014-3-26 13:59
嗯不客气。如果用模拟口来读的话,还可以配合多个电阻,实现1个模拟口读取多个按键的状态。

又或者你只 ...

謝謝幫忙.

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

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

使用道具 举报

发表于 2014-3-26 22:47:17 | 显示全部楼层
本帖最后由 isilcala 于 2014-3-26 22:55 编辑
Super169 发表于 2014-3-26 22:09
謝謝幫忙.

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


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

你可以观察一下读数,找到个包容性更强的值,可以同时适用NANO/UNO的。比如下放到1/3(334)甚至1/4左右的位置。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 09:45 , Processed in 0.038075 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表