繁体   English   中英

C#串行端口无法从arduino读取数据

[英]c# serial port cannot read data from arduino

对于一个学校项目,我正在创建一个与arduino连接的乒乓游戏,如果您按住一个按钮,则球拍会朝一个方向移动,如果您不按下它,则朝另一个方向移动。 如果我不使用arduino数据作为输入,则游戏运行良好。 我尝试使用其他功能,但没有用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace pong
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }
}

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 pong
    {

        public partial class Form1 : Form
        {
            SerialPort port1 = new SerialPort();
            public int points = 0;
            public int speed_left = 0;
            public int speed_top = 0;
            public Form1()
            {

                InitializeComponent();
                timer1.Enabled = true;
                Cursor.Hide();  //skrije kurzor
                this.TopMost = true;
                this.Bounds = Screen.PrimaryScreen.Bounds;
                this.FormBorderStyle = FormBorderStyle.None;
                racket.Top = panel1.Bottom - (panel1.Bottom / 10);
                SerialPort port1 = new SerialPort("COM3");
                port1.BaudRate = 9600;
                port1.Parity = Parity.None;
                port1.StopBits = StopBits.One;
                port1.DataBits = 8;
                port1.Handshake = Handshake.None;
                port1.RtsEnable = true;
                port1.Open();


            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                if(!port1.IsOpen)
                {
                    port1.Open();
                    port1.ReadTimeout = 1000;
                }
                if (port1.IsOpen)
                {
                    if (port1.ReadExisting()=="") 
                    {
                        racket.Left = racket.Left - 0;
                    }
                    else
                    {
                        racket.Left = racket.Left + 10;
                    }
                }

                ball.Left += speed_left;
                ball.Top += speed_top;

                if(ball.Bottom >=racket.Top && ball.Bottom <= racket.Bottom && ball.Left >= racket.Left && ball.Right <= racket.Right)
                {
                    speed_left += 2;
                    speed_top += 2;
                    speed_top = -speed_top;
                    points += 1;
                    label2.Text = points.ToString();


                }

                if(ball.Left<=panel1.Left)
                {
                    speed_left = -speed_left;
                }
                if (ball.Right >= panel1.Right)
                {
                    speed_left = -speed_left;
                }
                if(ball.Top <= panel1.Top)
                {
                    speed_top = -speed_top;
                }
                if(ball.Bottom>=panel1.Bottom)
                {
                    timer1.Enabled=false;
                }
            }

            private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if(e.KeyCode==Keys.Escape)
                {
                    this.Close();
                }
            }

            private void label1_Click(object sender, EventArgs e)
            {

            }

        }
    }

arduino:

void setup() {
  // put your setup code here, to run once:
  pinMode(8,INPUT);
  digitalWrite(8,LOW);
}

void loop() {
  Serial.begin(9600);
  while(1){
  if(digitalRead(8)==HIGH)
  {
    Serial.write('1');
  }
  }
}

我建议在timer1_Tick中放置一个断点,我怀疑根本不会调用它,因为您还没有调用

 timer1.Start();

启动计时器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM