【问题标题】:Set up loop keeps looping (Adurino)设置循环不断循环(Arduino)
【发布时间】:2021-06-15 10:01:40
【问题描述】:

我目前正在对 Arduino 中的温度和湿度项目代码进行故障排除。 void setup()中有一行,Serial.println("Feather LoRa TX Test!");,一直弹出。我理想的代码是在输出中运行该特定行一次,就是这样。但是,当前代码不断重复该行,一次又一次。我可以知道如何纠正这个问题(整个代码如下)?提前致谢!!

#include <RH_RF95.h>
#include <DHT.h>

#define DHTPIN 7     // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

#define RFM95_CS 10
#define RFM95_RST 9
#define RFM95_INT 3

// Change to 434.0 or other frequency, must match RX's freq!

#define RF95_FREQ 915.0
 
// Singleton instance of the radio driver
RH_RF95 rf95(RFM95_CS, RFM95_INT);

int node = 3; // to change based on node deployment
 
void setup() 
{
  pinMode(RFM95_RST, OUTPUT);
  digitalWrite(RFM95_RST, HIGH);
  
  while (!Serial);
  Serial.begin(9600);
  delay(100);

  Serial.println("Feather LoRa TX Test!");
  
  digitalWrite(RFM95_RST, LOW);
  delay(100);
  digitalWrite(RFM95_RST, HIGH);
  delay(100);
 
  while (!rf95.init()) {
    Serial.println("LoRa radio init failed");
    while (1);
  }
  Serial.println("LoRa radio init OK!");
 
  // Defaults after init are 434.0MHz, modulation GFSK_Rb250Fd250, +13dbM

  if (!rf95.setFrequency(RF95_FREQ)) {
    Serial.println("setFrequency failed");
    while (1);
  }
  Serial.print("Set Freq to: "); Serial.println(RF95_FREQ);
  dht.begin();
  rf95.setTxPower(23, false);
  
}
 
void loop()
{
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    delay(1000);
    return;
  }

  String d = "{\"Node\":"+ String (node) +",";
  d += "\"Temp\":"+ String (t)+",";
  d += "\"Hum\":"+ String (h);
  d += "} "; // Add a trailing space is necessary

  Serial.println("Transmitting..."); 
 
  char data[d.length()];
  d.toCharArray(data,d.length());
  Serial.println(d);
  rf95.send((uint8_t*)data, sizeof(data));
 
  Serial.println("Waiting for packet to complete..."); 
  delay(1000);
  rf95.waitPacketSent();
  Serial.println(" complete...");

  delay(57000); // delay 1 minute

}

【问题讨论】:

  • 如果您没有看到其他 printf 消息,您的 Arduino 会重置。可能您的 digitalWrite 操作没有达到您的预期。查看其他 printf 行,如果您想在 StackOverflow 上获得答案,请提供这些额外的详细信息。

标签: c++ arduino arduino-uno


【解决方案1】:

在进行任何初始化之前,您有一个无限循环。这将被检测到,因为 Arduino 有一个看门狗定时器,系统将重置。

并且在重置时再次调用setup,然后您再次进入无限循环。

它是关于循环的:

while (!Serial);

您必须在该循环之前调用Serial.begin(...)

Serial.begin(9600);
while (!Serial);

【讨论】:

    【解决方案2】:

    在代码到达loop 函数之前,有些东西正在重置您的 MCU。因此setup 函数会一次又一次地执行。您可以在两行之间添加更多打印消息,这样您就知道它在哪里中断了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多