Robofun 機器人論壇

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

請教 如何在UNO上讀取與接收兩個HC-05

[複製鏈接]
跳轉到指定樓層
1#
發表於 2017-9-8 16:13:29 | 顯示全部樓層 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 liu5123 於 2017-9-8 16:22 編輯

如何在UNO板上可以同時接收與讀取兩塊HC-05的資料
當我把兩個HC-05接在UNO版子上  只有一塊HC-05能讀取和接收
也不知道程式該怎麼改 程式我也有改過但就是跑不動
請各位專家幫我看一下


#include <SoftwareSerial.h>   // 引用程式庫

// 定義連接藍牙模組的序列埠
SoftwareSerial BT(8, 9); // 接收腳, 傳送腳(第一組)
SoftwareSerial BT(6, 7); // 接收腳, 傳送腳(第二組)
char val;  // 儲存接收資料的變數

void setup() {
  Serial.begin(9600);   // 與電腦序列埠連線
  Serial.println("BT is ready!");

  // 藍牙透傳模式的預設連線速率。
  BT.begin(9600);
}

void loop() {
  // 若收到「序列埠監控視窗」的資料,則送到藍牙模組
  if (Serial.available()) {
    val = Serial.read();
    BT.print(val);
  }

  // 若收到藍牙模組的資料,則送到「序列埠監控視窗」
  if (BT.available()) {
    val = BT.read();
    Serial.print(val);
  }
}
2#
 樓主| 發表於 2017-9-8 16:51:42 | 顯示全部樓層
本帖最後由 liu5123 於 2017-9-8 16:56 編輯

這是我修改過的程式
但儲存變數 共用一個OK嗎??
而且下面都改過了


#include <SoftwareSerial.h>   // 引用程式庫

// 定義連接藍牙模組的序列埠
SoftwareSerial BT1(8, 9); // 接收腳, 傳送腳(第一組)   修改過
SoftwareSerial BT2(6, 7); // 接收腳, 傳送腳(第二組)   修改過
char val;  // 儲存接收資料的變數

void setup() {
  Serial.begin(9600);   // 與電腦序列埠連線
  Serial.println("BT is ready!");

  // 藍牙透傳模式的預設連線速率。
  BT1.begin(9600);   修改
  BT2.begin(9600);   新增
}

void loop() {
  // 若收到「序列埠監控視窗」的資料,則送到藍牙模組
  if (Serial.available()) {
    val = Serial.read();
    BT1.print(val);  修改
    BT2.print(val);  新增
  }

  // 若收到藍牙模組的資料,則送到「序列埠監控視窗」
  if (BT.available()) {
    val = BT1.read();  修改過
    Serial.print(val);  
    val = BT2.read();  新增
    Serial.print(val);    新增
  }
}
3#
 樓主| 發表於 2017-9-8 20:04:01 | 顯示全部樓層
本帖最後由 liu5123 於 2017-9-8 20:29 編輯


這是原文  翻譯過來
她寫的意思是一個一個去讀取嗎??  那都會顯示出來嗎??
而且我不想只限USB端口   想要的是在UNO運行就能讀取



#include <SoftwareSerial.h>
//
SoftwareSerial portOne(10, 11);
SoftwareSerial portTwo(8, 9);

void setup() {
//打開串行通信並等待端口打開
  Serial.begin(9600);
  while (!Serial) {
    ; //等待串口連接。僅需要本機USB端口
  }


  // 開始每個軟件串口
  portOne.begin(9600);
  portTwo.begin(9600);
}

void loop() {
  // 默認情況下,最後一個初始化端口正在偵聽。
  // 當你想在一個端口上偵聽時,明確地選擇它:
  portOne.listen();
  Serial.println("Data from port one:");
  // 當有數據進來時,讀取
  // 並發送到硬件串行端口:
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

  // 空行從兩個端口分離數據:
  Serial.println();

  // 現在在第二個端口上
  portTwo.listen();
  // 當有數據進來時,讀取
  // 並發送到硬件串行端口:
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

  //空行從兩個端口分離數據:
  Serial.println();
}


4#
 樓主| 發表於 2017-9-9 20:01:31 | 顯示全部樓層
本帖最後由 liu5123 於 2017-9-9 20:31 編輯

用官方的範例是成功了  可是我用手機傳送資料給HC-05 有顯示出來了

5#
 樓主| 發表於 2017-9-15 05:32:45 | 顯示全部樓層
本帖最後由 liu5123 於 2017-9-15 06:56 編輯

依照你的建議 去買了一塊MEGA2560 請問要怎麼去修改現有的程式碼  而且不懂要怎麼用他4個PORT 可以跟我說一下嗎= =  

附上之前的程式碼
#include <SoftwareSerial.h>

// 定義連接藍牙模組的序列埠
SoftwareSerial BT(8, 9); // 接收腳, 傳送腳(第一組)
SoftwareSerial BT2(6, 7); // 接收腳, 傳送腳(第二組)
char val; // 儲存接收資料的變數

void setup() {
Serial.begin(9600); // 與電腦序列埠連線

// 藍牙透傳模式的預設連線速率。
BT.begin(9600); // 非主控HC05
BT2.begin(9600); //主控HC05

Serial.println("BT & BT2 is ready!");
}

void loop() {

if (Serial.available()) {
val = Serial.read();
BT.print(val);
}

//非主控 HC 05 收一個資料 主控 HC 05 傳一個資料
while(BT.available())
{
val=BT.read();
BT2.write(byte(val));
delay(200);
}

}
6#
 樓主| 發表於 2017-9-15 09:22:54 | 顯示全部樓層
可以用了  發現改用MEGA 2560顯示訊息變得比較簡單了
但是依然無法分行..  就算是分行也沒辦法整組顯示  項訊息HELLO WORLD 只要分行就變成一行一個字..
7#
 樓主| 發表於 2017-9-15 15:10:09 | 顯示全部樓層
我傳送訊息 第一次是 hello world  第二次也是hello world 第三次則是傳送123
但三個訊息黏在一起  像這樣(hello worldhello world123)  
但當我在傳送訊息的後面還是前面加了一行 BT.print("\r\n")
再次傳送訊息卻變成這樣
H
E
L
L
O

W
O
R
L
D
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-12 13:39 , Processed in 0.209333 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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