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