Skip to content

Weird characters shows randomly in serial #1626

@arminsalcin

Description

@arminsalcin

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);
}

screen shot 2018-07-12 at 1 52 49 pm

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions