Witam wszystkich!
piszę z prośbą o pomoc w moim programie. Aktualnie robię projekt, który składa się z urządzenia pomiarowego (opartego na ATMEGA32A, 2-ch akcelerometrach i modułu bluetooth) który bezprzewodowo komunikuje się z komputerem poprzez technologie bluetooth. Komputer "widzi" urządzenie jako port RS232, który symuluje. Napisałem program, który znajduje się poniżej.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace projekt
{
public partial class Form1 : Form
{
string RxString;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
if (serialPort1.IsOpen)
{
button1.Enabled = false;
button2.Enabled = true;
textBox1.ReadOnly = false;
textBox2.ReadOnly = false;
textBox3.ReadOnly = false;
textBox4.ReadOnly = false;
textBox5.ReadOnly = false;
textBox6.ReadOnly = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
button1.Enabled = true;
button2.Enabled = false;
textBox1.ReadOnly = true;
textBox2.ReadOnly = true;
textBox3.ReadOnly = true;
textBox4.ReadOnly = true;
textBox5.ReadOnly = true;
textBox6.ReadOnly = true;
}
}
private void DisplayText(object sender, EventArgs e)
{
if (RxString.Contains("x1: "))
{
textBox1.AppendText(RxString);
textBox1.AppendText("\r\n");
}
else if (RxString.Contains("y1: "))
{
textBox2.AppendText(RxString);
textBox2.AppendText("\r\n");
}
else if (RxString.Contains("z1: "))
{
textBox3.AppendText(RxString);
textBox3.AppendText("\r\n");
}
else if (RxString.Contains("x2: "))
{
textBox4.AppendText(RxString);
textBox4.AppendText("\r\n");
}
else if (RxString.Contains("y2: "))
{
textBox5.AppendText(RxString);
textBox5.AppendText("\r\n");
}
else if (RxString.Contains("z2: "))
{
textBox6.AppendText(RxString);
textBox6.AppendText("\r\n");
}
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadLine();
this.Invoke(new EventHandler(DisplayText));
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void save_Click(object sender, EventArgs e)
{
string plik = @"C:/CSharpTestWriteToFile.txt";
StreamWriter sw;
try
{
sw = new StreamWriter(plik);
}
catch(IOException)
{
return;
}
try
{
sw.WriteLine(textBox1.Text);
sw.WriteLine(textBox2.Text);
sw.WriteLine(textBox3.Text);
sw.WriteLine(textBox4.Text);
sw.WriteLine(textBox5.Text);
sw.WriteLine(textBox6.Text);
sw.Close();
}
catch(IOException)
{
return;
}
}
}
}
Zasada jego działania jest następująca:
- po wyborze odpowiedniego portu COM układ pomiarowy w pętli wysyła po kolei wyniki pomiarów z 6 osi: x1, y1, z1, z2, y2, z2 w następujący sposób:
x1: wynikx1
y1: wyniky1
z1: wynikz1
x2: wynikx2
y2: wyniky2
z2: wynikz2 - program na komputerze odbiera te dane i wyświetla je w 6 TextBoxach,
- w każdym z nich jest funkcja, która ogranicza to wyświetlanie do tylko jednej osi x1 lub y1 lub z1 lub x2 lub y2 lub z2.
Problem mój tkwi w tym, ze to wszystko zapisuje się do bufora, którego jak chce zapisać do pliku, to ma on postać:
x1: wynikx1
.
.
.
x1: wynikx1
y1: wyniky1
.
.
.
y1: wyniky1
z1: wynikz1
.
.
.
z1: wynikz1
x2: wynikx2
.
.
.
x2: wynikx2
y2: wyniky2
.
.
.
y2: wyniky2
z2: wynikz2
.
.
.
z2: wynikz2
Moje pytanie jest następujące, jak zmienić ten program, aby zapisywać do pliku w nieco innej formie np:
x1: wynikx1, y1: wyniky1, z1: wynikz1, x2: wynikx2, y2: wyniky2, z2: wynikz2
.
.
.
x1: wynikx1, y1: wyniky1, z1: wynikz1, x2: wynikx2, y2: wyniky2, z2: wynikz2 ?
Pozdrawiam oczekując na jakieś ciekawe propozycje ;)