C#串行接收限制

C#串行接收限制,c#,winforms,visual-studio,arduino,serial-port,C#,Winforms,Visual Studio,Arduino,Serial Port,我正在做一个项目,我需要能够在C#和Arduino之间进行沟通。我遇到了一个问题,当从Arduino接收到数据时,我需要能够在c#中启动计时器,然后如果计时器耗尽,它会触发继电器关闭电源。代码看起来像这样 阿杜伊诺 char incoming_char=0; #define RECEIVER_PIN A0 #define THRESHOLD 80 void setup() { Serial.begin(9600); //for debug pinMode(13, OUTPUT); }

我正在做一个项目,我需要能够在C#和Arduino之间进行沟通。我遇到了一个问题,当从Arduino接收到数据时,我需要能够在c#中启动计时器,然后如果计时器耗尽,它会触发继电器关闭电源。代码看起来像这样

阿杜伊诺

char incoming_char=0;
#define RECEIVER_PIN A0
#define THRESHOLD 80

void setup() {
  Serial.begin(9600); //for debug
  pinMode(13, OUTPUT);
}

void loop() {
  incoming_char=Serial.read();
  // read the input on RECEIVER_PIN
  int sensorValue = analogRead(RECEIVER_PIN);
  if( sensorValue > THRESHOLD ) {
    Serial.print("A");  //Send a letter back to VS
    }
}
C#


现在,当激光被触发时,它只是不断地向我们发送数据,直到项目通过。我希望能够做的是,只对从Arduino发送到VS的第一个字符执行操作,然后忽略所有其他输入,直到计时器再次禁用。是否仍要执行此操作?

Arduino\u DataReceived是一个事件处理程序。为了让它做任何事情,必须订阅活动。在设置代码的某个地方,有一行代码如下:

ArduinoSerial.DataReceived += ArduinoSerial_DataReceived;
ArduinoSerial.DataReceived -= ArduinoSerial_DataReceived;
如果要在禁用计时器之前忽略此数据,则在说出“We GOT data!”后,可以立即添加一行,如:

ArduinoSerial.DataReceived += ArduinoSerial_DataReceived;
ArduinoSerial.DataReceived -= ArduinoSerial_DataReceived;
然后,一旦您准备好再次开始接收,您就可以再次订阅


另一种方法是在忽略输入时使用类级布尔值来标记。将所有c#代码包装成类似于
if(!ignering){}
的格式,并在该块内将
ignering
设置为true,以便忽略所有后续调用。当您准备再次开始响应时,只需将
忽略
设置回false即可。

Arduino\u DataReceived是一个事件处理程序。为了让它做任何事情,必须订阅活动。在设置代码的某个地方,有一行代码如下:

ArduinoSerial.DataReceived += ArduinoSerial_DataReceived;
ArduinoSerial.DataReceived -= ArduinoSerial_DataReceived;
如果要在禁用计时器之前忽略此数据,则在说出“We GOT data!”后,可以立即添加一行,如:

ArduinoSerial.DataReceived += ArduinoSerial_DataReceived;
ArduinoSerial.DataReceived -= ArduinoSerial_DataReceived;
然后,一旦您准备好再次开始接收,您就可以再次订阅


另一种方法是在忽略输入时使用类级布尔值来标记。将所有c#代码包装成类似于
if(!ignering){}
的格式,并在该块内将
ignering
设置为true,以便忽略所有后续调用。当您准备再次开始响应时,只需将“忽略”设置回false即可。

您可以向arduino固件添加代码,等待模拟信号降至阈值以下,可能会出现滞后现象,然后再允许再次发送数据。 Ie当阈值跳变为真或1时,添加一个跳变变量。检查阈值时检查此值:

if( tripped == 0 && sensorValue > THRESHOLD ) 
{
    tripped = 1;
    //send A to serial port
}
else if( sensorValue < THRESHOLD - hysteresis )
{
    tripped = 0; 
} 
if(跳闸==0&&sensorValue>THRESHOLD)
{
跳闸=1;
//向串行端口发送数据
}
else if(传感器值<阈值-滞后)
{
跳闸=0;
} 

您可以向arduino固件添加代码,等待模拟信号降至阈值以下,可能会出现滞后,然后再允许再次发送数据。 Ie当阈值跳变为真或1时,添加一个跳变变量。检查阈值时检查此值:

if( tripped == 0 && sensorValue > THRESHOLD ) 
{
    tripped = 1;
    //send A to serial port
}
else if( sensorValue < THRESHOLD - hysteresis )
{
    tripped = 0; 
} 
if(跳闸==0&&sensorValue>THRESHOLD)
{
跳闸=1;
//向串行端口发送数据
}
else if(传感器值<阈值-滞后)
{
跳闸=0;
}