JeezyWonder Ответов: 2

Нужно отправить байт для микроконтроллера на C#


Здравствуйте, добрые люди.
Я хочу отправить данные на контроллер, и тогда он включит "светоизлучающий диод".
Я запутался, как отправить байты , так как я получаю эту команду, отправляющую данные в строковом формате, а не в байтах:
serialPort1.Write("1");

Может быть, я ошибаюсь
Любая Помощь, Спасибо.
Код приводится ниже.

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

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;

namespace Sending_data_serial
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Open();
            serialPort1.Write("1");
            serialPort1.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.PortName = textBox1.Text;
            serialPort1.BaudRate = Convert.ToInt32(textBox2.Text);


        }
    }
}

2 Ответов

Рейтинг:
15

Afzaal Ahmad Zeeshan

Вам нужно взглянуть на эту перегрузку функции, Последовательный порт.Способ Записи (Байт[], Типа Int32, Int32) Для (Системы.ИО.Порты)[^], он позволяет записывать байты из буфера. Pass 0 и byteArray.Длина как параметр для отправки полного буфера в последовательный порт.

Чтобы отправить только один байт, вы можете сделать следующее,

// bytes is assumed to be of byte[] type with some data.
serialPort1.Write(bytes, 0, 1); // Start from 0, go to 1; 1 byte.

Другой хороший пример приведен в решении Йохена в решении 2, Также см., Что, но вы можете получить байты из любого источника, будь то кодировка символов, команда или что-то еще.


JeezyWonder

Спасибо за УР ответ, Afzaal, может у пожалуйста, пример кода, как отправить 1 байт. Пожалуйста, потому что я не могу этого понять

Afzaal Ahmad Zeeshan

Пожалуйста, ознакомьтесь с обновленным сообщением.

Рейтинг:
10

Jochen Arndt

Вы все еще можете использовать метод, принимающий строку для отправки байтов, поскольку он по умолчанию использует кодировку ASCII (преобразует каждый символ в значение байта ASCII).

Таким образом, двоичное значение 0x01 может быть отправлено как

serialPort1.Write("\u0001");


Но если вам нужно отправить данные, содержащие нулевой байт, значения >= 128 или избежать преобразования Юникода в ASCII, вы должны использовать метод, принимающий массив байтов:
var dataByte = new byte[] { 0x00 };
serialPort1.Write(dataByte, 0, 1);