wpf Arduino / C#水分和湿度项目[已关闭]

8zzbczxx  于 2023-02-05  发布在  C#
关注(0)|答案(1)|浏览(168)

编辑问题以包含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#做出决定。

hfwmuf9z

hfwmuf9z1#

也许Serial.read()返回一个int,不能正确地与"A""B"进行比较?

相关问题