i am new with arduino and i need to make a digital clock.I found next programm and I've got a problem with it.
This is the programm:
#include "Wire.h"
#include "LiquidCrystal.h"
const int backlight=13;
const int buttonHr=7;//pin folosit la ajustarea orei
const int buttonMin=8;//pin folosit la ajustarea minutelor
int secs =0;
int mins =0;
int hrs=0;
boolean isAM=true;
int milliDivsecs=1000;
int milliDivMins=60000;
int millidivHrs=36000;
unsigned long prevmillis=0;
int interval =1000;
LiquidCrystal lcd(0);
void setup() {
lcd.setBacklight(HIGH);
pinMode(buttonHr,INPUT);
pinMode(buttonMin,INPUT);
lcd.begin(16, 2);
lcd.setCursor(5,0);
lcd.print("00:00:00 AM");
Serial.begin(9600);
}
void loop() {
unsigned long currmillis=millis();
//detecteaza apasare buton
if(digitalRead(buttonHr)==HIGH)
{delay(25);
hrs=hrs+1;
updateHrs();
//actualizeaza AMPM la apasare buton
if(hrs==12)
{
updateAMPM();
}
delay(300);
}
if(digitalRead(buttonMin)==HIGH)
{
delay(25);
mins=mins+1;
//Serial.println(mins);
updateMin();
delay(300);
}
if(currmillis-prevmillis<999)
{
//lcd.clear();
prevmillis=currmillis;
//lcd.setCursor(0,1);
//lcd.print(currmillis);
if(secs<10)
{
lcd.setCursor(12,0);
lcd.print(secs);
lcd.setCursor(11,0);
lcd.print(0);
}
else
{
lcd.setCursor(11,0);
lcd.print(secs);
}
//obtine secunde de la timpul sistemului
secs=(millis()/milliDivsecs)%60; //da secundele din milisecunde
}
//afisare minute
if(secs ==60)
{
mins=mins+1;
updateMin();
}
}
//update functia min
//cheama update-ul functiei am pm si pe cel al functiei ora
void updateMin()
{
if(mins==59)
{
hrs=hrs+1;
updateHrs();//update ora
}
if(hrs==11 && mins>59)
{
updateAMPM();
}
if(mins>59)
{
mins =0; //reseteaza minutele
}
//lcd.setCursor(8,0);
//lcd.print("00");
if(mins<10)
{
lcd.setCursor(9,0);
lcd.print(mins);
lcd.setCursor(8,0);
lcd.print(0);
}
else
{
lcd.setCursor(8,0);
lcd.print(mins);
}
}
//update-ul functiei ora
void updateHrs()
{
//afisare ora-trebuie fixata petru am pm
if(hrs>12)
{
//resetare la 1
hrs=1;
}
if(hrs< 10)
{
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(6,0);
}
else
{
lcd.setCursor(5,0);
}
lcd.print(hrs);
}
void updateAMPM()
{
if (isAM)
{
isAM=false;
lcd.setCursor(14,0);
lcd.print("PM");
}
else
{
isAM=true;
lcd.setCursor(14,0);
lcd.print("AM");
}
}
On the lcd appears seconds ok but when seconds reaches 60,minutes instead 01(1 minutes) the lcd show 35 and i don't know why.
Please help !