Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 14060|回復: 16

藍芽接收資料控制自走車的問題

[複製鏈接]
發表於 2017-12-9 22:47:13 | 顯示全部樓層 |閱讀模式
本帖最後由 a26265788 於 2017-12-9 23:20 編輯

小弟想透過手機藍芽傳送電池的電壓給UNO
再由電壓值高低去驅動自走車前進5秒
目前的狀況是可以正常連接藍芽並傳送資料
但是序列埠那邊似乎會延遲收到資料
變成動作怪怪的
就是當按下send後馬達就會馬上轉動
但是他是等arduino monitor 全部顯示出來後才開始算5秒
1.我希望能做到monitor那邊收到電壓4位數之後
才開始讓馬達運轉
2.然後判斷電壓大小那邊我測試是不管是小於等於3750或其他
他都會讓馬達運轉  似乎沒有實現到if else的作用


以下是AI跟ARDUINO 請各位前輩幫忙看一下是否哪邊有寫錯

影片中的馬達聲是按下send後就馬上運轉
然後只會先顯示千位數
後續百位十位個位跑出來之後才開始算5秒


https://www.youtube.com/watch?v=XZs9MVZ0g_k

麻煩各位前輩幫忙看看是哪邊寫錯了
感恩
ar.png
ai2.png
發表於 2017-12-10 06:52:28 | 顯示全部樓層
本帖最後由 超新手 於 2017-12-10 06:59 編輯

錯很多。最基本的問題是.....
以你的做法
app 送過來的是字串,而 arduino 卻是以字元處理
兩邊根本不同步
舉例來說,
如果 app 送出 1234,事實上
Arduino會收到 4個值,
分別是49,50,51,52(ascii code)
你必須把這4個字元組合回去 1234
才能進行判斷
如果直接判斷,這些字元最大才 255
根本不可能大於 3750
更別說3750那個判斷式完全是錯的

 樓主| 發表於 2017-12-10 07:07:21 | 顯示全部樓層
超新手 發表於 2017-12-10 06:52
錯很多。最基本的問題是.....
以你的做法
app 送過來的是字串,而 arduino 卻是以字元處理

原來如此
謝謝大大的回覆
小弟對arduino這領域還是超新手
因為最近做專題才接觸到
 樓主| 發表於 2018-3-25 02:01:48 | 顯示全部樓層
本帖最後由 a26265788 於 2018-3-25 02:08 編輯
超新手 發表於 2017-12-10 06:52
錯很多。最基本的問題是.....
以你的做法
app 送過來的是字串,而 arduino 卻是以字元處理


不好意思大大我想再請教你一個問題
我目前想要透過ARDUINO 監控視窗傳數字給藍芽藍芽 傳送數字給AI2
當AI2的藍芽收到ARDUINO過來的資料時
讓LABEL背景顏色變色
例如收到1  LABEL的背景顏色變黑色
      收到2 LABEL的背景顏色變綠色
以此類推
(目前只有寫黑色測試)

但是我傳過去都沒有反應
不曉得是不是哪邊寫錯了
可以麻煩大大幫忙糾正一下  感謝您

以下是ARDUINO代碼
  1. #include <SoftwareSerial.h> //Arduino I2C library
  2. int i=0;
  3. const int TX   = 8;
  4. const int RX   = 7;

  5. SoftwareSerial BT(RX, TX);
  6. //set Bluetooth RX (-> pin TX of Bluetooth Module), TX (-> pin RX of Bluetooth Module)

  7. void setup() {
  8.   Serial.begin(9600); //set baud rate of Serial Monitor
  9.   BT.begin(9600); //set baud rate of Bluetooth
  10.   Serial.println("Start!!!");
  11. }

  12. void loop() {
  13.   if (Serial.available() > 0) {
  14.         i=Serial.read();
  15.     Serial.write(i);

  16.   if(BT.available() > 0) //check BT is succeed
  17.       Serial.println("succeed!");
  18.         BT.write(i); //send packet to phone
  19. }
  20. }
複製代碼



以下是AI2
691.png
發表於 2018-3-25 06:20:23 | 顯示全部樓層
AI2
你不能寫在 afterpick 那邊
那邊是用來選擇連線藍牙裝置用的
第一次連線時,都還沒連線成功
怎麼去判斷收到的值?
就算第二次以後,放在這也不對
沒事還要去按一下,才能更改 label 顏色

比較好的方式,就是放一個計時器timer
定時去判斷,如果藍牙連線成功,而且收到
1或 2,就去改變顏色
類似的程式寫法應該在隔壁樓就可以找到
 樓主| 發表於 2018-3-25 13:33:30 | 顯示全部樓層
超新手 發表於 2018-3-25 06:20
AI2
你不能寫在 afterpick 那邊
那邊是用來選擇連線藍牙裝置用的

謝謝大大的幫忙
目前可以透過監控視窗傳送數字到APP
來達到更改LABEL的背景顏色
但是在ARDUINO那邊
還有一個問題就是
要送出2次~3次的數字 APP那邊才會變色
要怎麼傳送一次就讓它變色呢?

這是目前的AI2
691.png

ARDUINO程式碼沒變
麻煩大大幫忙解答了  謝謝!!
發表於 2018-3-25 13:46:05 | 顯示全部樓層
你要先把”接收長度1位元之無號數”先存在一個變數中
然後再用這個變數去判斷它是1,2或3
而不是呼叫”接收長度1位元之無號數”三次
 樓主| 發表於 2018-3-25 14:04:02 | 顯示全部樓層
超新手 發表於 2018-3-25 13:46
你要先把”接收長度1位元之無號數”先存在一個變數中
然後再用這個變數去判斷它是1,2或3
而不是呼叫”接收 ...

不好意思 不是很懂您的意思
請問要怎麼將
”接收長度1位元之無號數”先存在一個變數中呢

目前是改這樣但好像不是您說的那個意思..
691.png
發表於 2018-3-25 14:04:13 | 顯示全部樓層
另外, 應該再增加判斷“取得接收數元組數” >0
才能再去判斷值
因為必須等到藍牙接收到序列監視所送的值
才能去藍牙讀資料,也才能進一步判斷值
 樓主| 發表於 2018-3-25 14:15:46 | 顯示全部樓層
本帖最後由 a26265788 於 2018-3-25 14:23 編輯
超新手 發表於 2018-3-25 14:04
另外, 應該再增加判斷“取得接收數元組數” >0
才能再去判斷值
因為必須等到藍牙接收到序列監視所送的值


好的已更正
691.png
但是ARDUINO那邊還是要輸入好幾次LABEL才會變色
我的操作如下
1 ENTER
1 ENTER
(LABEL變黑色)
2 ENTER
2 ENTER
2 ENTER
(LABEL變黃色)
3 ENTER
3 ENTER
3 ENTER
(LABEL變紅色)

附上監控視窗圖
699.png

我希望可以
1 ENTER
(LABEL變黑色)
2 ENTER
(LABEL變黃色)
3 ENTER
(LABEL變紅色)
...

另外ARDUINO最下面我有寫入
  1.   if(BT.available() > 0) //check BT is succeed
  2.       Serial.println("succeed!");
  3.         BT.write(i); //send packet to phone
複製代碼


但是好像監控視窗都沒有顯示succeed!
這樣是正確的嗎?
會不會是這個原因造成的呢
發表於 2018-3-25 14:31:33 | 顯示全部樓層
1)應該把橘色的設置和紫色的
”接收長度1位元之無號數”接在一起
然後用這個 global number 判斷 48,49,50
只能呼叫一次”接收長度1位元之無號數”
而且所有的判斷式都包在”藍牙的可用狀態
2)因為 bt.availabl() 是表示手機傳送過去的資料數
你從來沒送資料過去 arduino
所以永遠等於零
 樓主| 發表於 2018-3-25 14:49:12 | 顯示全部樓層
超新手 發表於 2018-3-25 14:31
1)應該把橘色的設置和紫色的
”接收長度1位元之無號數”接在一起
然後用這個 global number 判斷 48,49, ...

原來如此  已解答
非常感謝大大的幫忙
真的受益良多!!!  謝謝您
發表於 2018-3-25 18:00:20 | 顯示全部樓層
判斷順序不對
照常理來想這個問題即可,判斷順序應該是
1) 藍牙是否是可用狀態?
2) 藍牙是否收到資料?如果有,才去讀資料
3) 依讀到的資料來判斷是否要改顏色
 樓主| 發表於 2018-3-25 20:57:52 | 顯示全部樓層
本帖最後由 a26265788 於 2018-3-25 21:07 編輯
超新手 發表於 2018-3-25 18:00
判斷順序不對
照常理來想這個問題即可,判斷順序應該是
1) 藍牙是否是可用狀態?


了解了
下午把積木的寫法想像帶入arduino的語法中
才發現有很多順序的問題
後來依您的指點更改一下順序突然恍然大悟
感謝您~~

還有另一個構想中的專題想請教一下大大
指紋辨識有辦法經過第一次建檔每個人的編號後
之後每次經過指紋辨識讀出那個人的編號
並且讓他做獨立的功能嗎?
例如 A的編號是1  當指紋辨識成功讀出編號1  讓LED亮
       B的編號是2  當指紋辨識成功讀出編號2  讓蜂鳴器響

還是建檔的指紋庫只能應用在同一個功能
例如 A.B.C 有在指紋庫內  辨識成功後可以讓LED亮
發表於 2018-3-25 21:18:29 來自手機 | 顯示全部樓層
當然可以。只不過你找(買)的到類似的模組嗎?還要懂得應用它
 樓主| 發表於 2018-3-26 02:50:28 | 顯示全部樓層
超新手 發表於 2018-3-25 21:18
當然可以。只不過你找(買)的到類似的模組嗎?還要懂得應用它

好的
這是初步的構想
因為怕買了只能使用在單一功能..
有GOOGLE了一下
http://www.buyic.com.tw/product_info.php?products_id=6002
http://goods.ruten.com.tw/item/show?21310067716453
不曉得這種指紋辨識模組是不是能使用我說的功能
還是要找特定規格的呢
不好意思因為這對學生來說單價有點高想說再多確認一下
怕買錯就糟糕了
發表於 2022-3-13 00:10:54 | 顯示全部樓層

谢谢大大分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-3-28 18:29 , Processed in 0.233395 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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