Я разрабатываю графический интерфейс, который получает информацию от ATmega8A. Приведенный ниже код из графического интерфейса должен делать следующее:
- Проверить заголовок: здесь я читаю данные в массив байтов (
byte[] test
), который проверяется на соответствиеOxFF
- Если
header == 0xFF
, прочитать второй массив байтов (byte[] data
)
Пожалуйста, смотрите код ниже.
Теперь у меня есть следующая проблема. Если я отправляю просто число, например 1, то это число без проблем отображается в textBox1
. Однако, если я пытаюсь отправить число, например 433, я всегда получаю 4, 33 теряется. Я предполагаю, что это связано с моим включенным оператором if, но я не могу объяснить, почему эти данные теряются.
namespace RS232
{
public partial class fclsRS232Tester : Form
{
string InputData = String.Empty;
string initText = "waiting...";
delegate void SetTextCallback(string text);
public fclsRS232Tester()
{
InitializeComponent();
// Nice methods to browse all available ports:
string[] ports = SerialPort.GetPortNames();
// Add all port names to the combo box:
foreach (string port in ports)
{
cmbComSelect.Items.Add(port);
}
cmbBaud.Items.Add(2400);
cmbBaud.Items.Add(9600);
cmbComSelect.SelectedIndex = 0;
cmbBaud.SelectedIndex = 1;
button4.Enabled = false;
textBox1.Text = initText;
textBox2.Text = initText;
}
private void cmbComSelect_SelectionChangeCommitted(object sender, EventArgs e)
{
if (port.IsOpen) port.Close();
port.PortName = cmbComSelect.SelectedItem.ToString();
stsStatus.Text = port.PortName + ": 9600,8N1";
// try to open the selected port:
try
{
port.Open();
button4.Enabled = true;
textBox1.Clear();
textBox2.Clear();
}
// give a message, if the port is not available:
catch
{
MessageBox.Show("Serial port " + port.PortName + " cannot be opened!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Warning);
cmbComSelect.SelectedText = "";
stsStatus.Text = "Select serial port!";
}
}
private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{
int bytenumber;
int bufferSize = port.BytesToRead;
byte[] test = new byte[1];
byte[] data = new byte[bufferSize];
byte[] data2 = new byte[bufferSize];
port.Read(test, 0, 1);
if (test[0] == 0xFF) //Receive X-andY- coordinates from MCU and plot the coordinates
{
bytenumber = port.Read(data, 0, bufferSize);
string info = System.Text.Encoding.ASCII.GetString(data);
this.Invoke((MethodInvoker)delegate
{
this.txtIn.Text += info;
}
}
}
}
port
? - person Guffa   schedule 07.09.2014port
, который используется в методе. Эта переменная существует только в области действияforeach
, а строка не имеет свойстваBytesToRead
или методаRead
. - person Guffa   schedule 07.09.2014port
. Где заявлено? - person Guffa   schedule 07.09.2014var firstRead = port.Read(data, 0, buffersize);
и после этого добавьтеDebug.WriteLine(firstRead);
иDebug.WriteLine(BitConverter.ToString(data));
проверку в окне вывода отладки Visual Studio, если вы получаете ожидаемые данные. - person rene   schedule 07.09.2014