首页 > 解决方案 > 如何从arduino检索值到asp.net

问题描述

我无法将值从 arduino 检索到 asp.net 中的变量,然后将其返回到正在执行返回视图的图表中。

图表全部完成,我想做的是从恒温器中获取值并将它们添加到图表中

检索值代码(可能是错误的)

void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            float c1 = 1.009249522e-03f, c2 = 2.378405444e-04f, c3 = 2.019202697e-07f;
            float R1 = 10000f;

            SerialPort port;
            string data = string.Empty;

            port = (SerialPort)sender;

            // read the data from the port                                                 
            data = port.ReadExisting();

            // print Arduino data to the screen                                            
            int V0 = Int32.Parse(data);
            double R2 = R1;
            double logR2 = (double)Math.Log(R2);
            double T = (1f / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));

            Tc = T - 273.15f;
            float Tf = (Tc * 9f) / 5f + 32f;
            // you could work with Tc and Tf if you want, (stok data or other)                                              
        }

Arduino代码

    int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() {
Serial.begin(9600);
}

void loop() {

  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  Tc = T - 273.15;
  Tf = (Tc * 9.0)/ 5.0 + 32.0; 

  Serial.print("Temperature: "); 
  Serial.print(Tf);
  Serial.print(" F; ");
  Serial.print(Tc);
  Serial.println(" C");   

  delay(500);
}

标签: c#asp.netvisual-studioarduino

解决方案


我建议你试试这样:

1.Arduino代码:

loop{
  Vo = analogRead(ThermistorPin);
  Serial.println(Vo);   
  delay(500);
}

2.然后用Arduino软件的Serial Monitor检查,应该看到Vo每0.5秒更新一次。

3.在C#程序中,在表单中添加一个TextBox(这是为了测试,把它变大,命名为txtInData)。

4.然后试试下面的C#代码,

    public Form1()
    {
        InitializeComponent();
        serialPort.Open();
    }
    void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        try
        {
            String data = serialPort.ReadExisting();
            CheckForIllegalCrossThreadCalls = false;
            txtInData.Text += data;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Serial Port Read Error: " + ex.ToString(), "Error");
        }
    }

5.运行C#程序,检查是否有与步骤2类似的结果。如果没有,请尝试添加serialPort.DataReceived += serialPort_DataReceived;serialPort.Open();

6.您现在应该可以解析传入的数据了。您仍然可以使用 TextBox 来检查您的计算结果。不再需要时删除 TextBox。

希望有帮助!


推荐阅读