a26265788 發表於 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&feature=youtu.be
https://www.youtube.com/watch?v=XZs9MVZ0g_k

麻煩各位前輩幫忙看看是哪邊寫錯了
感恩

超新手 發表於 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那個判斷式完全是錯的

a26265788 發表於 2017-12-10 07:07:21

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


原來如此
謝謝大大的回覆
小弟對arduino這領域還是超新手:Q
因為最近做專題才接觸到

a26265788 發表於 2018-3-25 02:01:48

本帖最後由 a26265788 於 2018-3-25 02:08 編輯

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


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

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

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

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

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

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

if(BT.available() > 0) //check BT is succeed
      Serial.println("succeed!");
      BT.write(i); //send packet to phone
}
}



以下是AI2

超新手 發表於 2018-3-25 06:20:23

AI2
你不能寫在 afterpick 那邊
那邊是用來選擇連線藍牙裝置用的
第一次連線時,都還沒連線成功
怎麼去判斷收到的值?
就算第二次以後,放在這也不對
沒事還要去按一下,才能更改 label 顏色

比較好的方式,就是放一個計時器timer
定時去判斷,如果藍牙連線成功,而且收到
1或 2,就去改變顏色
類似的程式寫法應該在隔壁樓就可以找到

a26265788 發表於 2018-3-25 13:33:30

超新手 發表於 2018-3-25 06:20
AI2
你不能寫在 afterpick 那邊
那邊是用來選擇連線藍牙裝置用的


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

這是目前的AI2


ARDUINO程式碼沒變
麻煩大大幫忙解答了謝謝!!

超新手 發表於 2018-3-25 13:46:05

你要先把”接收長度1位元之無號數”先存在一個變數中
然後再用這個變數去判斷它是1,2或3
而不是呼叫”接收長度1位元之無號數”三次

a26265788 發表於 2018-3-25 14:04:02

超新手 發表於 2018-3-25 13:46
你要先把”接收長度1位元之無號數”先存在一個變數中
然後再用這個變數去判斷它是1,2或3
而不是呼叫”接收 ...

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

目前是改這樣但好像不是您說的那個意思..

超新手 發表於 2018-3-25 14:04:13

另外, 應該再增加判斷“取得接收數元組數” >0
才能再去判斷值
因為必須等到藍牙接收到序列監視所送的值
才能去藍牙讀資料,也才能進一步判斷值

a26265788 發表於 2018-3-25 14:15:46

本帖最後由 a26265788 於 2018-3-25 14:23 編輯

超新手 發表於 2018-3-25 14:04
另外, 應該再增加判斷“取得接收數元組數” >0
才能再去判斷值
因為必須等到藍牙接收到序列監視所送的值


好的已更正

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

附上監控視窗圖


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

另外ARDUINO最下面我有寫入
if(BT.available() > 0) //check BT is succeed
      Serial.println("succeed!");
      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
所以永遠等於零

a26265788 發表於 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) 依讀到的資料來判斷是否要改顏色

a26265788 發表於 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

當然可以。只不過你找(買)的到類似的模組嗎?還要懂得應用它

a26265788 發表於 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
不曉得這種指紋辨識模組是不是能使用我說的功能
還是要找特定規格的呢
不好意思因為這對學生來說單價有點高想說再多確認一下
怕買錯就糟糕了:Q

cc1357 發表於 2022-3-13 00:10:54


谢谢大大分享
頁: [1]
查看完整版本: 藍芽接收資料控制自走車的問題