Estoy intentando enviar un conjunto de bytes a mi arduino mega por puerto serie.
Por ejemplo:
Si envío byte 1 = 3 y byte 2 = 0 lo que equivaldría en binario a 00000000 00000011.
Mi arduino recibe byte 1 = 51 ( 3 en codigo ASCII) y byte 2 = 48 ( 0 en código ASCII).
Una vez que recibo esos dos bytes yo los quiero convertir a entero, es decir obtendría un 3. Pero al recibir el valor en código ASCII lo que me convierte a entero son los dos valores ASCII lo que estaría mal.
Buscando información encontré lo siguiente:
caracter2= Serial.read()- '0';
Pero si por ejemplo envío un 1200 en decimal, es decir byte 1 = 176, byte 2 = 4 no me funcionaría correctamente.
¿Alguien puede ayudarme? Llevo días buscando una solución y ya no sé si es que es imposible.
Por lo de ahora tengo un pequeño programa en c# con un botón. Cuando pulso el botón, envío el valor de la variable CodigoOperacion (que la voy variando yo a mano para ir probando que funciona con distintos valores) al arduino en dos bytes.
Por lo de ahora no tengo mucho más, es la primera vez que me lanzo a intentar comunicar el arduino con c#. En un futuro, me gustaría enviar más bytes con otros datos, por eso la idea de los bytes. Se que podría intentar enviar datos como cadenas de texto y separarlos por ";" pero creo que es más eficiente así.
public Form1()
{
InitializeComponent();
// Abrir puerto mientras se ejecute la aplicación.
if (!serialPort1.IsOpen)
{
try
{
serialPort1.Open();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
}
//Recibimos los datos que envía arduino al PC por el puerto serie.
private void Recepcion(object sender, SerialDataReceivedEventArgs e) {
int tamano = serialPort1.BytesToRead;
byte[] buffer = new byte[tamano];
serialPort1.Read(buffer,0, tamano);
}
//Enviamos datos desde el PC al arduino.
private void btnBytes_Click(object sender, EventArgs e)
{
int CodigoOperacion = 2;
char[] data = new char[] { Convert.ToChar(CodigoOperacion)};
byte[] mBuffer;
mBuffer = Encoding.Unicode.GetBytes(data);
serialPort1.Write(mBuffer, 0, mBuffer.Length);
}