¿Por qué no puedo enviar datos desde una PC a un Arduino?

0

Desarrollé una aplicación que envía datos a un Arduino a través del puerto serie, pero no puedo entender cómo recibir los datos en el Arduino. Envío una cadena por el puerto serial al Arduino y el Arduino recibe algo, pero mi código no funciona. En el Arduino los datos se reciben byte a byte.

El código C # que envía los datos:

using System;
using System.Windows.Forms;
//
using System.Threading;
using System.IO;
using System.IO.Ports;

pulic class senddata(){

    private void Form1_Load(object sender, System.EventArgs e)
    {
    //Define a Porta Serial
        serialPort1.PortName = textBox2.Text;
        serialPort1.BaudRate = 9600;
        serialPort1.Open();
    }
private void button1_Click(object sender, System.EventArgs e)
{
    serialPort1.Write("1");  //This is a string         
}

} 

El Código Arduino:

#include <Servo.h>

Servo servo;
String incomingString;
int pos;

void setup()
{
    servo.attach(9);
    Serial.begin(9600);
    incomingString = "";
}

void loop()
{
   if(Serial.available())
   {
   // Read a byte from the serial buffer.
   char incomingByte = (char)Serial.read();
   incomingString += incomingByte;

     // Checks for null termination of the string.
     if (incomingByte == '
using System;
using System.Windows.Forms;
//
using System.Threading;
using System.IO;
using System.IO.Ports;

pulic class senddata(){

    private void Form1_Load(object sender, System.EventArgs e)
    {
    //Define a Porta Serial
        serialPort1.PortName = textBox2.Text;
        serialPort1.BaudRate = 9600;
        serialPort1.Open();
    }
private void button1_Click(object sender, System.EventArgs e)
{
    serialPort1.Write("1");  //This is a string         
}

} 
') { if(incomingString == "1"){ servo.write(90); } incomingString = ""; } } }
    
pregunta FredVaz

1 respuesta

1

No estás terminando tu cadena correctamente.

El código de Arduino está buscando 0x31 0x00.

La PC está enviando solo 0x31.

Debe enviar el 1 y un carácter de terminación (por ejemplo, un retorno de carro) y buscarlo en el Arduino. Eso sería, por ejemplo, enviar 0x31 0x0d, y Arduino buscaría 0x0d como el carácter de terminación.

O podría decirle a la PC que transmita un 1 seguido de un carácter nulo 0x00. No sé C #, pero si sigue los procedimientos de escape estándar, es posible que pueda enviar algo como "1 \ 000".

    
respondido por el Majenko

Lea otras preguntas en las etiquetas