Консольное приложение С#, разговаривающее с Arduino через Bluetooth

Не так много сказать, кроме этого, это не работает, и я понятия не имею, почему.

Серийный выход на ******* - ничто. Вывод кода С# переходит к ожиданию ответа, а затем ничего.

Светодиод карты Bluetooth на ******* загорается зеленым цветом, когда я запускаю программу С#, поэтому происходит соединение. Просто ничего.

Код *******

#include <softwareserial.h> //Software Serial Port
#define RxD 8 // This is the pin that the Bluetooth (BT_TX) will transmit to the ******* (RxD)
#define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the ******* (TxD)
SoftwareSerial blueToothSerial(RxD,TxD);
boolean light = false;
void setup(){
 Serial.begin(9600); // Allow Serial communication via USB cable to computer (if required)
 pinMode(RxD, INPUT); // Setup the ******* to receive INPUT from the bluetooth shield on Digital Pin 6
 pinMode(TxD, OUTPUT); // Setup the ******* to send data (OUTPUT) to the bluetooth shield on Digital Pin 7
 pinMode(13,OUTPUT); // Use onboard LED if required.
}
void loop(){
 delay(1000);
 if(light){
 light = false;
 digitalWrite(13,LOW);
 }
 else{
 light = true;
 digitalWrite(13,HIGH);
 }
 //Serial.println(blueToothSerial.available());
 blueToothSerial.write("Im alive");
 if(blueToothSerial.read()>0){
 Serial.write(blueToothSerial.read());
 }
}
</softwareserial.h>

Код ядра С#

static void Main(string[] args)
 {
 byte[] Command = Encoding.ASCII.GetBytes("It works");//{0x00,0x01,0x88};
 SerialPort BlueToothConnection = new SerialPort();
 BlueToothConnection.BaudRate = (9600);
 BlueToothConnection.PortName = "COM4";
 BlueToothConnection.Open();
 if (BlueToothConnection.IsOpen)
 {
 BlueToothConnection.ErrorReceived += new SerialErrorReceivedEventHandler(BlueToothConnection_ErrorReceived);
 // Declare a 2 bytes vector to store the message length header
 Byte[] MessageLength = { 0x00, 0x00 };
 //set the LSB to the length of the message
 MessageLength[0] = (byte)Command.Length;
 //send the 2 bytes header
 BlueToothConnection.Write(MessageLength, 0, MessageLength.Length);
 // send the message itself
 System.Threading.Thread.Sleep(2000);
 BlueToothConnection.Write(Command, 0, Command.Length);
 Messages(5, ""); //This is the last thing that prints before it just waits for response.
 int length = BlueToothConnection.ReadByte();
 Messages(6, "");
 // retrieve the reply data
 for (int i = 0; i < length; i++)
 {
 Messages(7, (BlueToothConnection.ReadByte().ToString()));
 }
 }
 }
2 ответа

Хорошо, поэтому было несколько проблем, которые трудно увидеть сверху, поэтому я попытаюсь объяснить.

Во-первых, RX и TX на карте Bluetooth не идут на их равные на *******. Они идут к их противоположностям.

Пример:

Bluetooth-карта RX → TX на *******

Bluetooth-карта TX → RX на *******

Итак, если вы посмотрите на фотографию ******* выше, должно быть очень очевидно, что контакты 7 и 8 являются неправильным размещением.

Следующий вопрос, который у меня был, - плохая связь.

В приведенной выше конфигурации мощность и земля кажутся прекрасными. Однако необходимо подключить соединения RX и TX. В противном случае вы получите плохое соединение.

Как только я это сделал, вышеуказанный код работал безупречно.

Надеюсь, что это поможет кому-то еще иметь эти проблемы!


Здесь аналогичный код упрощен для тестирования связи ПК с ПК - ******* BT. В приведенном ниже коде ПК отправляет текст в *******, который затем перекликается с ним на ПК. ПК записывает входящий текст в консоль.

Установите свой последовательный порт BT (COM5 в примере) из Windows.

Протестировано с ******* Uno, USB-Bluetooth dongle и bluetooth-модуль HC-05. Напряжение ******* PIN1 (TX) было разделено от 5 В до 2,5 В перед подачей его на вывод RX модуля).

Что это. Легко!

*******:

void setup() {
 Serial.begin(9600); 
 delay(50);
}
void loop() {
 if (Serial.available())
 Serial.write(Serial.read()); // echo everything
}

С#:

using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
public class SerialTest
{
 public static void Main()
 {
 SerialPort serialPort = new SerialPort();
 serialPort.BaudRate = 9600;
 serialPort.PortName = "COM5"; // Set in Windows
 serialPort.Open();
 int counter = 0;
 while (serialPort.IsOpen)
 {
 // WRITE THE INCOMING BUFFER TO CONSOLE
 while (serialPort.BytesToRead > 0)
 {
 Console.Write(Convert.ToChar(serialPort.ReadChar()));
 }
 // SEND
 serialPort.WriteLine("PC counter: " + (counter++));
 Thread.Sleep(500);
 }
 }
}

licensed under cc by-sa 3.0 with attribution.