You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#生成驱动LED的2Hz高低电平交替方波

C# 实现LED输出2Hz方波方案

2Hz方波的周期为1/2=500ms,只需让高低电平各保持250ms切换一次即可,不需要额外嵌套for循环,靠主循环+定时切换就能实现持续输出直到手动停止。

实现注意事项

  • 操作树莓派/ARM类硬件时,直接引用System.Device.GpioNuGet包即可完成GPIO操作
  • 不要写无延时的死循环,会占满单核心CPU资源,必须添加和方波周期匹配的延时逻辑
  • 物理按钮检测要加防抖处理,避免电平跳变导致的误触发

完整可运行代码示例

using System;
using System.Device.Gpio;
using System.Threading;

class LedSquareWaveProgram
{
    // 全局程序运行状态标记
    private static bool _programRunning = true;
    // 按自己实际接线修改GPIO引脚编号
    private const int LedPin = 18;
    private const int ButtonPin = 2;
    private static GpioController _gpioController;

    static void Main(string[] args)
    {
        _gpioController = new GpioController();
        // 初始化LED引脚为输出模式,按钮引脚为上拉输入模式
        _gpioController.OpenPin(LedPin, PinMode.Output);
        _gpioController.OpenPin(ButtonPin, PinMode.InputPullUp);

        // 捕获控制台退出信号,按下Ctrl+C即可手动停止程序
        Console.CancelKeyPress += (sender, eventArgs) =>
        {
            _programRunning = false;
            eventArgs.Cancel = true;
        };

        Console.WriteLine("程序运行中,按下按钮输出2Hz方波,按下Ctrl+C退出程序");
        while (_programRunning)
        {
            // 读取按钮状态+10ms防抖
            bool isButtonPressed = _gpioController.Read(ButtonPin) == PinValue.Low;
            Thread.Sleep(10);
            if (isButtonPressed && _gpioController.Read(ButtonPin) == PinValue.Low)
            {
                // 高低电平各保持250ms,刚好组成500ms周期的2Hz方波
                _gpioController.Write(LedPin, PinValue.High);
                Thread.Sleep(250);
                _gpioController.Write(LedPin, PinValue.Low);
                Thread.Sleep(250);
            }
            else
            {
                // 按钮未按下时关闭LED
                _gpioController.Write(LedPin, PinValue.Low);
                Thread.Sleep(10);
            }
        }

        // 退出前释放GPIO资源
        _gpioController.Write(LedPin, PinValue.Low);
        _gpioController.ClosePin(LedPin);
        _gpioController.ClosePin(ButtonPin);
        _gpioController.Dispose();
        Console.WriteLine("程序已停止");
    }
}

逻辑说明

和你最初的实现思路完全匹配,仅做了生产可用的细节补全:

  • 主循环保持判断程序运行状态,每次循环先读取按钮输入
  • 按钮按下的分支里每次完成一次高低电平切换+对应延时,循环往复就会自动生成连续方波,松开按钮立刻停止输出
  • 自带资源释放逻辑,程序退出时不会残留引脚电平异常

内容的提问来源于stack exchange,提问作者SWman88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:39:00