c#串口无法从arduino读取数据

时间:2016-11-23 17:22:12

标签: c# arduino serial-port

对于一个学校项目,我正在创建一个连接到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');
  }
  }
}

1 个答案:

答案 0 :(得分:0)

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

 timer1.Start();

启动计时器。