2014-10-07 6 views
0

나는 Arduino Uno R3과 Bluetooth Mate를 가지고 있습니다. 메이트를 Arduino 하드웨어 직렬 (핀 0,1)에 연결할 때 연결된 장치에서 여러 문자를 한 번에 보낼 수 있지만 소프트웨어 직렬 (예 : 4,2 핀 사용)으로 동일한 것을 만들려고 할 때만 첫 번째 문자를 가져오고 나머지 문자는 엉망이됩니다.소프트웨어 시리얼을 사용하여 한 번에 여러 개의 문자 수신

내 코드 :

예를 들어
#include <SoftwareSerial.h>   

int bluetoothTx = 4;   
int bluetoothRx = 2;   

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); 

void setup() 
{ 
 Serial.begin(115200);   
 bluetooth.begin(115200);   
} 

void loop() 
{ 
 if(bluetooth.available()) 
 { 
   Serial.print((char)bluetooth.read());   
 } 
} 

나는이 문자 보내는 경우 : 내 안드로이드 장치에서 ABCD을 나는 시리얼 모니터에이 얻을 : ±,

이 코드 ö 그 Hardware Serial (블루투스를 0 번과 1 번 핀에 연결)을 사용하면 문제가 없습니다.

void setup() 
{ 
 Serial.begin(115200);   
} 

void loop() 
{ 
 if(Serial.available()) 
 { 
   Serial.print((char)Serial.read());   
 } 
} 

나는 심지어 전송 속도를 변경하려고 시도했지만 도움이되지 않았다.

만약 문자 하나 하나를 보내면 잘 동작하지만 문자열로 보낼 수 있기를 바란다.

+0

먼저 SoftwareSerial의 보오율을 최대한 낮게 조정 해보십시오. 문제가 해결되면 비트 밴잉 (bit-banging)의 한계에 부딪치게됩니다. – user373884

+0

여기에 나와있는 가이드가 내 이론을 뒷받침하는 것처럼 보입니다. https://learn.sparkfun.com/tutorials/using-the-bluesmirf/example-code-using-command-mode – user373884

+0

고려해야 할 또 다른 사항. 이 보드는 16MHz에서 작동하여 62.5ns의 사이클 시간을 제공합니다. 115200bps에서 단일 비트의 너비는 8.6uS (약 140 사이클)입니다. RX의 경우 비트 당 8 번 샘플링하여 올바르게 프레임을 만들어야한다고 가정합니다. 동시에 TX의 출력 상태 변경을 처리해야합니다. 애플리케이션 코드를 실행하는 동안 모두. 프레임이 약간 왜곡되면 놀랍지 않습니다. – user373884

답변

1

으로는 지적했다. 나는 그것을 작동시키기 위해서 9600만큼 낮게 보레이 레이트를 가져야 만했다.

#include "SoftwareSerial.h"; 
int bluetoothTx = 4; 
int bluetoothRx = 2; 

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); 

void setup() 
{ 
    Serial.begin(9600); 
    delay(500); 
    bluetooth.begin(115200); 
    delay(500); 
    bluetooth.print("$$$"); 
    delay(500); 
    bluetooth.println("U,9600,N"); 
    delay(500); 
    bluetooth.begin(9600); 
} 

void loop() 
{ 
    if(bluetooth.available()) { 
    char toSend = (char)bluetooth.read(); 
    Serial.print(toSend); 
    } 

    if(Serial.available()) { 
    char toSend = (char)Serial.read(); 
    bluetooth.print(toSend); 
    } 
} 

을 확실 명령이 작동하지 않습니다, 그렇지 않으면 실행하기 위해 몇 가지 큰 지연을 넣어했다 전송 속도를 변경하는 경우 :

일했다 코드입니다.