Программный сброс WDT HX711
Я использую следующий код, чтобы проверить, равно ли значение 0, например, нет ли весов, и если да, то он будет игнорировать это значение и ничего с ним не делать. Код работает правильно, но продолжает выводить следующее:
Мягкий сброс WDT
стек>>>
ctx: cont sp: 3ffffd70 конец: 3ffffc0 смещение: 01b0 3ffff20: 00000050 00000000 31310010 36323439 3ffff30: 00000000 00000000 00000010 00000001 3ffff40: 3ffee408 00000000 00000000 40202927 3ffff50: 4022dff2 a0000000 bf2cc404 3ffe84dc 3ffff60: 3ffee408 bf2cc404 3ffee408 40202962 3ffff70: 3ffeeb9c 40202c00 3ffee408 40202996
3ffff80: 3ffee448 bf2cc404 3ffee408 40202664 3ffff90: 3fffdad0 fffe2d7e 3ffee448 3ffee4b0 3fffffa0: 3fffdad0 00000000 3ffee480 40203848 3ffffb0: fefeffe fefeffe 3ffe8514 40100a41
<<
Если я удалю if(чтение < 0.01){, код будет работать нормально. Что может быть причиной этого?
#include "HX711.h"
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#define DOUT D3
#define CLK D2
const char* ssid = "Curtis";
const char* password = "password";
HX711 scale(DOUT, CLK);
float calibration_factor = -118470; //-7050 работал для моей установки с максимальным весом 440 фунтов
void joinwifi(){
WiFi.begin(ssid, password);
Serial.println();
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("success!");
Serial.print("IP Address is: ");
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(9600);
joinwifi();
Serial.println("HX711 calibration sketch");
Serial.println("Remove all weight from scale");
Serial.println("After readings begin, place known weight on scale");
Serial.println("Press + or a to increase calibration factor");
Serial.println("Press - or z to decrease calibration factor");
scale.set_scale();
scale.tare(); //Сбрасываем масштаб до 0
long zero_factor = scale.read_average(); //Получаем базовые показания
Serial.print("Zero factor: "); //Это можно использовать для устранения необходимости тарирования весов. Полезно в проектах постоянного масштаба.
Serial.println(zero_factor);
}
void loop() {
while (WiFi.status() == WL_CONNECTED)
{
scale.set_scale(calibration_factor); //Настроиться на этот калибровочный коэффициент
float reading = scale.get_units(1);
if(reading < 0.01){
Serial.print("no need");
Serial.println();
}
else{
Serial.print("Reading: ");
Serial.print(reading);
Serial.print(" lbs"); //Измените это значение на кг и заново отрегулируйте калибровочный коэффициент, если вы, как здравомыслящий человек, следуете единицам СИ.
Serial.print(" calibration_factor: ");
Serial.print(calibration_factor);
Serial.println();
if(Serial.available())
{
char temp = Serial.read();
if(temp == '+' || temp == 'a')
calibration_factor += 10;
else if(temp == '-' || temp == 'z')
calibration_factor -= 10;
}
}
}
while (WiFi.status() != WL_CONNECTED)
{
joinwifi();
}
}
@Curtis Boylan, 👍0
1 ответ
Лучший ответ:
Потому что весь ваш код выполняется в режиме while
внутри вашего цикла (который является избыточным — циклы Loop(), отсюда и его название), и у вас нет задержек или yield()
, вы не даете сторожевому таймеру того толчка, который необходим ему, чтобы остаться в живых.
Либо удалите операторы while и превратите их в if, либо добавьте вызовы yeild()
внутри циклов while
.
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Могу ли я использовать выход 3,3 В Arduino напрямую к esp8266?
- Варианты протокола для обмена данными между Arduino и ESP8266
- Сдвиг уровня 5В <-> 3,3В
- Не удается загрузить скетчи или прошить Nodemcu 1.0 12E (CP2102), но у него есть драйверы и он реагирует на RST на последовательном мониторе
- Разбор сообщений с сервера MQTT
- Проблемы с IP-адресом esp8266
- Использование ESP8266 с Arduino Uno - не удается заставить AT-команду работать
@CurtisBoylan, если это решит проблему, примите ответ Маженко как решение., @romkey