Buenas a todos,
Estoy utilizando visual studio (windows form) y arduino uno para crear una pequeña aplicación que me mande lo que sea con un textbox desde visual studio a arduino, e intentar visualizarlo con el puerto serie de la IDE de arduino. Quiero también hacer el paso inverso, pero por ahora no me preocupa. Mi preocupación es que cuando pulso el botón de mandar algo a arduino por puerto serie ( una vez ya que he escrito algo en el text box), cuando quiero visualizar en la IDE de arduino lo que me ha mandado, si por ejemplo envío un 4, pues en arduino veo,
4
4
y a partir de aquí solo espacios en blanco que se van añadiendo sin parar.
También es cierto que a veces no me sale nada, y otras me sale, por ejemplo, un 4 en vez de dos.
Mi pregunta es... ¿por qué me está pasando esto? Yo lo único que quiero es guardar en una variable como string lo que mando y se acabo, pero no sé porque si he enviado un 4, me empiezan a salir valores en blanco en vez de todo el rato 4 4 4 4 4 4 4 .... etc
Encima, he probado a testear si entra dentro de SerialEvent y es muy raro, porque como os he comentado, sí que me visualiza lo que mando pero tengo una varialbe flag dentro de SerialEvent que no me cambia el valor cada vez que entra...
¿Alguien podría explicarme que estoy haciendo mal?
Os escribo el código que tengo tanto en vs como en arduino y adjunto fotos de mi problema,
Código vs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace Puerto_serie
{
public partial class Form1 : Form
{
private string strBufferIn;
private string strBufferOut;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
strBufferIn = "";
strBufferOut = "";
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 9600;
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Open(); //Los acabo de poner un poco a mi antojo porque creo que de la otra forma no me funcionará
serialPort1.DiscardOutBuffer(); //Limpiamos el contenido del buffer
strBufferOut = textBox1.Text;
serialPort1.Write(strBufferOut);
serialPort1.Close();
}
}
}
Código arduino:
int flag=0;
String Palabra="";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.setTimeout(555);
}
void loop() {
Serial.println(Palabra);
}
void serialEvent() {
if (Serial.available() > 0) {
//String recibido
Palabra=Serial.readString();
flag=1;
}
}
Adjunto fotos de mi problema y aplicación.
Un saludo y gracias
Estoy utilizando visual studio (windows form) y arduino uno para crear una pequeña aplicación que me mande lo que sea con un textbox desde visual studio a arduino, e intentar visualizarlo con el puerto serie de la IDE de arduino. Quiero también hacer el paso inverso, pero por ahora no me preocupa. Mi preocupación es que cuando pulso el botón de mandar algo a arduino por puerto serie ( una vez ya que he escrito algo en el text box), cuando quiero visualizar en la IDE de arduino lo que me ha mandado, si por ejemplo envío un 4, pues en arduino veo,
4
4
y a partir de aquí solo espacios en blanco que se van añadiendo sin parar.
También es cierto que a veces no me sale nada, y otras me sale, por ejemplo, un 4 en vez de dos.
Mi pregunta es... ¿por qué me está pasando esto? Yo lo único que quiero es guardar en una variable como string lo que mando y se acabo, pero no sé porque si he enviado un 4, me empiezan a salir valores en blanco en vez de todo el rato 4 4 4 4 4 4 4 .... etc
Encima, he probado a testear si entra dentro de SerialEvent y es muy raro, porque como os he comentado, sí que me visualiza lo que mando pero tengo una varialbe flag dentro de SerialEvent que no me cambia el valor cada vez que entra...
¿Alguien podría explicarme que estoy haciendo mal?
Os escribo el código que tengo tanto en vs como en arduino y adjunto fotos de mi problema,
Código vs :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace Puerto_serie
{
public partial class Form1 : Form
{
private string strBufferIn;
private string strBufferOut;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
strBufferIn = "";
strBufferOut = "";
serialPort1.PortName = "COM5";
serialPort1.BaudRate = 9600;
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.Open(); //Los acabo de poner un poco a mi antojo porque creo que de la otra forma no me funcionará
serialPort1.DiscardOutBuffer(); //Limpiamos el contenido del buffer
strBufferOut = textBox1.Text;
serialPort1.Write(strBufferOut);
serialPort1.Close();
}
}
}
Código arduino:
int flag=0;
String Palabra="";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.setTimeout(555);
}
void loop() {
Serial.println(Palabra);
}
void serialEvent() {
if (Serial.available() > 0) {
//String recibido
Palabra=Serial.readString();
flag=1;
}
}
Adjunto fotos de mi problema y aplicación.
Un saludo y gracias