Space in Lcd for no reason

Hi i am making a countdown timer and ther is for some reason space when i start to put a new time in after last time ended

here is the code



#include <LiquidCrystal.h>

#include <Keypad.h>


const byte ROWS = 4; // Four rows

const byte COLS = 4; // Three columns


long int set1;

long int set2;

long int set3;

long int set4;

long int j;


String hours;

String minutes;

String seconds;

// Define the Keymap


char keys[ROWS][COLS] = {


  {'1','2','3','A'},


  {'4','5','6','B'},


  {'7','8','9','C'},


  {'*','0','#','D'}


};

byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins

byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

 int t1, t2, t3, t4, t5, t6;

 int r1, r2, r3;

boolean feed = true; // condition for alarm

 char key;

 String r[8];

 void setFeedingTime()

{

  feed = true;

   int i=0;

  lcd.clear();

  lcd.setCursor(0,0);

  lcd.print("Set feeding Time");

  lcd.clear();

  lcd.print("HH:MM:SS");

  lcd.setCursor(0,1);

  while(1){

    key = kpd.getKey();

    char j;

  if(key!=NO_KEY){

    lcd.setCursor(j,1);

    lcd.print(key);

    r[i] = key-48;

    i++;

    j++;

    if (j==2 || j == 5)

    {

      lcd.print(":"); j++;

    }

    delay(500);

  }

  if (key == 'D')

  {key=0; break; }

  }

 lcd.clear();

}

 void setup() 

 { 

  lcd.begin(16,2);

  Serial.begin(9600);

  pinMode(A0, OUTPUT);

  pinMode(A1, OUTPUT);

  pinMode(A3, INPUT);

  pinMode(A4, OUTPUT);

 } 

 void loop() 

 { 

      lcd.setCursor(0,0);

      lcd.print("Arduino Timer");

      //Serial.println(A3);


      if (digitalRead(A3)==1) //

      {

      lcd.clear();

      setFeedingTime(); 

      for(int i = 0; i < 6; i++)  // this for loop is used to get the value of the feeding time and print it serially

      {

       Serial.print(r[i]);

       Serial.println();

      }  

   hours = String (r[0]) + String (r[1]) ; //combining two separate int values of r[0] and r[1] into one string and save it to "hours" 

   minutes = String (r[2]) + String (r[3]) ;  //combining two separate int values of r[2] and r[3] into one string and save it to "minutes" 

   seconds = String (r[4]) + String (r[5]) ;  //combining two separate int values of r[4] and r[5] into one string and save it to "seconds" 

  set1 = (hours.toInt()*3600); //converting hours into seconds

  set2 = (minutes.toInt() * 60);  //converting minutes into seconds

  set3 = seconds.toInt();

  set4 = (hours.toInt() * 3600)+ (minutes.toInt() * 60) + seconds.toInt(); //adding set1, set2 and set3 together in set4

  Serial.print("set4");

  Serial.print(set4);

  Serial.println();

  lcd.setCursor(0,0);

  lcd.print("Countdown begins");

  delay(1000);

  lcd.clear();

  for(long int j = set4; j >= 0; j--) // this for loopis used to decrease the total time in seconds

  {
 
 Serial.println(j);

  lcd.setCursor(0,0);

  lcd.print("HH:MM:SS");

  long int HH = j / 3600; // converting the remaining time into remaining hours

  lcd.setCursor(0,1);

  Serial.println(HH);

  if (HH < 10) { lcd.print('0');  }

  lcd.print(HH);

  lcd.print(":");
  
long int MM = (j - (HH*3600))/60 ; //converting the remaining time into remaining minutes

  lcd.setCursor(3,1);

  Serial.println(MM);

  if (MM < 10) { lcd.print('0');  }

  lcd.print(MM);

  lcd.print(":");

  

  long int SS = j - ((HH*3600)+(MM*60)); //converting the remaining time into remaining seconds

  lcd.setCursor(6,1);

  Serial.println(SS);

  if (SS < 10) { lcd.print('0');  } 

  lcd.print(SS);

  delay(1000);


  if (digitalRead(A3)==1){break;} 


   if (j == 0)

    

    {

      lcd.clear();

      lcd.setCursor(0,0);

      lcd.print("Timer Stop");

      lcd.setCursor(2,1);

      lcd.print("-Ring-Ring-");

      

    for(int k =0; k<= 1; k++) //this for loop is used for the buzzer to beep 100 time as the timer reaches zero

      {

        digitalWrite(A4,HIGH);

        delay(300);

        digitalWrite(A4,LOW);  

        delay(300); 

        if (digitalRead(A3)==1){break;}
        lcd.clear();  
 

      }

    }

   }

  }

} 

Verwende dieses Symbol um Code zu posten

[sterretje edit]
made image visible
[sterretje end]

Please use the code formatter so we can see the code more easily.
Screenshot 2024-12-18 101957
And Welcome to the Forum!

1 Like

Please edit your post to remove all the blank lines in the code, and add code tags.

2 Likes

i hope i fix it because i am new on this website

1 Like

Try reading this topic to learn the basics.

But for now, you did fix it.

1 Like

So, before you edited your post, you had this picture of your screen:


Is that "0" supposed to be underneath the "HH" part of the screen?

0 and after it other numbers

yeah

Unlike global variables, local variables are not automatically initialised to zero when they are created. So j could have any random value.

I should tell you that I saw several other problems in your code. For example, it will not "keep good time" meaning if you set a longer time and compare it to, for example, a countdown timer on your smartphone, you will see that your code takes longer to reach zero.

ok how can i fix it tho?

Fix what?

1 Like

I believe he want's this to be fixed along with the

That would be my guess.

I want to hear answer from @anisalenanis. It will help the forum understand their level of experience and ability.

i am not the best at coding

Not too good at answering questions, either.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.