串行从C#APP向ardiuno发送数据

时间:2018-02-18 19:54:18

标签: c# arduino connection

我在发送数据(两个轨道位置)的应用程序中遇到问题,无法设置PWM频率和电压。我用arduino写了这个:

#include <PWM.h>
#include <Servo.h>
int led = 9;
int32_t frequency = 100;


void setup() 
    {
        InitTimersSafe();
        bool success = SetPinFrequencySafe(led, frequency);
    }


void loop() 
    {
        //pwmWrite(led, 124);
        int channel;
        int freq;
        int Pwm;
        pwmWrite(led, Pwm);
        channel = Serial.readStringUntil(':').toInt();

        if (channel = 1)
            {
                Pwm = Serial.readStringUntil('*').toInt();
                pwmWrite(led,Pwm);
            }
        else if (channel = 2)
            {
                freq = Serial.readStringUntil('*').toInt(); 
                frequency = freq;
                pwmWrite(led,Pwm);
            }
    }

我已经关注了数百万网站,搜索了一系列参考文献,但它仍无效。

C#app有连接(COM3),当我移动轨迹栏时,我看到数据传输。

C#代码:

        private void trackBar2_Scroll(object sender, EventArgs e)
        {
            string bar2 = trackBar2.Value.ToString();
            label2.Text = bar2;
            int freq = trackBar2.Value;
            //port.WriteLine(trackBar2.Value.ToString()); 
            SendFrequencyInfo(1, freq);  
        }

    private void SendFrequencyInfo(int frequency, int trackBar2Pos)
    {   

          string message = frequency.ToString() + ':' + trackBar2Pos.ToString() + '*';

        try
            {
                port.Write(message);

            }
        catch
            {

            }
    }

问题是: 如何通过串行连接(两个轨迹栏值)发送两个值来设置频率和PWM电压? 我错过了什么,我不是真的。 请帮帮我:)。

1 个答案:

答案 0 :(得分:0)

我认为,您应该重新考虑您的协议&#39;。每条消息都应该是一行。阅读整行并使用sscanf(http://forum.arduino.cc/index.php?topic=43247.0)从字符串中提取值。像sscanf(Serial.ReadLine(), "%d:%d", &channel, &frequency)这样的东西可以让你的逻辑变得更容易。检查sscanf是否返回2(解析了2个变量),如果设置了所有变量,则调用pwmWrite(..)

您还在C#SendMethod

中混合了参数