首页 > 解决方案 > 为什么我的 Arduino 会无限发送消息?

问题描述

我不明白为什么我的 Arduino 会无限地向串行监视器发送相同的消息。

该项目的目标是监视和控制一种基本的切换算法,以便在一个特定分支中检测到故障时通过电力“电网”重新引导电力,从而最大限度地减少停电期间受影响的客户数量。这两个模块(每个模块都在“网格”中监控自己的分支)都不是设计为主或客户端。他们每个人都会收到完全相同的代码(“草图”)。谁最先发现故障,谁就会开始对话并开始重新分配电源的算法。

基本前提是让一个模块检测到故障并询问其邻居是否也有故障。如果没有,它会询问是否可以将电源从邻居的分支重定向到该模块的分支。故障检测模块将向相邻模块发送其最后已知的潮流信息。邻居将确定其“输电线路”是否可以处理增加的功率流,然后相应地重定向功率(通过继电器)。

但是,我无法通过第一条消息。一旦检测到“故障”,故障检测模块就会无限发送它的消息。我需要的是它发送一条消息,然后等待响应,然后做出相应的反应。

串行监视器消息显示

下面是代码的故障检测模块部分。

我是 Arduino 和 StackOverflow 的新手。如果我违反了社区的任何规范或准则,我深表歉意。但是,我找不到任何明确解决这个问题的论坛,并且没有一个“修复”解决了这个问题。

谢谢

int StatusPin = 13; //Assigns Pin 13 to be called "StatusPin"
int Relay = 12;     //Relay Signal Pin
int Feeder = 11;    //Feeder Control Switch Signal Pin
int readPin = A0;   //Assigns Pin A) to be called "readPin"
int msg = 0;        //Used for case declaration
//Default = 0
//Yes = 1
//No = 2
//Are You OK? = 3
//Switching Possible? = 4
int Pcheck = 0;       //Used for Power Calculation
float val = 0;        //Creates an empty variable to store future readings
float volts = 0;      //Same as above
char statTX = "Good"; //Current Status for this module

void setup() {
  char statTX = "Good"; //Default Status for this module
  pinMode(StatusPin, OUTPUT);
  pinMode(Relay, OUTPUT);
  pinMode(Feeder, OUTPUT);
  Serial.begin(9600);
}
  
void loop() {
  val = analogRead(readPin); //Stores the input value from the A0 pin into a variable
  volts = (val/1024)*5;      //Converts ADC reading to volts
  digitalWrite(Feeder, LOW); //Feeder Switch is Default OPEN

  if (val <= 676){
   digitalWrite(StatusPin, HIGH); //Green light status turns on when greater than 3.3V
   digitalWrite(Relay, HIGH); //Breaker switch is closed
  }

 //Transmission Code for Fault Detection Side
  else{
  statTX = "Fault";
  Serial.println("Fault");      //Sent Fault Status Message
  digitalWrite(Relay, LOW);     //Breaker switch is opened
  digitalWrite(StatusPin, LOW); //Green light status turns off when greater than 3.3V
  Serial.write(3);              //Send "Are You Okay?" message
  if (Serial.available() == 0){ //Creates a pause to wait for a response
  }
  else{
    msg = Serial.read();
      if (msg == 1) {
        statTX = "Isolated";           //Declares fault isolated
        Serial.println("Isolated");
        Serial.write(4);               //Send Message to Request Switch
        if (Serial.available() == 0){ //Creates a pause to wait for a response
        }
        else{
          msg = Serial.read();
           if (msg == 1){
              Serial.write(20);       //Sends tentative current draw
              if (Serial.available() == 0){
              }
              else {
                  msg = Serial.read();
                  if (msg == 1 && val < 676){
                  statTX = "SystemRestored";
                  Serial.println("SystemRestored");
                  digitalWrite(StatusPin, HIGH); //Green light status turns on when greater than 3.3V
                   }
              else {
                  statTX = "Failure";
                  Serial.println("Failure");
                   }
                }
           }
                else {
                  statTX = "Failure";
                  Serial.println("Failure");
                }
            }
          }
      }
  }

标签: arduinoserial-communicationserial-monitor

解决方案



推荐阅读