почему это неожиданное поведение проявляется, когда я использую следующий код для отправки данных с ультразвукового датчика расстояния в firebase

esp8266 wifi nodemcu ultrasonics

Я использую Wi-Fi-модуль NodeMCU esp8266 для отправки данных, полученных ультразвуковым датчиком расстояния, на пожарную базу. вот мой код:

#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

//Firebase settings
#define FIREBASE_HOST "dis3333333333333333aseio.com"
#define FIREBASE_AUTH "Lb21333333333333333333v6HzPatg1HA"

//Wi-Fi settings
#define WIFI_SSID "hello"
#define WIFI_PASSWORD "123456789"

//Define trigger and echo digital pins
const int trigPin = 5;
const int echoPin = 4;

// The amount of time the ultrassonic wave will be travelling for
long duration = 0;
// Define the distance variable
double distance = 0;
double cm=0;
double statusTemp=0;
int temp=0;
unsigned long time_now=0 ;
unsigned long time_prev=0 ;
String stringOne="consump/day";
String stringTwo;


void setup()
{

    Serial.begin(9600);
    // Connect to Wi-Fi
    Serial.print("Wi-Fi...");
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    Serial.print("Connecting...");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(500);
    }
    Serial.println();
    Serial.print("Connected to: ");
    Serial.println(WiFi.localIP());

    Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);

    // Ultrasonic sensor, set echo as Input and trigger as Output




}

void loop()
{

    getDistance();
    time_now = millis();

    Serial.print("Distance: ");
    Serial.println(distance);

    delay(500);
}

void getDistance()
{
    pinMode(trigPin, OUTPUT);
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    pinMode(echoPin, INPUT);
    Serial.print("Time: ");
    Serial.println(time_now);
    if(statusTemp==0){
      time_prev=time_now;
      statusTemp=1;
      Serial.println("Hello");
    }
    if(statusTemp==1)
    {
      if((time_now - time_prev)> 10000){
        statusTemp=0;
        stringTwo=stringOne+temp;
        Serial.print(stringTwo);
        Firebase.setFloat(stringTwo, distance);
        temp++;
        Serial.print(temp);    
      }
        duration = pulseIn(echoPin, HIGH);

        distance = duration * 0.034 / 2;
        Firebase.setFloat("distance", distance);
        if (Firebase.failed()) { 
        Serial.print("setting /number failed:"); 
        Serial.println(Firebase.error());   
        return;
    }
 }
}
long microsecondsToCentimeters(long microseconds) {
   return microseconds / 29 / 2;
}

Он работает совершенно нормально но через некоторое время появляется следующая вещь Происходит ли следующее из-за моего кода или что-то еще вызывает это?

, 👍1

Обсуждение

Похоже на какую-то проблему с памятью (из описаний подобных ошибок, найденных через Google). Вы используете " Строку`, что не очень хорошо. Читайте [запись в блоге Майенко](https://hackingmajenkoblog.wordpress.com/2016/02/04/the-evils-of-arduino-strings/) о зле струн Arduino. Попробуйте вместо этого использовать массивы char (также называемые C-строками). Если это сработает, я напишу полный ответ., @chrisl

вы пробовали декодер исключений? он должен сообщить вам строку кода, которая выходит из строя., @dandavis