Ultrasonic_RADAR.exe
0.01MB

 

 

#소스코드
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 Ultrasonic_RADAR 
{ 
    public partial class Form1 : Form 
    { 
        // 시리얼 관련 변수 
        string dataIN;  //시리얼 읽기 
        double number1;   //문자 -> 부동소수점으로 변경 

        int measure_flag = 0; 
        // 레이더 그리기 
        Timer t = new Timer(); 
        int width = 400, height = 400, Hand = 200; 
        int u;  
        int cx, cy;  
        int x, y;  
        int tx, ty, lim = 20; 

        Bitmap bmp; // 픽셀 
        Pen p;      // 선 
        Graphics g; 
         
        public Form1() 
        { 
            InitializeComponent(); 
        } 

        private void Form1_Load_1(object sender, EventArgs e) 
        { 
            // 시리얼 포트 초기화 
            string[] ports = SerialPort.GetPortNames(); 
            cBoxCOMPORT.Items.AddRange(ports); 

            // 레이더 그리기 초기화 
            bmp = new Bitmap(width + 1, height + 1); 
            this.BackColor = Color.Gray;  

            //center  
            cx = width / 2;  
            cy = height / 2;  

            //initial degree of HAND  
            u = 0;  

            //timer              
            //t.Interval = 5; //in millisecond  
            //t.Tick += new EventHandler(this.t_TICK);  
            //t.Start();          
        } 
         
        private void t_TICK(object sender, EventArgs e)  
        {  
            //pen  
            p = new Pen(Color.Green, 1f);  

            //graphics  
            g = Graphics.FromImage(bmp);  

            //calculate x, y coordinate of HAND  
            int tu = (u - lim) % 360;  

            if (u >= 0 && u <= 180)  
            {  
                //right half  
                //u in degree is converted into radian.  

                x = cx + (int)(Hand * Math.Sin(Math.PI * u / 180));  
                y = cy - (int)(Hand * Math.Cos(Math.PI * u / 180));  
            }  
            else  
            {  
                x = cx - (int)(Hand * -Math.Sin(Math.PI * u / 180));  
                y = cy - (int)(Hand * Math.Cos(Math.PI * u / 180));  
            }  


            if (tu >= 0 && u <= 180)  
            {  
                tx = cx + (int)(150 * Math.Sin(Math.PI * tu / 180));  
                ty = cy - (int)(150 * Math.Cos(Math.PI * tu / 180));  
            }  
            else  
            {  
                tx = cx - (int)(150 * -Math.Sin(Math.PI * tu / 180));  
                ty = cy - (int)(150 * Math.Cos(Math.PI * tu / 180));  
            }  

            // draw circle  
            g.DrawEllipse(p, 0, 0, width, height); //bigger circle  
//            g.DrawEllipse(p, 80, 80, width - 160, height - 160); //smaller circle  

            // draw perpendicular line  
//            g.DrawLine(p, new Point(cx, 0), new Point(cx, height)); // UP-DOWN  
//            g.DrawLine(p, new Point(cy, 0), new Point(cy, width)); //LEFT-RIGHT  

            //draw HAND  
//            g.DrawLine(new Pen(Color.White, 1f), new Point(cx, cy), new Point(tx, ty));  
            g.DrawLine(p, new Point(cx, cy), new Point(x, y)); 
            if (serialPort1.IsOpen) 
            { 
                g.DrawLine(new Pen(Color.Red, 1f), new Point(x-1, y-1), new Point(x, y)); 
            } 
            // load bitmap in picturebox1  
             

            // 해제 
            p.Dispose();  
            g.Dispose(); 

            //update              
            if (u == 360)             
            { 
                u = 0; 
                measure_flag = 0; 
                bmp = new Bitmap(width + 1, height + 1); 
                serialPort1.Write("0"); 
            }else 
                pictureBox1.Image = bmp;  
        } 

        private void btnOpen_Click(object sender, EventArgs e) 
        { 
            try 
            { 
                serialPort1.PortName = cBoxCOMPORT.Text; 
                serialPort1.BaudRate = Convert.ToInt32(cBoxBaudRate.Text); 
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); 

                serialPort1.Open(); 
                progressBar1.Value = 100; 
            } 

            catch (Exception err) 
            { 
                MessageBox.Show(err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
            } 
        } 

        private void btnCLose_Click_1(object sender, EventArgs e) 
        { 
            if (serialPort1.IsOpen) 
            { 
                serialPort1.Close(); 
                progressBar1.Value = 0; 
            } 
        } 
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)     //시리얼 데이터 읽기 
        { 
            if (measure_flag == 1) 
            { 
                dataIN = serialPort1.ReadExisting(); 
                try 
                { 
                    number1 = System.Convert.ToDouble(dataIN); 
                } 
                catch (FormatException) 
                { 
                } 
                catch (OverflowException) 
                { 
                } 
                Hand = (int)number1;    //그리기-값                    
                 
                serialPort1.Write("1"); 

                this.Invoke(new EventHandler(ShowData)); 
                this.Invoke(new EventHandler(t_TICK)); 
                 
                u++; 
            } 

        } 
        private void ShowData(object sender, EventArgs e)   //Data 출력 
        {             
            this.label3.Text = dataIN;                         
        } 

        private void Measure_Click(object sender, EventArgs e) 
        { 
            measure_flag = 1; 
            serialPort1.Write("1"); 
        } 
    } 
}

 

+ Recent posts