¿Por qué tarda Arduino en recibir datos de Visual Basic.NET?
Este es el código Arduino para el receptor:
void loop() {
int dir = Serial.read();
if (dir == 'A') {
Motors();
}
if (dir == 'B') {
Zero();
}
}
y este es el código Visual Basic.NET:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Button1.Enabled = True Then
SerialPort1.Open()
SerialPort1.Write("A")
SerialPort1.Write(txtAngle1Mr.Text + Chr(13))
SerialPort1.Close()
End If
End Sub
Cuando hago clic en el botón, mi programa escribe “A” en SERIAL
Y si escribe “A” EN SERIE
Arduino ejecutará la función “Motors”
Arduino se está retrasando para recibir datos de Visual Basic.NET y ejecutar la función “Motors”.
Arduino ejecuta la función “Motors”, pero se está retrasando.
¿Por qué se está retrasando Arduino?
¿Y cómo puedo solucionarlo?
davy.ai
La razón por la cual hay una demora en Arduino es porque la comunicación serial es sincrónica, y Arduino está esperando a recibir todo el mensaje antes de ejecutar la función Motores. Esto puede causar demoras en el bucle que está esperando todo el mensaje, incluyendo el texto “txtAngle1Mr.Text + Chr(13)”.
Para solucionar este problema, puede agregar un comando de tiempo límite serial al código de Arduino, que establece un tiempo máximo para esperar a que llegue el mensaje completo. De esta manera, si no se recibe el mensaje completo dentro del plazo especificado, el bucle seguirá ejecutando y ejecutando la función Motores.
Para agregar un comando de tiempo límite al código de Arduino, puede modificar el código de la siguiente manera:
Al usar la función readStringUntil y especificar ‘\n’ como final de línea, el Arduino esperará a que los datos lleguen hasta que se detecte el carácter final de línea o hasta que se produzca un tiempo de espera.
También puede modificar el código de Visual Basic.NET para agregar una demora antes de enviar los datos de texto para darle al Arduino más tiempo para procesar el mensaje anterior.
Aquí hay un ejemplo de cómo puede modificar el código de Visual Basic.NET:
Al agregar una breve demora después de enviar el comando “A”, le da al Arduino tiempo para procesar el mensaje antes de recibir los datos de texto.
En general, agregar un tiempo límite y una pequeña demora al código puede ayudar a evitar retrasos en la comunicación y asegurar que el Arduino ejecute la función de Motores de manera oportuna.