2016-09-27 1 views
1

Я пытаюсь выполнить простой эксперимент с модулем Arduino Uno и BlueSmirf Bluetooth от Sparkfun (documentation).Получение только последовательных данных в степени 2 при отправке алфавитов

Моя установка оборудования выглядит следующим образом:

Arduino(power through USB)->BlueSmirf  ---(bluetooth)--> PC(no wired connection the the Arduino)->RealTerm 

На Arduino, следующий эскиз работает:

#include <SoftwareSerial.h> 

int txPin = 2; 
int rxPin = 3; 

SoftwareSerial bluetooth(txPin, rxPin); 

void setup() { 
    bluetooth.begin(115200); 
    delay(100); 
} 

void loop() { 
    String textToSend = "abcdefghijklmnopqrstuvw123456789"; 
    bluetooth.print(textToSend); 
    delay(5000); 
} 

Теперь, Bluetooth подключается к ПК просто отлично, но когда я инспектировать COM-порт в RealTerm, я получаю только следующие данные:

abdhp1248 

Где остановились g буквы и цифры идут? Кажется, что все буквы, следующие за степенью двух (т. Е. A = 1, b = 2, d = 4, h = 8, p = 16), но все остальное. Это просто совпадение?

+1

Попробуйте уменьшить скорость передачи до примерно 9600, вы можете перегрузить буфер где-нибудь. то есть. bluetooth.begin (9600); – TomKeddie

+0

@TomKeddie, вы могли быть правы. Я попытался запустить его на 9600, но теперь с текущей тестовой строкой. Я сделаю это и сделаю то, что получаю. –

ответ

1

Я думаю, что вы используете последовательный порт слишком быстро. Согласно комментариям в примере BlueSmirf от sparkfun на https://learn.sparkfun.com/tutorials/using-the-bluesmirf - «115200 может быть слишком быстрым, чтобы NewSoftSerial мог надежно передавать данные».

Уменьшите скорость передачи до 9600, используя приведенный ниже пример кода, измененный с указанной веб-страницы.

/* 
    Example Bluetooth Serial Passthrough Sketch 
by: Jim Lindblom 
SparkFun Electronics 
date: February 26, 2013 
license: Public domain 

This example sketch converts an RN-42 bluetooth module to 
communicate at 9600 bps (from 115200), and passes any serial 
data between Serial Monitor and bluetooth module. 
*/ 
#include <SoftwareSerial.h> 

int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2 
int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3 

SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); 

void setup() 
{ 

    bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps 
    bluetooth.print("$"); // Print three times individually 
    bluetooth.print("$"); 
    bluetooth.print("$"); // Enter command mode 
    delay(100); // Short delay, wait for the Mate to send back CMD 
    bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity 
    // 115200 can be too fast at times for NewSoftSerial to relay the data reliably 
    bluetooth.begin(9600); // Start bluetooth serial at 9600 
} 

void loop() 
{ 
    String textToSend = "abcdefghijklmnopqrstuvw123456789"; 
    bluetooth.print(textToSend); 
    delay(5000); 
} 
+0

Привет, Том! Я дал этот эскиз еще один ролл и попытался изменить несколько вещей во время его отладки. Оказывается, точкой отказа для этого эскиза является «bluetooth.begin (9600)» - во второй раз Software.Serial установлен - это все ломает. Мне удается общаться с модемом на боде 115200 (получив странное поведение выше), но когда я переключаюсь на бод 9600, связь между ардуином и модемом абсолютно мертва. Есть идеи? –

+1

Извините, Tormod, у вас нет идей для вас - кроме, может быть, для вызова bluetooth.end() перед вызовом begin() второй раз? – TomKeddie

+0

Это на самом деле довольно хорошая идея. Я дам ему попробовать. Благодарю. :-) –

Смежные вопросы