C#上位机程序控制arduino板上小灯闪烁频率

编写一个C#上位机界面输入数值,控制arduino板上小灯闪烁频率,需要编写C#上位机界面程序和arduino程序

参考一下:
C#上位机界面程序

using System;
using System.Windows.Forms;
using System.IO.Ports;

namespace ArduinoLEDController
{
    public partial class Form1 : Form
    {
        private SerialPort arduinoPort = new SerialPort();
        private bool isConnected = false;

        public Form1()
        {
            InitializeComponent();
            // 打开串口连接
            arduinoPort.PortName = "COM3"; // 根据实际情况修改端口号
            arduinoPort.BaudRate = 9600; // 与Arduino程序中的波特率一致
            arduinoPort.Open();
            isConnected = true;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭串口连接
            if (isConnected)
            {
                arduinoPort.Close();
            }
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            // 发送指令到Arduino控制灯的闪烁频率
            int frequency = (int)numFrequency.Value;
            string command = frequency.ToString();
            arduinoPort.Write(command);
        }
    }
}

Arduino程序


int ledPin = 13; // LED连接到数字引脚13
int blinkDelay = 1000; // 默认闪烁频率1秒

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    // 接收到从上位机发送的指令,更新闪烁频率
    blinkDelay = Serial.parseInt();
  }
  
  digitalWrite(ledPin, HIGH);
  delay(blinkDelay / 2);
  digitalWrite(ledPin, LOW);
  delay(blinkDelay / 2);
}

该回答引用ChatGPT
分析:

要实现C#上位机程序控制Arduino板上小灯的闪烁频率,需要通过串口通信来实现。具体步骤如下:

1. 编写C#上位机程序,通过串口通信将需要控制的频率值发送给Arduino板,同时接收Arduino板返回的信息。

2. 编写Arduino程序,接收C#上位机程序传来的频率值,通过控制小灯的状态来实现频率控制,同时将相关信息发送回C#上位机程序。

代码实现:

C#上位机程序:

csharp
using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace SerialPortDemo
{
public partial class Form1 : Form
{
//定义串口变量
private SerialPort serialPort;

public Form1()
{
InitializeComponent();

//初始化串口
serialPort = new SerialPort();
serialPort.PortName = "COM3"; //设置串口号
serialPort.BaudRate = 9600; //设置波特率
serialPort.DataBits = 8; //设置数据位
serialPort.StopBits = StopBits.One; //设置停止位
serialPort.Parity = Parity.None; //设置校验位
serialPort.ReadTimeout = 1000; //设置读取超时时间
serialPort.WriteTimeout = 1000; //设置写入超时时间

//打开串口
try
{
serialPort.Open();
}
catch (Exception ex)
{
MessageBox.Show("串口打开失败!" + ex.Message);
}
}

//发送数据
private void btnSend_Click(object sender, EventArgs e)
{
//判断串口是否打开
if (serialPort.IsOpen)
{
//发送数据
string sendStr = txtSendData.Text.Trim();
serialPort.Write(sendStr);
txtSendData.Clear();

//接收数据
try
{
string receiveStr = serialPort.ReadLine();
txtReceiveData.Text = receiveStr;
}
catch (Exception ex)
{
MessageBox.Show("读取串口数据失败!" + ex.Message);
}
}
else
{
MessageBox.Show("串口未打开!");
}
}

//关闭串口
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort.IsOpen)
{
serialPort.Close();
}
}
}
}


Arduino程序:

c++
const int ledPin = 13; //定义LED引脚
int receiveValue; //接收到的数值

void setup()
{
Serial.begin(9600); //初始化串口
pinMode(ledPin, OUTPUT); //设置LED引脚为输出模式
}

void loop()
{
//检测串口是否有数据
while(Serial.available()) {
//读取串口数据
receiveValue = Serial.read();

//根据接收到的数值控制LED闪烁频率
if (receiveValue >= 48 && receiveValue <= 57) {
int freq = receiveValue - 48; //转换为数字
int time = 1000 / freq / 2; //计算LED亮灭半个周期的时间
digitalWrite(ledPin, HIGH); //LED亮
delay(time);
digitalWrite(ledPin, LOW); //LED灭
delay(time);
}

//向上位机发送数据
Serial.println(receiveValue);
}
}


运行效果:

在C#上位机程序中输入控制频率的数值,点击“发送”按钮,可以通过串口将数值传输到Arduino板。Arduino板接收到数值后,通过计算LED亮灭半个周期的时间,控制LED的闪烁频率,并将接收到的数值通过串口回传给C#上位机程序。这样,就实现了C#上位机程序控制Arduino板上小灯闪烁频率的功能。

该回答引用于ChatGPT:
C#上位机界面程序:

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoControl
{
    public partial class MainForm : Form
    {
        private SerialPort _serialPort;

        public MainForm()
        {
            InitializeComponent();
        }

        private void ConnectButton_Click(object sender, EventArgs e)
        {
            // 连接Arduino板
            if (_serialPort != null && _serialPort.IsOpen)
            {
                _serialPort.Close();
            }

            _serialPort = new SerialPort();
            _serialPort.PortName = PortNameTextBox.Text;
            _serialPort.BaudRate = 9600;

            try
            {
                _serialPort.Open();

                string message = "Connected to Arduino!";
                MessageBox.Show(message, "Info");

                FrequencyTrackBar.Enabled = true;
            }
            catch (Exception ex)
            {
                string message = "Failed to connect to Arduino: " + ex.Message;
                MessageBox.Show(message, "Error");
            }
        }

        private void FrequencyTrackBar_Scroll(object sender, EventArgs e)
        {
            // 控制小灯闪烁频率
            if (_serialPort != null && _serialPort.IsOpen)
            {
                int frequency = FrequencyTrackBar.Value;
                string message = $"{frequency}";
                _serialPort.Write(message);
            }
        }
    }
}

Arduino程序:

int led = 13;
int delay_ms = 500;

void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    delay_ms = 100 * Serial.read();
  }

  digitalWrite(led, HIGH);
  delay(delay_ms);
  digitalWrite(led, LOW);
  delay(delay_ms);
}

上述C#程序中,ConnectButton_Click函数处理连接按钮的点击事件,通过_serialPort对象连接指定的串行端口。FrequencyTrackBar_Scroll函数处理滑动条的滚动事件,通过_serialPort对象向Arduino板发送频率数据。

上述Arduino程序中,setup函数在程序开始时初始化led引脚和串行通信。loop函数循环执行LED闪烁动作,并通过串行通信接收C#程序发送的频率数据。

以下是一个简单的C#上位机界面程序和相应的Arduino程序,可以通过串口通信实现控制Arduino板上小灯闪烁频率。

C#上位机界面程序代码:

using System;
using System.Windows.Forms;
using System.IO.Ports;

namespace ArduinoControl
{
    public partial class Form1 : Form
    {
        SerialPort port;

        public Form1()
        {
            InitializeComponent();

            // 初始化串口对象
            port = new SerialPort();
            port.PortName = "COM3";  // 设置串口号
            port.BaudRate = 9600;    // 设置波特率
            port.Open();             // 打开串口
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int freq = int.Parse(textBox1.Text);
            port.Write(freq.ToString() + "\n");  // 发送频率数据到Arduino
        }
    }
}

基于new Bing和ChatGPT的回答:
C#上位机界面程序:


using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoControl
{
    public partial class Form1 : Form
    {
        SerialPort serialPort = new SerialPort();

        public Form1()
        {
            InitializeComponent();

            // 初始化串口
            serialPort.PortName = "COM3"; // 根据实际情况修改
            serialPort.BaudRate = 9600;
            serialPort.Open();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            if (txtFrequency.Text == "")
            {
                MessageBox.Show("请输入频率!");
                return;
            }

            // 发送频率到Arduino
            string cmd = "F" + txtFrequency.Text;
            serialPort.Write(cmd);

            // 等待Arduino响应
            string response = serialPort.ReadLine();
            if (response != "OK")
            {
                MessageBox.Show("设置频率失败!");
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭串口
            serialPort.Close();
        }
    }
}

Arduino程序:

int ledPin = 13;
int frequency = 1000;
unsigned long previousMillis = 0;
unsigned long interval = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 读取串口数据
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    if (cmd == 'F') {
      frequency = Serial.parseInt();
      interval = 1000 / frequency;
      Serial.println("OK");
    }
  }

  // 控制LED灯闪烁
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(ledPin, !digitalRead(ledPin));
  }
}


该回答引用ChatGPT GPT-4

C#代码



using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoBlinkControl
{
    public partial class MainForm : Form
    {
        private SerialPort _serialPort;

        public MainForm()
        {
            InitializeComponent();
            InitializeSerialPort();
        }

        private void InitializeSerialPort()
        {
            _serialPort = new SerialPort
            {
                PortName = "COM3", // 请根据您的Arduino连接修改此端口号
                BaudRate = 9600
            };
            _serialPort.Open();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (int.TryParse(txtFrequency.Text, out int frequency) && _serialPort.IsOpen)
            {
                _serialPort.Write(frequency.ToString());
            }
            else
            {
                MessageBox.Show("请输入有效的闪烁频率", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (_serialPort.IsOpen)
            {
                _serialPort.Close();
            }
        }
    }
}


#include <Arduino.h>

const int ledPin = 13; // 小灯接在数字引脚13上
String inputString = ""; // 存储接收到的数据
int frequency = 0; // 闪烁频率

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  while (Serial.available()) {
    char incomingChar = (char)Serial.read();
    if (incomingChar == '\n') {
      frequency = inputString.toInt();
      inputString = "";
    } else {
      inputString += incomingChar;
    }
  }

  if (frequency > 0) {
    int interval = 1000 / frequency; // 以毫秒为单位计算闪烁间隔
    digitalWrite(ledPin, HIGH);
    delay(interval);
    digitalWrite(ledPin, LOW);
    delay(interval);
  }
}

Arduino程序

作为嵌入式工程师,我将为您提供一个示例C#上位机界面和Arduino程序,以控制Arduino板上的LED闪烁频率。以下是程序的基本思路:

C#上位机界面中,用户可以输入要设置的LED闪烁频率值。
用户单击“设置”按钮后,将通过串口将频率值发送到Arduino板。
Arduino板接收到频率值后,将通过PWM控制LED的亮度,从而控制LED闪烁的频率。
C#上位机界面程序代码:

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoControl
{
    public partial class Form1 : Form
    {
        private SerialPort arduinoPort;

        public Form1()
        {
            InitializeComponent();

            // 打开串口
            arduinoPort = new SerialPort("COM3", 9600);
            arduinoPort.Open();
        }

        private void buttonSet_Click(object sender, EventArgs e)
        {
            // 从文本框中获取频率值
            int frequency = int.Parse(textBoxFrequency.Text);

            // 将频率值转换为ASCII码并发送到Arduino
            arduinoPort.Write(frequency.ToString());
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭串口
            arduinoPort.Close();
        }
    }
}

Arduino程序代码:

int ledPin = 9;

void setup() {
  pinMode(ledPin, OUTPUT);

  // 开启串口通信,波特率为9600
  Serial.begin(9600);
}

void loop() {
  // 等待从串口接收到数据
  while (!Serial.available()) {}

  // 读取接收到的数据并转换为整数
  int frequency = Serial.parseInt();

  // 根据频率值设置LED亮度
  analogWrite(ledPin, 255 / frequency);

  // 延迟一段时间,让LED闪烁
  delay(500);
}

这些代码将在您连接正确的串口并上传到Arduino板后运行。在上位机界面中,用户可以输入频率值,然后单击“设置”按钮。Arduino板将根据频率值来设置LED的亮度,从而控制LED的闪烁频率。

提供参考实例:https://blog.51cto.com/u_13640625/5148485
【该实例详细讲述了实现的整个过程,主要思路借鉴:
① 编写Arduino程序让LED以1s的间隔闪烁;
② 加入串口发送数据功能,使用Arduino自带串口监视器测试;
③ 加入串口接收功能,使用Arduino自带串口监视器测试;
④ 硬件程序搞定,编写上位机利用串口发送数据;】

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,需要在Arduino板上编写程序,使其能够接收来自C#上位机程序的控制指令,并根据指令改变小灯闪烁的频率。以下是一个示例代码:

const int LED_PIN = 13; // 小灯所在的引脚

void setup() {
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600); // 初始化串口通信
}

void loop() {
  if (Serial.available() > 0) {
    int frequency = Serial.parseInt(); // 读取上位机传来的频率

    if (frequency > 0) {
      int delay_time = 1000 / frequency;
      digitalWrite(LED_PIN, HIGH);
      delay(delay_time / 2);
      digitalWrite(LED_PIN, LOW);
      delay(delay_time / 2);
    }
  }
}

在这个代码中,我们定义了一个LED_PIN常量表示小灯所在的引脚。在setup函数中,我们将该引脚设定为输出模式,并启动串口通信,以便与C#上位机程序进行通信。在loop函数中,我们首先检查串口缓冲区是否有可用的数据。如果有,则读取其中的整数值,表示C#上位机传来的频率数值。然后,根据该频率数值计算出小灯闪烁的时间间隔,并在这个间隔内进行循环控制小灯的亮灭。

接下来,需要编写C#上位机程序,该程序可以向Arduino板发送控制指令,并显示从Arduino板上发送回来的信息。以下是一个示例代码:

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoControl
{
    public partial class MainForm : Form
    {
        private SerialPort serialPort;

        public MainForm()
        {
            InitializeComponent();

            serialPort = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
            serialPort.Open();
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            int frequency = (int)numericUpDown1.Value;
            string command = frequency.ToString();
            serialPort.WriteLine(command);
        }

        private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            string message = serialPort.ReadLine();
            Invoke(new Action(() => { textBox1.AppendText(message); }));
        }
    }
}

在这个程序中,我们首先创建了一个SerialPort对象,用于与Arduino板建立串口通信。在numericUpDown1_ValueChanged事件处理函数中,我们根据用户在界面上输入的频率数值,将该数值转化为字符串,并发送给Arduino板。在serialPort_DataReceived事件处理函数中,我们从串口接收来自Arduino板的信息,并显示在textBox1控件中。

以上是一个简单的例子,可以供您参考,实现起来也比较简单。您可以根据实际需要对程序进行修改和优化。
如果我的回答解决了您的问题,请采纳!

上位机使用串口控制,下位机使用ide编写一个串口数据,

引用chatGPT作答,要实现你所描述的程序,需要按照以下步骤进行:

1.首先,需要在Arduino板上编写一个程序,用于控制小灯的闪烁频率。这个程序可以使用Arduino IDE编写,使用Arduino的编程语言。这个程序需要接收从C#上位机发来的频率值,并根据该值改变小灯的闪烁频率。
以下是一个示例代码,用于在Arduino上控制LED的闪烁频率:

int led = 13;
int delayTime = 1000;

void setup() {
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);
  delay(delayTime);
  digitalWrite(led, LOW);
  delay(delayTime);
}

这个程序简单地控制Arduino板上13号引脚上的LED,使用delay()函数来改变LED的状态。

2.然后,需要编写C#上位机界面。这个界面需要包含一个输入框,用于输入LED的闪烁频率,以及一个按钮,用于将频率值发送到Arduino板上。可以使用Visual Studio等开发工具来编写C#上位机界面。
以下是一个示例代码,用于在C#上实现控制LED的闪烁频率:

using System.IO.Ports;

SerialPort serialPort = new SerialPort("COM3", 9600);

private void button1_Click(object sender, EventArgs e)
{
    int freq = int.Parse(textBox1.Text);
    serialPort.Open();
    serialPort.WriteLine(freq.ToString());
    serialPort.Close();
}

这个代码使用了SerialPort类来与Arduino板进行通信。当按钮被点击时,程序将从输入框中读取频率值,将其转换为字符串,并通过串口发送给Arduino板。

3.最后,需要将Arduino板和C#上位机连接起来。首先,将Arduino板通过USB连接到计算机上,然后在Arduino IDE中上传Arduino程序。接着,打开C#上位机程序,输入想要的频率值,并点击按钮,就可以控制Arduino板上的LED闪烁频率了。

为了实现这个功能,你需要分别编写C#上位机程序和Arduino程序。在C#程序中,我们将创建一个简单的界面,用于输入闪烁频率,然后通过串口通信将该值发送给Arduino。在Arduino程序中,我们将接收这个值,并根据接收到的值控制LED灯的闪烁频率。下面是详细的步骤和代码示例。

Arduino程序:
首先,我们为Arduino编写一个简单的程序,用于接收串口数据并控制LED灯的闪烁频率。将以下代码上传到你的Arduino板:

const int ledPin = 13; // 设置LED灯连接的引脚
int frequency = 1000; // 初始化闪烁频率为1000ms

void setup() {
  pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
  Serial.begin(9600); // 初始化串口通信波特率为9600
}

void loop() {
  if (Serial.available() > 0) { // 检查串口是否有可用数据
    frequency = Serial.parseInt(); // 读取并解析串口数据
  }
  digitalWrite(ledPin, HIGH); // 打开LED灯
  delay(frequency / 2); // 保持打开状态一半的频率时间
  digitalWrite(ledPin, LOW); // 关闭LED灯
  delay(frequency / 2); // 保持关闭状态一半的频率时间
}

C#上位机程序:
接下来,我们为C#创建一个简单的上位机程序,用于输入闪烁频率并通过串口发送给Arduino。在Visual Studio中创建一个新的Windows窗体应用程序,并添加以下组件:

1个TextBox(命名为txtFrequency)
1个Button(命名为btnSend,文本设置为"发送")
1个ComboBox(命名为cbSerialPorts,用于选择串口)
1个SerialPort(命名为serialPort)
将以下C#代码添加到窗体的代码文件中:

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace ArduinoBlinkControl
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            GetAvailablePorts();
        }

        private void GetAvailablePorts()
        {
            string[] ports = SerialPort.GetPortNames();
            cbSerialPorts.Items.AddRange(ports);
            if (cbSerialPorts.Items.Count > 0)
            {
                cbSerialPorts.SelectedIndex = 0;
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (!serialPort.IsOpen)
            {
                serialPort.PortName = cbSerialPorts.SelectedItem.ToString();
                serialPort.BaudRate = 9600;
                serialPort.Open();
            }

            if (int.TryParse(txtFrequency.Text, out int frequency))
            {
                serialPort.WriteLine(frequency.ToString());
            }
            else
            {
                MessageBox.Show("请输入有效的频率值(整数)", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
        }
    }
}


这段代码将创建一个简单的上位机界面,用于输入闪烁频率并通过串口发送给Arduino。当用户输入频率并点击“发送”按钮时,程序将尝试解析输入的文本并将其作为整数发送到Arduino。Arduino程序将解析接收到的数据,并相应地更新LED灯的闪烁频率。

C#上位机程序控制arduino板上小灯闪烁频率,我只是想善意提醒下,chatgpt是免费的,与其花15给这些黑产送钱,为啥不直接去chatgpt网站。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下。
下面是一个简单的C#上位机界面程序和对应的Arduino程序,可以通过串口控制Arduino板上的小灯闪烁频率:
1、C#上位机界面程序:

using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace SerialTest
{
    public partial class Form1 : Form
    {
        SerialPort serialPort;

        public Form1()
        {
            InitializeComponent();

            // 初始化串口
            serialPort = new SerialPort();
            serialPort.PortName = "COM3"; // 修改为您的串口号
            serialPort.BaudRate = 9600;
            serialPort.DataBits = 8;
            serialPort.Parity = Parity.None;
            serialPort.StopBits = StopBits.One;

            try
            {
                serialPort.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show("串口打开失败:" + ex.Message);
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            // 发送数据到Arduino
            string data = txtFreq.Text;
            if (!string.IsNullOrEmpty(data))
            {
                serialPort.Write(data + "\n");
            }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭串口
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
        }
    }
}

2、Arduino程序:

const int ledPin = 13; // 控制小灯的引脚
int freq = 1000; // 初始闪烁频率

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // 读取串口数据并更新闪烁频率
  if (Serial.available() > 0) {
    freq = Serial.parseInt();
  }

  // 控制小灯闪烁
  digitalWrite(ledPin, HIGH);
  delay(freq / 2);
  digitalWrite(ledPin, LOW);
  delay(freq / 2);
}

说明:

C#上位机界面程序中,使用了SerialPort类来初始化串口,并在按钮点击事件中将输入框中的数据发送到Arduino。Arduino程序中,读取串口数据并更新闪烁频率,然后控制小灯闪烁。需要注意的是,发送到串口的数据应该以换行符结尾,以便Arduino程序能够正确地读取数据。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

以下内容部分参考ChatGPT模型:
首先,需要在C#上位机程序中通过串口通信向Arduino发送控制小灯闪烁频率的指令。可以使用SerialPort类进行串口通信。

在C#程序中,可以创建一个滑动条来控制闪烁频率,例如:

private void trackBar1_Scroll(object sender, EventArgs e)
{
    int frequency = trackBar1.Value;
    string cmd = "FREQ:" + frequency + "\n";
    serialPort1.Write(cmd);
}

在Arduino程序中,接收到控制指令后,需要解析指令并控制小灯闪烁频率。可以使用Serial.readStringUntil()函数读取串口数据,并根据指令内容控制小灯频率,例如:

void loop() {
  if (Serial.available() > 0) {
    // read the incoming byte:
    String cmd = Serial.readStringUntil('\n');
    if (cmd.startsWith("FREQ:")) {
      int frequency = cmd.substring(5).toInt();
      int delayTime = 1000 / frequency / 2;
      digitalWrite(LED_PIN, HIGH);
      delay(delayTime);
      digitalWrite(LED_PIN, LOW);
      delay(delayTime);
    }
  }
}

上面的代码将接收到的指令解析为频率值,并计算出每次闪烁的延时时间,然后将小灯的高低电平状态交替切换,实现闪烁效果。

完整的C#和Arduino程序示例可以参考以下链接:

C#上位机程序:https://github.com/ElevenBeans/CSharp-Arduino-Serial-Communication

Arduino程序:https://github.com/ElevenBeans/Arduino-Serial-Communication
如果我的建议对您有帮助、请点击采纳、祝您生活愉快

该回答引用于ChatGPT:

using System;
using System.Windows.Forms;
using System.IO.Ports;

namespace ArduinoSerialControl
{
    public partial class Form1 : Form
    {
        SerialPort serialPort;

        public Form1()
        {
            InitializeComponent();

            // 初始化串口
            serialPort = new SerialPort("COM3", 9600);
            serialPort.Open();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 从文本框获取频率
            int frequency = int.Parse(textBox1.Text);

            // 发送频率到 Arduino
            serialPort.Write(frequency.ToString());

            // 清空文本框
            textBox1.Clear();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // 关闭串口
            serialPort.Close();
        }
    }
}

Arduino 程序:

int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    int frequency = Serial.parseInt();

    if (frequency > 0) {
      // 计算闪烁时间
      int interval = 1000 / frequency;

      // 闪烁小灯
      digitalWrite(ledPin, HIGH);
      delay(interval / 2);
      digitalWrite(ledPin, LOW);
      delay(interval / 2);
    }
  }
}