我在发送数据(两个轨道位置)的应用程序中遇到问题,无法设置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电压? 我错过了什么,我不是真的。 请帮帮我:)。
答案 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
中混合了参数