如何在Arduino C#中读取2个不同的传感器

问题描述

我正在尝试使用PIR传感器(检测到运动时发送邮件)和VL53l0X传感器将数据发送到C#接口,但是无法在Interface中正确分离数据。 VL53L0X仅读取一次数据。我想连续读取数据。 任何人都可以帮助我解决这个问题。谢谢


#include <VL53L0X.h>

#include <Wire.h>

VL53L0X sensor;

#define PIR 2   
bool durum = 0;


void setup() {
pinMode(PIR,INPUT);             
Serial.begin(9600);           
attachInterrupt(0,hareket,RISING); 
Wire.begin();

sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1) {}
}
sensor.startContinuous();

}
void loop() {
Serial.print(sensor.readRangeContinuousMillimeters());

if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

Serial.println();

}

 void hareket()
{
durum = digitalRead(PIR);   //Sensör durumu oku
Serial.print("/");
Serial.println(durum);      //Sensör durumunu gönder
Serial.print("/");
delay(100);
 }

     private void serialPort1_DataReceived(object sender,SerialDataReceivedEventArgs e)
          {
        
           data = serialPort1.ReadLine();
           this.Invoke(new EventHandler(displayData_event));
          
           SmtpClient SmtpServer = new SmtpClient();
           SmtpServer.Credentials = new NetworkCredential(); 
           SmtpServer.Port = 587;                             
           SmtpServer.Host = "smtp.gmail.com";                
           SmtpServer.EnableSsl = true;                        
           MailMessage mail = new MailMessage();
           mail.To.Add("");           
           mail.From = new MailAddress("","Arduino - PIR "); 
           mail.Subject = "Hareket Algılandı!";     
           mail.Body = "Ortamda hareket algılandı!";
           SmtpServer.Send(mail);  
                                   
           Control.CheckForIllegalCrossthreadCalls = false;
          
    }

   private void displayData_event(object sender,EventArgs e)
    {

        label16.Text = data;
 
    }

解决方法

ISR处理程序hareket会阻止其他ISR处理程序,例如,一个用于millis()以及delay()的处理程序。

ISR处理程序应尽可能短,以免丢失中断。

常见的解决方案是设置标志变量(必须是易失的)并在主循环中对其进行处理

如注释中所述,序列号似乎还不错(“尽可能短”规则除外)。它在2014年已修复(我们必须希望所有主板/备用内核都使用该固定代码)。