LED式日時計

Dependencies:   mbed

Committer:
mia_0032
Date:
Sun Jul 31 06:52:47 2016 +0000
Revision:
0:43e0ed642bd9
???????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mia_0032 0:43e0ed642bd9 1 #include "mbed.h"
mia_0032 0:43e0ed642bd9 2
mia_0032 0:43e0ed642bd9 3 // for debug
mia_0032 0:43e0ed642bd9 4 DigitalOut leds[] = {
mia_0032 0:43e0ed642bd9 5 DigitalOut( LED1 ),
mia_0032 0:43e0ed642bd9 6 DigitalOut( LED2 ),
mia_0032 0:43e0ed642bd9 7 DigitalOut( LED3 ),
mia_0032 0:43e0ed642bd9 8 DigitalOut( LED4 )
mia_0032 0:43e0ed642bd9 9 };
mia_0032 0:43e0ed642bd9 10 Serial pc( USBTX, USBRX );
mia_0032 0:43e0ed642bd9 11
mia_0032 0:43e0ed642bd9 12 //TA7774PG
mia_0032 0:43e0ed642bd9 13 class Stepper {
mia_0032 0:43e0ed642bd9 14 public:
mia_0032 0:43e0ed642bd9 15 Stepper(PinName in_a, PinName in_b, PinName pws) : _in_a(in_a), _in_b(in_b), _pws(pws) {
mia_0032 0:43e0ed642bd9 16 _in_a = 0;
mia_0032 0:43e0ed642bd9 17 _in_b = 0;
mia_0032 0:43e0ed642bd9 18 _pws = 0;
mia_0032 0:43e0ed642bd9 19 _next_a = true;
mia_0032 0:43e0ed642bd9 20 }
mia_0032 0:43e0ed642bd9 21 void next() {
mia_0032 0:43e0ed642bd9 22 //_pws = 0;
mia_0032 0:43e0ed642bd9 23 //wait(1.0); // for pws
mia_0032 0:43e0ed642bd9 24 if( _next_a ) {
mia_0032 0:43e0ed642bd9 25 _in_a = !_in_a;
mia_0032 0:43e0ed642bd9 26 } else {
mia_0032 0:43e0ed642bd9 27 _in_b = !_in_b;
mia_0032 0:43e0ed642bd9 28 }
mia_0032 0:43e0ed642bd9 29 //_pws = 1;
mia_0032 0:43e0ed642bd9 30 _next_a = !_next_a;
mia_0032 0:43e0ed642bd9 31 }
mia_0032 0:43e0ed642bd9 32 private:
mia_0032 0:43e0ed642bd9 33 DigitalOut _in_a;
mia_0032 0:43e0ed642bd9 34 DigitalOut _in_b;
mia_0032 0:43e0ed642bd9 35 DigitalOut _pws;
mia_0032 0:43e0ed642bd9 36 bool _next_a;
mia_0032 0:43e0ed642bd9 37 };
mia_0032 0:43e0ed642bd9 38
mia_0032 0:43e0ed642bd9 39 Ticker ti;
mia_0032 0:43e0ed642bd9 40 Stepper st( p23, p22, p21 );
mia_0032 0:43e0ed642bd9 41
mia_0032 0:43e0ed642bd9 42 // 12hour = 720min to 360 step (mode 1)
mia_0032 0:43e0ed642bd9 43 const float DAILY_INTERVAL = 120.0;
mia_0032 0:43e0ed642bd9 44 // 1hour = 60min to 720 step (mode 2)
mia_0032 0:43e0ed642bd9 45 const float HOURLY_INTERVAL = 10.0;
mia_0032 0:43e0ed642bd9 46 // for adjust (mode 3)
mia_0032 0:43e0ed642bd9 47 const float ADJUST_INTERVAL = 1.0;
mia_0032 0:43e0ed642bd9 48
mia_0032 0:43e0ed642bd9 49 // switch mode
mia_0032 0:43e0ed642bd9 50 DigitalIn sw_a(p24, PullUp);
mia_0032 0:43e0ed642bd9 51 DigitalIn sw_b(p25, PullUp);
mia_0032 0:43e0ed642bd9 52 int mode = 1;
mia_0032 0:43e0ed642bd9 53
mia_0032 0:43e0ed642bd9 54 int main() {
mia_0032 0:43e0ed642bd9 55 ti.attach(&st, &Stepper::next, DAILY_INTERVAL);
mia_0032 0:43e0ed642bd9 56 wait(2.0);
mia_0032 0:43e0ed642bd9 57 // for( int i=0; i < 360; i++ ){
mia_0032 0:43e0ed642bd9 58 // leds[0] = !leds[0];
mia_0032 0:43e0ed642bd9 59 // st.next();
mia_0032 0:43e0ed642bd9 60 // wait(2.0);
mia_0032 0:43e0ed642bd9 61 // }
mia_0032 0:43e0ed642bd9 62
mia_0032 0:43e0ed642bd9 63 while ( true ) {
mia_0032 0:43e0ed642bd9 64 int previous_mode = mode;
mia_0032 0:43e0ed642bd9 65 if ( sw_a && sw_b ) {
mia_0032 0:43e0ed642bd9 66 mode = 1;
mia_0032 0:43e0ed642bd9 67 } else if ( sw_a ) {
mia_0032 0:43e0ed642bd9 68 mode = 2;
mia_0032 0:43e0ed642bd9 69 } else {
mia_0032 0:43e0ed642bd9 70 mode = 3;
mia_0032 0:43e0ed642bd9 71 }
mia_0032 0:43e0ed642bd9 72 if ( previous_mode != mode ) {
mia_0032 0:43e0ed642bd9 73 ti.detach();
mia_0032 0:43e0ed642bd9 74 switch ( mode ) {
mia_0032 0:43e0ed642bd9 75 case 1:
mia_0032 0:43e0ed642bd9 76 ti.attach(&st, &Stepper::next, DAILY_INTERVAL);
mia_0032 0:43e0ed642bd9 77 break;
mia_0032 0:43e0ed642bd9 78 case 2:
mia_0032 0:43e0ed642bd9 79 ti.attach(&st, &Stepper::next, HOURLY_INTERVAL);
mia_0032 0:43e0ed642bd9 80 break;
mia_0032 0:43e0ed642bd9 81 case 3:
mia_0032 0:43e0ed642bd9 82 ti.attach(&st, &Stepper::next, ADJUST_INTERVAL);
mia_0032 0:43e0ed642bd9 83 break;
mia_0032 0:43e0ed642bd9 84 }
mia_0032 0:43e0ed642bd9 85 }
mia_0032 0:43e0ed642bd9 86 leds[3] = !leds[3];
mia_0032 0:43e0ed642bd9 87 wait(1.0);
mia_0032 0:43e0ed642bd9 88 }
mia_0032 0:43e0ed642bd9 89 }