Hello, this is my first post here. I am new to programming and micro controllers and look forward to learning. Until now I have always done things the hardware way. Anyway, I have a question about a digital clock sketch I am trying. The problem is that the minutes advance every 40 seconds. I am sending a clock signal of 256 Hz to pin 3. Bear with me, I know this code is nasty.
int mins_adjustPin = A0;
int hours_adjustPin = A1;
int clock_inPin = 3;
int _1Pin = 2;
int _2Pin = 4;
int _4Pin = 7;
int _8Pin = 8;
int select_mins_onesPin = A2;
int select_mins_tensPin = A3;
int select_hours_onesPin = A4;
int select_hours_tensPin = A5;
int clk_in = 0;
int readin;
int mins_ones;
int mins_tens;
int hours_ones;
int hours_tens;
unsigned char seconds = 0;
unsigned char mins = 0;
unsigned char hours = 0;
int mins_increase = 0;
int hours_increase = 0;
void display_time () {
mins_ones = mins % 10;
if (mins >= 10) {
mins_tens = mins / 10 ;
}
else {
mins_tens = 0;
}
hours_ones = hours % 10;
if (hours >= 10) {
hours_tens = hours / 10 ;
}
else {
hours_tens = 0;
}
digitalWrite(select_mins_onesPin, HIGH);
digitalWrite(_8Pin, HIGH && (mins_ones & B00001000));
digitalWrite(_4Pin, HIGH && (mins_ones & B00000100));
digitalWrite(_2Pin, HIGH && (mins_ones & B00000010));
digitalWrite(_1Pin, HIGH && (mins_ones & B00000001));
delay(1);
digitalWrite(select_mins_onesPin, LOW);
digitalWrite(select_mins_tensPin, HIGH);
digitalWrite(_8Pin, HIGH && (mins_tens & B00001000));
digitalWrite(_4Pin, HIGH && (mins_tens & B00000100));
digitalWrite(_2Pin, HIGH && (mins_tens & B00000010));
digitalWrite(_1Pin, HIGH && (mins_tens & B00000001));
delay(1);
digitalWrite(select_mins_tensPin, LOW);
digitalWrite(select_hours_onesPin, HIGH);
digitalWrite(_8Pin, HIGH && (hours_ones & B00001000));
digitalWrite(_4Pin, HIGH && (hours_ones & B00000100));
digitalWrite(_2Pin, HIGH && (hours_ones & B00000010));
digitalWrite(_1Pin, HIGH && (hours_ones & B00000001));
delay(1);
digitalWrite(select_hours_onesPin, LOW);
digitalWrite(select_hours_tensPin, HIGH);
digitalWrite(_8Pin, HIGH && (hours_tens & B00001000));
digitalWrite(_4Pin, HIGH && (hours_tens & B00000100));
digitalWrite(_2Pin, HIGH && (hours_tens & B00000010));
digitalWrite(_1Pin, HIGH && (hours_tens & B00000001));
delay(1);
digitalWrite(select_hours_tensPin, LOW);
}
void setup () {
pinMode(clock_inPin, INPUT);
pinMode(_1Pin, OUTPUT);
pinMode(_2Pin, OUTPUT);
pinMode(_4Pin, OUTPUT);
pinMode(_8Pin, OUTPUT);
pinMode(select_mins_onesPin, OUTPUT);
pinMode(select_mins_tensPin, OUTPUT);
pinMode(select_hours_onesPin, OUTPUT);
pinMode(select_hours_tensPin, OUTPUT);
attachInterrupt( 1, Tick, RISING );
}
void loop () {
display_time();
set_time ();
Tick();
}
void Tick () {
clk_in = clk_in + 1;
if (clk_in > 256) {
seconds = seconds + 1;
clk_in = 0;
}
if (seconds > 59) {
mins = mins + 1;
seconds = 0;
}
if (mins > 59) {
hours = hours + 1;
mins = 0;
}
if (hours > 12) {
hours = 1;
}
}
void set_time () {
pinMode(mins_adjustPin, INPUT);
pinMode(hours_adjustPin, INPUT);
mins_increase = digitalRead(mins_adjustPin);
hours_increase = digitalRead(hours_adjustPin);
if (mins_increase == LOW) {
delay(200);
mins = mins + 1;
seconds = 0;
}
if (hours_increase == LOW) {
delay(200);
hours = hours + 1;
seconds = 0;
}
display_time();
}