JeezyWonder Ответов: 1

C#, нужно получать данные от микроконтроллера


Здравствуйте, Добрые Молодцы.
Пытаясь получить данные от mk, используя событие DataReceived и handler, я делаю следующее -
нажмите кнопку на программе(код ниже), затем загорится светодиод на mk, затем данные должны быть отправлены обратно в программу (ожидая 1, на байтовом значении, но также попробовав строковое значение, не работает). Sending сторона работает, но получать.... не
кажется, я что-то упускаю. Любая помощь оценит это по достоинству. Спасибо в Далее

Я проверил с образцом консоли mdsn, я хорошо получаю данные.
Так что проблема, я думаю, в коде выше.
Есть образец:
https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=против 110). aspx

Что я уже пробовал:

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 WindowsFormsApplication11
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
         
        
        }
        private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) // As i understood, here we configure where i data will be shown,
                                                                                       // trying to get it on TextBox1
        {

            SerialPort sp = (SerialPort)sender;
            richTextBox1.Text += sp.ReadExisting() + "\n";
        }

        private void button1_Click(object sender, EventArgs e)                                      // There are a main actions, first i receive data then send data by a click.    
        {
            serialPort1.Write("\u0001");
            serialPort1.Close();

            System.ComponentModel.IContainer components = new System.ComponentModel.Container();  //  
            serialPort1 = new System.IO.Ports.SerialPort(components);
            serialPort1.PortName = "COM4";
            serialPort1.BaudRate = 9600;
            serialPort1.DtrEnable = true;
            serialPort1.Open();
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

          
        }
    }
}

Richard MacCutchan

Код в вашем button1_Click метод вышел из строя; как он вообще компилируется?

1 Ответов

Рейтинг:
0

Patrice T

Первое, что нужно сделать, - это отладить последовательную связь.
Вам нужно выяснить, если микроконтроллер не отправит ответ, или приложение windows не получит его, или если и то, и другое не удастся.
Используйте эмулятор терминала вместо вашего приложения и отправьте команду вручную, если микроконтроллер работает, вы получите ответ на терминале. Затем сделайте то же самое с другой стороны и посмотрите, получится ли это или нет.
Это подскажет Вам, работает ли кабель, и поможет сузить круг исследований.

Я не знаю, где вы нашли примеры серийного com, но это странно.
Порядок вещей таков:
- установите параметры последовательного
- открытые связи
- отправить команду
- ждите ответа
- закрыть связь


JeezyWonder

Я проверил с образцом консоли mdsn, я хорошо получаю данные.
Так что проблема, я думаю, в коде выше.
Есть образец:
https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=против 110). aspx

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

S Houghtelin

Да, вы правы, проблема в вашем коде. Я задам вам вопрос: если вы закроете последовательный порт перед настройкой события приема, как последовательный порт будет получать новые данные, если он будет закрыт? Вернитесь к образцу, с которым вы связались, и внимательно запишите порядок, так как ppolymorphe так ясно изложен для вас.

Посмотрите на это так: если кто-то постучит в вашу дверь, и вы скажете "войдите", а затем закроете дверь перед их носом, как они войдут?

JeezyWonder

Спасибо. я изменил его, теперь я открываю и закрываю порты щелчками кнопок:
частный недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{ serialPort1.Открыть(); }
частный недействительными button3_Click(объект отправителя, EventArgs в электронной)
{serialPort1.Рядом();}
Но результат тот же (((

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.