- 已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
7天前关闭。
Improve this question
修正:在我的arduino代码中切换"with"修正了这个问题...
项目:从湿度传感器读取模拟值。当污垢干燥时,启用泵,否则禁用泵。值显示在我的C#程序中。
目前我正在尝试让我的项目在我的C#程序和Arduino之间读写数据,但是我确实有一个问题,我似乎不能从C#写到我的Arduino,或者至少我的值没有通过。
我有一个传感器连接到我的Arduino的A0做读数。这个值是在我的C#程序中通过. read()方法获得的。这是有效的。
当数值〈30时,我需要发送一个信号,这样泵就可以打开。一旦污垢足够湿,泵就应该关闭。
在我的C#中,我通过发送字母"A"来打开泵,发送字母"B"来关闭泵。
但是...什么都没发生。
Arduino代码:
int sensorPin = A0;
int pump = 8;
int sensorVal;
char mychar;
const int dry = 0; // Waarde bij droge aarde
const int wet = 750; // Waarde bij vochtige aarde
void setup() {
Serial.begin(9600);
pinMode(sensorPin,INPUT);
pinMode(pump,OUTPUT);
}
void loop() {
sensorVal = analogRead(sensorPin);
while (Serial.available()>0)
{
mychar = Serial.read();
}
if (mychar == "A")
{
digitalWrite(pump,HIGH);
delay(2000);
//digitalWrite(pump,LOW);
}
if (mychar == "B")
{
digitalWrite(pump,LOW);
delay(2000);
}
int percentage = map(sensorVal, wet, dry, 100, 0);
Serial.println(mychar);
Serial.println(percentage);
delay(500);
}
C#代码:
private void _SerPortArduino_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = _SerPortArduino.ReadLine().Trim();
if (data != "")
{
_Soilsensor.HumidityValue = Convert.ToInt32(data);
Dispatcher.Invoke(new Action<int>(UpdateLabel), _Soilsensor.HumidityValue); //Waarde inlezen via klasse...
}
else
{
Debug.WriteLine("Fout opgevangen");
}
}
private void UpdateLabel(int text)
{
int humValue = Convert.ToInt32(text);
lblhumidityValue.Content = text + " %";
if (humValue < 30)
{
lblPumpActive.Content = "Actief";
lblPumpActive.Foreground = new SolidColorBrush(Colors.Green);
_SerPortArduino.Write("A");
}
if (humValue > 30)
{
lblPumpActive.Content = "Inactief";
lblPumpActive.Foreground = new SolidColorBrush(Colors.Tomato);
_SerPortArduino.Write("B");
}
}
当我在Arduino IDE中执行IF语句时,程序在Arduino中工作,但这不是我的计划。我需要通过C#做出决定。
1条答案
按热度按时间hfwmuf9z1#
也许
Serial.read()
返回一个int
,不能正确地与"A"
或"B"
进行比较?