visual txt studio serie serial recibidos puerto mandar leer guardar exportar enviar entre datos comunicacion c# bluetooth serial-port arduino serial-communication

txt - Aplicación de consola C#hablando con Arduino a través de Bluetooth



leer datos de arduino en visual studio 2015 (2)

No hay mucho que decir aquí aparte de que esto no funciona, y no tengo idea de por qué.

La salida serial en el Arduino no es nada. La salida en el código C # se reduce a esperar una respuesta y luego nada.

El LED de la tarjeta Bluetooth en el Arduino se pone verde cuando inicio el programa C # por lo que se está realizando una conexión. Nada más.

Código Arduino

#include <SoftwareSerial.h> //Software Serial Port #define RxD 8 // This is the pin that the Bluetooth (BT_TX) will transmit to the Arduino (RxD) #define TxD 7 // This is the pin that the Bluetooth (BT_RX) will receive from the Arduino (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 Arduino to receive INPUT from the bluetooth shield on Digital Pin 6 pinMode(TxD, OUTPUT); // Setup the Arduino 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()); } }

Código Core C #

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())); } } }


Bien, entonces hubo algunos problemas que son difíciles de ver desde arriba, así que intentaré explicarlos.

Primero, RX y TX en la tarjeta bluetooth NO se ponen a sus iguales en el arduino. Ellos van a sus opuestos.

Ejemplo:

Bluetooth Card RX -> TX en Arduino

Tarjeta Bluetooth TX -> RX en Arduino

Entonces, si miras la foto del Arduino arriba, debería ser dolorosamente obvio que los pines 7 y 8 son la ubicación incorrecta.

El siguiente problema que tuve fue una mala conectividad.

La potencia y el suelo parecen estar bien en la configuración anterior. Sin embargo, las conexiones RX y TX deben estar soldadas. De lo contrario, obtendrá una conexión deficiente.

Una vez que hice estos cambios, el código anterior funcionó a la perfección.

Espero que esto ayude a alguien más a tener estos problemas !!


Aquí hay un código similar simplificado para probar la comunicación entre PC <-> Arduino BT. En el siguiente código, la PC envía texto al Arduino, que luego lo envía de vuelta a la PC. PC escribe el texto entrante en la consola.

Configure su puerto serie BT (COM5 en el ejemplo) desde Windows .

Probado con Arduino Uno, un dongle USB-Bluetooth y el módulo bluetooth HC-05 . El voltaje PIN1 (TX) de Arduino se dividió de 5V a 2.5V antes de alimentarlo al pin RX del módulo).

Eso es. ¡Fácil!

Arduino:

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

DO#:

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); } } }