首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >X10码的C#解码

X10码的C#解码
EN

Stack Overflow用户
提问于 2017-02-11 03:53:46
回答 1查看 166关注 0票数 1

我喜欢在Raspberry Pi上使用Windows10 IoT上的C#解码X10代码,但我没有RF解码的经验,所以这对我来说是一个新领域。

我偶然发现了this帖子,我试图将它转换成C#代码,但没有成功。有没有人知道如何使用C#正确解码这个X10代码,或者有人能告诉我正确的协议规范。

这是我目前使用的代码,但是没有调用ValueChanged事件。

代码语言:javascript
运行
复制
public static void Sniff(uint gpioPinNumb)
        {
            Task.Run(() => {
                using (GpioPin pin = GpioController.GetDefault().OpenPin((int)gpioPinNumb, GpioSharingMode.Exclusive))
                {
                    pin.SetDriveMode(GpioPinDriveMode.Input);

                    Stopwatch sw = Stopwatch.StartNew();
                    long elapsedMicrons = 0;
                    int[] states = new int[67];
                    int[] durations = new int[67];
                    uint changeCount = 0;
                    bool lockPassed = false;
                    bool isLock = false;

                    pin.ValueChanged += (GpioPin sender, GpioPinValueChangedEventArgs args) =>
                    {
                        elapsedMicrons = sw.ElapsedTicks / 10;
                        sw.Restart();

                        //Debug.WriteLine(elapsedMicrons);

                        if (elapsedMicrons > 25000 && !lockPassed && !isLock)
                        {
                            //X10 lock started
                            changeCount = 0;
                            durations[changeCount++] = (int)elapsedMicrons;
                            isLock = true;
                            Debug.WriteLine("Lock Started");
                            Debug.WriteLine("");
                        }
                        else if (isLock)
                        {
                            if (changeCount >= durations.Length)
                            {
                                isLock = false;
                                changeCount = 0;
                                Debug.WriteLine("===============================");
                                for (int i = 0; i < durations.Length; i++)
                                {
                                    Debug.Write(durations[i++]);
                                    Debug.Write(" ");
                                }
                                Debug.WriteLine("");
                            }
                            else
                            {
                                durations[changeCount++] = (int)elapsedMicrons;
                            }
                        }
                    };
                }
            });
        }
EN

回答 1

Stack Overflow用户

发布于 2017-02-13 14:56:28

这里的

是我当前使用的代码,但是并没有调用ValueChanged事件。

此问题由using语句导致,C# "using“语句会导致调用Dispose()。这与Close()相同。一旦调用Dispose,它还会导致对象本身超出作用域。

为了安全起见,您可以将pin移出Sniff方法,如下所示:

代码语言:javascript
运行
复制
    private static GpioPin pin;
    public static void Sniff(uint gpioPinNumb)
    {
        Task.Run(() => {

                pin = GpioController.GetDefault().OpenPin((int)gpioPinNumb, GpioSharingMode.Exclusive);
                pin.SetDriveMode(GpioPinDriveMode.Input);

                    ...
                    ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42167634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档