/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.cc

  • Committer: Tim Marston
  • Date: 2012-05-17 22:48:38 UTC
  • Revision ID: tim@ed.am-20120517224838-25hjd6umh35vmtwn
updated arduino.mk

Show diffs side-by-side

added added

removed removed

79
79
#include "button.h"
80
80
#include "time.h"
81
81
#include "Arduino.h"
82
 
#include "analogue_clock.h"
83
 
#include "digital_clock.h"
84
 
#include "test_pattern.h"
85
 
#include "settings_mode.h"
 
82
#include "modes/analogue_clock.h"
 
83
#include "modes/digital_clock.h"
 
84
#include "modes/test_pattern.h"
 
85
#include "modes/settings_mode.h"
 
86
#include "modes/info_mode.h"
86
87
#include "text.h"
87
88
#include "text_renderer.h"
88
89
#include "common.h"
118
119
#define ANALOGUE_CLOCK_IDX 0
119
120
#define DIGITAL_CLOCK_IDX 1
120
121
#define TEST_PATTERN_IDX 2
 
122
#define INFO_MODE_IDX 3
121
123
 
122
124
//_____________________________________________________________________________
123
125
//                                                                         code
126
128
// activate the current minor mode
127
129
void activate_minor_mode()
128
130
{
 
131
        // reset text
 
132
        Text::reset();
 
133
        leds_off();
 
134
 
 
135
        // give the mode a chance to init
129
136
        switch( _minor_mode ) {
130
137
        case ANALOGUE_CLOCK_IDX: analogue_clock_activate(); break;
131
138
        case DIGITAL_CLOCK_IDX: digital_clock_activate(); break;
 
139
        case INFO_MODE_IDX: info_mode_activate(); break;
132
140
        }
133
 
 
134
 
        // reset text
135
 
        Text::reset();
136
 
        leds_off();
137
141
}
138
142
 
139
143
 
140
144
// activate major mode
141
145
void activate_major_mode()
142
146
{
 
147
        // reset text
 
148
        Text::reset();
 
149
        leds_off();
 
150
 
 
151
        // reset buttons
 
152
        _button.set_press_mode( _major_mode != SETTINGS_MODE_IDX );
 
153
 
 
154
        // give the mode a chance to init
143
155
        switch( _major_mode ) {
144
156
        case MAIN_MODE_IDX: activate_minor_mode(); break;
145
157
        case SETTINGS_MODE_IDX: settings_mode_activate(); break;
146
158
        }
147
 
 
148
 
        // reset text
149
 
        Text::reset();
150
 
        leds_off();
151
159
}
152
160
 
153
161
 
166
174
                                switch( _minor_mode ) {
167
175
                                case ANALOGUE_CLOCK_IDX: analogue_clock_press(); break;
168
176
                                case DIGITAL_CLOCK_IDX: digital_clock_press(); break;
 
177
                                case INFO_MODE_IDX: info_mode_press(); break;
169
178
                                }
170
179
                                break;
171
180
                        case SETTINGS_MODE_IDX: settings_mode_press(); break;
217
226
                        switch( _minor_mode ) {
218
227
                        case ANALOGUE_CLOCK_IDX: analogue_clock_draw_reset(); break;
219
228
                        case DIGITAL_CLOCK_IDX: digital_clock_draw_reset(); break;
 
229
                        case INFO_MODE_IDX: info_mode_draw_reset(); break;
220
230
                        }
221
231
                        break;
222
232
                case SETTINGS_MODE_IDX: settings_mode_draw_reset(); break;
233
243
                case ANALOGUE_CLOCK_IDX: analogue_clock_draw( segment ); break;
234
244
                case DIGITAL_CLOCK_IDX: digital_clock_draw( segment ); break;
235
245
                case TEST_PATTERN_IDX: test_pattern_draw( segment ); break;
 
246
                case INFO_MODE_IDX: info_mode_draw( segment ); break;
236
247
                }
237
248
                break;
238
249
        case SETTINGS_MODE_IDX: settings_mode_draw( segment ); break;
293
304
}
294
305
 
295
306
 
296
 
// ISR to handle the pulses from the fan's tachiometer
 
307
// ISR to handle the pulses from the fan's tachometer
297
308
void fan_pulse_handler()
298
309
{
299
310
        // the fan actually sends two pulses per revolution. These pulses
313
324
// main setup
314
325
void setup()
315
326
{
316
 
        // set up an interrupt handler on pin 2 to nitice fan pulses
 
327
        // set up an interrupt handler on pin 2 to notice fan pulses
317
328
        attachInterrupt( 0, fan_pulse_handler, RISING );
318
329
        digitalWrite( 2, HIGH );
319
330
  
330
341
        // initialise RTC
331
342
        Time::init();
332
343
 
 
344
        // init text renderer
 
345
        TextRenderer::init();
 
346
 
333
347
        // activate the minor mode
334
348
        activate_major_mode();
335
349
}