Member 13785296 Ответов: 2

Как отправить шестнадцатеричные данные в последовательный порт


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 Blaney;
using System.IO;
using System.IO.Ports;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        Radar _radar;
        public Form1()
        {
            InitializeComponent();
        }
        RadarItem item1 = new SquareRadarItem(1, 8, 0, 60);
        RadarItem item2 = new CircleRadarItem(2, 8, 0, 30);
        RadarItem item3 = new TriangleRadarItem(3, 10, 0, 40);
      
        private void Form1_Load(object sender, EventArgs e)
        {
            _radar = new Radar(pictureBox1.Width);
            pictureBox1.Image = _radar.Image;
            _radar.ImageUpdate += new ImageUpdateHandler(_radar_ImageUpdate);
            _radar.DrawScanInterval = 60;
            _radar.DrawScanLine = true;
        }
    
        void _radar_ImageUpdate(object sender, ImageUpdateEventArgs e)
        {
            // this event is important to catch!
            pictureBox1.Image = e.Image;
        }

        int A = 1;
        private void timer1_Tick(object sender, EventArgs e)
        {
             item3.Azimuth++;      // 0 to 360 
            _radar.AddItem(item3);           
            label2.Text = item3.Azimuth.ToString();
           
            item3.Elevation += A;
            if (item3.Elevation == 75 || item3.Elevation == 40)
            {
                A = -A;
            }
            label4.Text = item3.Elevation.ToString();
     
        }
     
        private void btnSquare_Click(object sender, EventArgs e)
        {
            _radar.AddItem(item1);
        }

        private void btnCircle_Click(object sender, EventArgs e)
        {
            _radar.AddItem(item2);
        }

        private void btnTriangle_Click(object sender, EventArgs e)
        {
            _radar.AddItem(item3);
        }
        private void btnEleplus_Click(object sender, EventArgs e)
        {
            item3.Elevation++;
            label5.Text = item3.Elevation.ToString();
        }
        private void btnEle__Click(object sender, EventArgs e)
        {
            item3.Elevation--;
            label6.Text = item3.Elevation.ToString();
        }
        int r = 300;
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            //var x_dist = e.Location.X - r;
            //var y_dist = e.Location.Y - r;
            //var distance = Math.Sqrt(x_dist * x_dist + y_dist * y_dist); // pythagoras : sqrt(a² + b²) = c
            //distance = distance * 10;
            //textBox1.Text = distance.ToString();
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            //var x_dist = e.Location.X - r;
            //var y_dist = e.Location.Y - r;
            //var distance = Math.Sqrt(x_dist * x_dist + y_dist * y_dist); // pythagoras : sqrt(a² + b²) = c
            //distance = distance * 10;
            //item3.Elevation = Convert.ToInt16(distance) ;
            //textBox1.Text = distance.ToString();
        }   
    }
}


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

Это все код. Если эта программа треугольник item3 запускается по кругу с азимутом от 0 до 360 и высотой от 40 до 75 снова и снова. Я хочу отправить эти данные азимута и высоты на другой компьютер с шестнадцатеричным кодом последовательного порта.? как это сделать?

2 Ответов

Рейтинг:
2

CPallini

Цитата:
хотите отправить последовательный порт с шестнадцатеричным кодом.
Вероятно, вы имеете в виду " хотите отправить двоичные данные (то есть массив байтов) к последовательному порту'. Взгляните на документацию: Последовательный порт.Метод Write (Системы.ИО.Порта) | Майкрософт Документы[^].


Рейтинг:
14

OriginalGriff

Во-первых, это не очень хороший код: там нет ограничений по азимуту, несмотря на комментарий, что он должен варьироваться от 0 до 360.
Каждый раз, когда таймер тикает, вы добавляете один и тот же элемент в коллекцию _radar - так что ваше изменение свойства Azimuth непосредственно над ним влияет на все элементы, а не только на один. Чтобы добавить другие значения, вам нужно создать новый экземпляр whatever item3 это каждый раз, когда вы получаете новое тиковое событие.
Ваше состояние "если" просто выглядит странно - если только Elevation и A начните с очень конкретных значений, это вряд ли сработает. Довольно много, Elevation придется начинать между 40 и 75 годами, и A должно быть, 1 или 5 ...

И там вообще нет ничего о серийных данных: начните здесь и посмотрите, к чему вы можете прийти: Класс SerialPort (System.IO.Ports) | Microsoft Docs[^]