167
// turn an led on/off
168
void ledOn( int num, bool on )
170
if( num < 0 || num > 9 ) return;
172
// convert to pin no.
175
// pin 4 needs to be inverted (it's driving a PNP)
176
// NOTE: PIN 4 TEMPORARILY DISABLED
177
// if( num == 4 ) on = true;
178
if( num == 4 ) on = !on;
180
digitalWrite( num, on? HIGH : LOW );
163
184
// draw a segment for the test display
164
void drawNextSegment_test( bool reset )
185
void drawNextSegment_test( int segment )
166
// keep track of segment
167
static unsigned int segment = 0;
168
if( reset ) segment = 0;
171
187
// turn on inside and outside LEDs
172
digitalWrite( 4, HIGH );
173
digitalWrite( 13, HIGH );
175
190
// display segment number in binary across in the inside LEDs,
176
191
// with the LED on pin 12 showing the least-significant bit
177
for( int a = 0; a < 8; a++ )
178
digitalWrite( 12 - a, ( ( segment >> a ) & 1 )? HIGH : LOW );
192
for( int a = 0; a < 9; a++ )
193
ledOn( 8 - a, ( segment >> a ) & 1 );
182
197
// draw a segment for the time display
183
void drawNextSegment_time( bool reset )
198
void drawNextSegment_time( int segment )
185
static unsigned int second = 0;
186
static unsigned int segment = 0;
188
// handle display reset
200
int second = segment / NUM_SECOND_SEGMENTS;
201
int second_segment = segment % NUM_SECOND_SEGMENTS;
194
203
// what needs to be drawn?
195
bool draw_tick = !segment && second % 5 == 0;
196
bool draw_second = !segment && second == time_seconds;
197
bool draw_minute = !segment && second == time_minutes;
198
bool draw_hour = !segment && second == time_hours;
204
bool draw_tick = !second_segment && second % 5 == 0;
205
bool draw_second = !second_segment && second == time_seconds;
206
bool draw_minute = !second_segment && second == time_minutes;
207
bool draw_hour = !second_segment && second == time_hours;
201
digitalWrite( 13, HIGH );
202
digitalWrite( 12, draw_tick || draw_minute );
203
for( int a = 10; a <= 11; a++ )
204
digitalWrite( a, draw_minute || draw_second );
205
for( int a = 4; a <= 9; a++ )
206
digitalWrite( 10, draw_minute | draw_second || draw_hour );
209
if( ++segment >= NUM_SECOND_SEGMENTS ) {
211
ledOn( 8, draw_tick || draw_minute );
212
for( int a = 6; a <= 7; a++ )
213
ledOn( a, draw_minute || draw_second );
214
for( int a = 0; a <= 5; a++ )
215
ledOn( a, draw_minute || draw_second || draw_hour );