Hola!!!
Soy nuevo en foro, tengo algunas dudas sobre como trabajar en el puerto serial, gracias a ustedes puedo comprender un poco sobre esto.
mi problematica es la siguiente: Recibo datos a la Pc por el puerto serial (esto ya no es problema) , se guardan en un string (tampoco es problema), este string lo meto en un text file y termine.
esta es la rutina que debe seguir mi programa, pero el problema es que cuando supuestamente debe guardar la segunda cadena en el text file el programa se cierra y ya no hace nada, les pongo el codigo con el qu estoy trabajando. les agradeceria q me ayudaran con este problema. (disculpen el desorden de la escrtura)
public Form1()
{
InitializeComponent();
}
int bandera = 1; // igual y esto no es necesario, pero lo puse para indagar en mi problema de que se cierra el programa
StreamWriter ARCHI = new StreamWriter(@"c:\\archivos1\\paso.txt", true); // abre archivo
private void Form1_Load(object sender, EventArgs e) // se abre el puerto automaticamente cuando ejecuto el programa
{
if (bandera == 1)
{
serialPort1.Open();
}
recibido.Clear(); // limpia el puerto
}
string numeros; // guardo los datos recibidos aqui
List<byte> recibido = new List<byte>();
private void button1_Click(object sender, EventArgs e) // estas lineas son las que usa para el que envio del dato necesario para poder comenzar a recibir datos
{
byte[] miBuffer = new byte[1];
miBuffer[0] = 0xDA; // Letra "simbolo raro" del ASCII.
this.serialPort1.Write(miBuffer, 0, miBuffer.Length);
//Abrir puerto COM1
}
DateTime x = DateTime.Now; // necesito colocar la hora despues de imprimirlo en el text file
string hora; // el string para la hora
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
////Datos en el buffer
int bytes = serialPort1.BytesToRead;
if (bytes<16) // recibo 16 datos, si recibo menos no hace nada
{
return;
}
byte[] buffer = new byte[bytes];
serialPort1.Read(buffer, 0, bytes);
foreach (byte elem in buffer) // guardo los datos recibidos
{
recibido.Add(elem);
}
for (int i = 0; i < bytes; i=i+2) // con este for lo que hago es darle un orden a los datos recibidos y se meten dentro de la variable numeros
{
int aux = 0;
string auxs;
aux = recibido * 256 + recibido[i + 1];
auxs = aux.ToString();
numeros = numeros + "" + auxs + ";";
}
hora = "" + x; // guardo la hora en este string
ARCHI.WriteLine(numeros + " " + hora); // escribe en el archivo de texto los datos recibidos y la hora
numeros = ""; // limpia el string
hora = ""; // limpia el string
recibido.Clear(); // limpia el bufer
ARCHI.Close(); // cierra archivo... aqui es donde tengo dudas dado que al comienzo de estas llaves (mayor gerarquia de recepcion de datos) habia colocado la linea para abrir el ARCHI y cerrarlo a qui al final para poder seguir escribiendo en el, pero no importando como le haga, solo lo hace una vez y el ejecutable se cierra. si me hicieran el favor de revisar estas lineas y decirme donde esta mi error.
}