Pro Micro - 3.3V/8MHz Steady TX LED problem

Hi Sparfun team,

I built a controller for 3 AC switching board.

I have problem that, the system stuck and steady lit TX LED (Green) after 3- 4 days after uploading the program.

the switching not working after that. I don’t know why this happen every 3-4 days. what is this meaning when the green LED steady lit

Is it mean the memory is full or there is other problem in my programming code. I put below all picture and program details.

I used below parts.

1 X Pro Micro 3.3V/8MHz

1 X Quad Relay

1 X Humidity and Temp Sensor Si7021

1 X SparkFun Power Supply Stick - 5V/3.3V

diagram of the circuit:

Photo showing the TX-LED lit:

//3_AC_controller_V2.5

// in this program the sensor BME280 rplaced with Sparfun Si7021.
// BME280 library kept for future use.
#include <SparkFun_Si7021_Breakout_Library.h>

#include <Wire.h>
#include "SparkFun_Qwiic_Relay.h"

//Create Instance of HTU21D or SI7021 temp and humidity sensor and MPL3115A2 barrometric sensor
Weather sensor;

#define RELAY_ADDR 0x6D
Qwiic_Relay quadRelay(RELAY_ADDR);

float TEMP_SP1= 19.8; // Temp set point Low 19.8
float TEMP_SP2= 21.8; // Temp set point Low 21.8
float TEMPcal=0.45; //calibration TEMP sensor.
float TEMP=0;

unsigned long RUN_T1 = 0; // run time for relay 1
unsigned long RUN_T2 = 0;
unsigned long RUN_T3 = 0;

unsigned long  DLY_T5= 300000; // before 300000
unsigned int  TH= 1000;


unsigned int  RUN_D1= 36; // duration running 3 hurs use 750
unsigned int  R=0;


void setup() {
  Serial.begin(9600);
  Serial.println("3_AC_Controller_V2.3...");
  delay(500);



//////////////////////////////////
/////  Setup for Quad Relay /////
//////////////////////////////////
    
Wire.begin(); 


  if(!quadRelay.begin())
    Serial.println("Check connections to Qwiic Relay.");
  else
  
    Serial.println("Ready to flip some switches.");

    //Use internal resitors to keep them in a known high state. 
  
    //Initialize the I2C sensor Si7021 and ping them
    sensor.begin();
    Serial.println("Initialize the I2C sensor Si7021 ...");

}



void loop() {
delay(4000);

Serial.println(RUN_D1);

Serial.println(R);
  
TEMP = sensor.getTemp();
Serial.print("Temp actual= ");
Serial.println(TEMP);
TEMP=TEMP-TEMPcal;
Serial.println(TEMP);


while (TEMP >= TEMP_SP1){
  
  quadRelay.turnRelayOn(1);
  delay(400);
  quadRelay.turnRelayOn(2);
  delay(400);
  quadRelay.turnRelayOn(3);
  Serial.println("High Temp ALL ON... ");
  Serial.print("Tempreture ");
  Serial.println(TEMP);
  
  delay(DLY_T5);

  RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;

  Serial.println("High Temp ALL ON... ");
  Serial.print("Tempreture ");
  Serial.println(TEMP);
  
  delay(DLY_T5);

  RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;

  Serial.println("High Temp ALL ON... ");
  Serial.print("Tempreture ");
  Serial.println(TEMP);
  
  delay(DLY_T5);

  RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
}




while (TEMP<= TEMP_SP1) {
  
  if (R<(RUN_D1/3) && R>=0){
    
Serial.print("step1  ");
  
  quadRelay.turnRelayOn(1);
  delay(400);
  quadRelay.turnRelayOn(2);
  delay(400);
  quadRelay.turnRelayOff(3);
  delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T1=RUN_T1+(DLY_T5/60000);// before 60000
  RUN_T2=RUN_T2+(DLY_T5/60000);
  
  Serial.print("Tempreture1  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);


delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T1=RUN_T1+(DLY_T5/60000);// before 60000
  RUN_T2=RUN_T2+(DLY_T5/60000);
  
  Serial.print("Tempreture1  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);


delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T1=RUN_T1+(DLY_T5/60000);// before 60000
  RUN_T2=RUN_T2+(DLY_T5/60000);
  
  Serial.print("Tempreture1  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);

     
  }

  if (R<2*(RUN_D1/3)&& R>=(RUN_D1/3)){

    Serial.print("step2 ****  ");
    
  quadRelay.turnRelayOn(1);
  delay(400);
  quadRelay.turnRelayOn(3);
  delay(400);
  quadRelay.turnRelayOff(2);
  delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
   RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);

delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
   RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);


delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
   RUN_T1=RUN_T1+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);

  }
     
  if (R<RUN_D1 && R>=2*(RUN_D1/3)){
    Serial.print("step3    ///\\\\  ");
    
  quadRelay.turnRelayOn(2);
  delay(400);
  quadRelay.turnRelayOn(3);
  delay(400);
  quadRelay.turnRelayOff(1);
  delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);


delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);


delay(DLY_T5);
  R=R+1;
  TEMP = sensor.getTemp();
  Serial.print("Temp actual= ");
  Serial.println(TEMP);
  TEMP=TEMP-TEMPcal;
  
  
  RUN_T2=RUN_T2+(DLY_T5/60000);
  RUN_T3=RUN_T3+(DLY_T5/60000);
  
  Serial.print("Tempreture  ");
  Serial.print(TEMP);
  Serial.print("\t");
  Serial.print("R  = ");
  Serial.println(R);

  Serial.print("RUN_T1= ");
  Serial.print(RUN_T1);
  Serial.print("\t");

  Serial.print("RUN_T2= ");
  Serial.print(RUN_T2);
  Serial.print("\t");

  
  Serial.print("RUN_T3= ");
  Serial.println(RUN_T3);

  }

  if(R>=RUN_D1){
 
  Serial.println("**********  ");
  Serial.print("R  = ");
  Serial.print(R); 
  Serial.print("\t");
  R=0;
   Serial.println(R);
  



  }

if (RUN_T1 >=99999){
RUN_T1 = 0; 
 
}

if (RUN_T2 >= 99999){
  RUN_T2=0;
}

if( RUN_T3 >=99999){
  
}



  
  }
  
}

Just as a caution: since this is a custom project with custom code it becomes difficult to support all errors you might see. That being said, I can try to help but I can’t make any guarantees.

On the surface, the green LED is the RX LED. Something is keeping that pin (line) driven logic HIGH. I’m not sure if it’s a memory issue or something gets caught hanging in the logic. Does the behavior repeat itself consistently? Do you have any error statements to catch unwanted behavior?