/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/propeller-clock.ino

  • Committer: edam
  • Date: 2012-02-23 00:26:32 UTC
  • Revision ID: edam@waxworlds.org-20120223002632-kkwrdwijfmv45f0j
conrtol segment number from one place and reverse the order the segments are drawn (backwards clock!)

Show diffs side-by-side

added added

removed removed

115
115
#define NUM_SECOND_SEGMENTS 5
116
116
#define NUM_SEGMENTS ( 60 * NUM_SECOND_SEGMENTS )
117
117
 
118
 
// clock draw direction
 
118
// clock direction
119
119
#define CLOCK_FORWARD 0
120
120
 
121
 
// rotate display (in segments)
122
 
#define CLOCK_SHIFT ( 58 * NUM_SECOND_SEGMENTS - 1 )
123
 
 
124
121
//_____________________________________________________________________________
125
122
//                                                                         code
126
123
 
176
173
        num += 4;
177
174
 
178
175
        // pin 4 needs to be inverted (it's driving a PNP)
179
 
        if( num == 4 ) on = !on;
 
176
        // NOTE: PIN 4 TEMPORARILY DISABLED
 
177
//      if( num == 4 ) on = true;
 
178
if( num == 4 ) on = !on;
180
179
 
181
180
        digitalWrite( num, on? HIGH : LOW );
182
181
}
185
184
// draw a segment for the test display
186
185
void drawNextSegment_test( int segment )
187
186
{
188
 
        // turn on outside LEDs
 
187
        // turn on inside and outside LEDs
189
188
        ledOn( 9, true );
190
189
 
191
190
        // display segment number in binary across in the inside LEDs,
202
201
        int second_segment = segment % NUM_SECOND_SEGMENTS;
203
202
 
204
203
        // what needs to be drawn?
205
 
        bool draw_tick = ( !second_segment && second % 5 == 0 && second ) ||
206
 
                ( second == 0 && second_segment == 1 ) ||
207
 
                ( second == 59 && second_segment == NUM_SECOND_SEGMENTS - 1 );
 
204
        bool draw_tick = !second_segment && second % 5 == 0;
208
205
        bool draw_second = !second_segment && second == time_seconds;
209
206
        bool draw_minute = !second_segment && second == time_minutes;
210
 
        bool draw_hour = segment == time_hours * 5 * NUM_SECOND_SEGMENTS +
211
 
                ( 5 * NUM_SECOND_SEGMENTS * time_minutes / 60 );
 
207
        bool draw_hour = !second_segment && second == time_hours;
212
208
 
213
209
        // set the LEDs
214
210
        ledOn( 9, true );
215
 
        ledOn( 8, draw_tick || draw_second );
 
211
        ledOn( 8, draw_tick || draw_minute );
216
212
        for( int a = 6; a <= 7; a++ )
217
213
                ledOn( a, draw_minute || draw_second );
218
214
        for( int a = 0; a <= 5; a++ )
227
223
 
228
224
        // keep track of segment
229
225
#if CLOCK_FORWARD
230
 
        static int segment = ( NUM_SEGMENTS - CLOCK_SHIFT ) % NUM_SEGMENTS;
231
 
        if( reset ) segment = ( NUM_SEGMENTS - CLOCK_SHIFT ) % NUM_SEGMENTS;
 
226
        static int segment = 0;
 
227
        if( reset ) segment = 0;
232
228
#else
233
 
        static int segment = NUM_SEGMENTS - 1 - CLOCK_SHIFT;
234
 
        if( reset ) segment = NUM_SEGMENTS - 1 - CLOCK_SHIFT;
 
229
        static int segment = NUM_SEGMENTS - 1;
 
230
        if( reset ) segment = NUM_SEGMENTS - 1;
235
231
#endif
236
232
 
237
233
        // handle mode switch requests
249
245
        }
250
246
 
251
247
#if CLOCK_FORWARD
252
 
        if( ++segment >= NUM_SEGMENTS ) segment = 0;
 
248
        segment++;
253
249
#else
254
 
        if( --segment < 0 ) segment = NUM_SEGMENTS - 1;
 
250
        segment--;
255
251
#endif
256
252
}
257
253