-
Notifications
You must be signed in to change notification settings - Fork 7.8k
Description
Hardware:
Board: Nodemcu v1.1
Core Installation/update date: 9/jul/2018
IDE name: Arduino IDE
Flash Frequency: 80Mhz
Upload Speed: 921600
Description:
I use esp32 that runs relays via shift register(74hc595) relays runs AC load , so i made a rtos software , and i have problem that run randomly so in middle or start of program i get randomly characters on serial and software freeze , and characters just keep writing in serial . Only way i can repair it is to press reset button manually but it comes again in some time . Can it be cause i power 74hc595 with 5v and controll it with esp32 wich is 3.3v ?, but all pins is output in that case.
I tried other esp32 module /no success
I tried also to put all tasks on one core / no success
I tried raw code just to turn on and off relays / no success still problem
Sketch:
#include <farma.h>
Farma farma ;
TaskHandle_t CheckWaterLevelTask , WaterPumpTask;
void setup() {
Serial.begin(115200);
delay(10);
farma.shiftInit();
Wire.begin();
farma.wifiStart();
delay(500);
farma.mqttStart();
delay(500);
SPIFFS.begin(true);
delay(500);
farma.checkConfigFiles();
delay(500);
farma.setupPins();
//set starting states
farma.turnOffConditioner();
farma.exe = true;
delay(300);
//turn permamently air pump
//
//delay(10);
//pinMode(levelPin1, INPUT_PULLUP);
//attachInterrupt(digitalPinToInterrupt(levelPin1), handleInterrupt, FALLING);
xTaskCreatePinnedToCore(suspendTask, "SuspendTask", 7000, NULL, 1, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(mqttLoop, "MqttLoopTask", 10000, NULL, 2, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(testLoop, "TestTask", 7000, NULL, 2, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(sendReadings, "SendReadingsTask", 10000, NULL, 2, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(controlFan, "FanTask", 7000, NULL, 1, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(controlWaterLevel, "CheckWaterLevelTask", 5000, NULL, 3, &CheckWaterLevelTask, 1);
delay(500);
xTaskCreatePinnedToCore(controlPump, "WaterPumpTask", 7000, NULL, 2, &WaterPumpTask, 1);
delay(500);
xTaskCreatePinnedToCore(controlWaterTemp, "WaterTempTask", 5000, NULL, 1, NULL, 1);
delay(500);
xTaskCreatePinnedToCore(controlLight, "LightTask", 5000, NULL, 2, NULL, 1);
delay(500);
}
void loop() {
farma.klimaLoop();
}
void testLoop( void * parameter )
{
for (;;) {
// Serial.println( farma.readWaterTemp());
vTaskDelay(5000 / portTICK_PERIOD_MS);
}
}
void mqttLoop( void * parameter )
{
for (;;) {
farma.mqttLoop();
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
void sendReadings( void * parameter )
{
for (;;) {
farma.sendReadings();
vTaskDelay( (120 * 1000) / portTICK_PERIOD_MS);
}
}
void controlPump( void * parameter )
{
for (;;) {
farma.ctrlPort(1, 1);
Serial.println("on pumpa");
vTaskDelay((farma.Setpoint.pumpDuration * 1000) / portTICK_PERIOD_MS); //farma.Setpoint.pumpDuration * 1000
farma.ctrlPort(1, 0);
Serial.println("off pumpa");
vTaskDelay((farma.Setpoint.pumpDelay * 1000) / portTICK_PERIOD_MS); //farma.Setpoint.pumpDelay
}
}
void controlWaterTemp(void * parameter )
{
for (;;) {
farma.waterTempLoop();
vTaskDelay((60 * 1000) / portTICK_PERIOD_MS);
}
}
void controlLight( void * parameter )
{
for (;;) {
farma.ctrlPort(6, 1);
Serial.println("on light");
vTaskDelay((farma.Setpoint.ledTimeOn * 1000) / portTICK_PERIOD_MS); //farma.Setpoint.ledTimeOn
farma.ctrlPort(6, 0);
Serial.println("off light");
vTaskDelay((farma.Setpoint.ledTimeOff * 1000) / portTICK_PERIOD_MS); //farma.Setpoint.ledTimeOff
}
}
void controlFan(void * parameter)
{
for (;;) {
farma.ctrlPort(2, 1);
farma.ctrlPort(4, 1);
Serial.println("on fan");
vTaskDelay((43200 * 1000) / portTICK_PERIOD_MS);
farma.ctrlPort(2, 0);
Serial.println("off fan");
vTaskDelay((43200 * 1000) / portTICK_PERIOD_MS);
}
}
void controlWaterLevel(void * parameter)
{
for (;;) {
if (digitalRead(levelPin1) == 1) {
farma.ctrlPort(7, 1);
Serial.println("Water is filling");
}
vTaskDelay((86400 * 1000) / portTICK_PERIOD_MS);
}
}
void suspendTask(void * parameter)
{
for (;;) {
// Serial.println("suspend task");
//Serial.println(farma.suspendPump);
if (farma.suspendPump == 1 && farma.suspendFlag == true) {
farma.ctrlPort(1, 0);
vTaskSuspend(WaterPumpTask);
Serial.println("Task suspended");
farma.suspendFlag = false;
}
else if (farma.suspendPump == 0 && farma.suspendFlag == false) {
vTaskResume(WaterPumpTask);
farma.suspendFlag = true;
}
vTaskDelay(6000 / portTICK_PERIOD_MS);
}
}
static void handleInterrupt()
{
farma.ctrlPort(7, 0);
}