/* 100円ショップのアナログ時計をルビジウムオシレーターの 1PPS信号で動かす。 Pin2:1PPS CMOS signal Pw=1uS Pin8:時刻合わせスイッチ(LOで時計動作、Openで運針停止) Pin9,10:時計ステッピングモータコイルへ220Ωを経由して接続 1578bytes 2012.4.1 radiopench */ boolean flag=true; unsigned int coilDriveTime = 17; //コイルのドライブ時間 mS単位 標準は17mS volatile boolean onePPS = false; // 時計運針フラグ void setup() { pinMode(13, OUTPUT); // 動作表示LED pinMode(9, OUTPUT); // conect coil thrugh 220Ω pinMode(10, OUTPUT); // coil return pinMode(8, INPUT); // 時刻合わせスイッチ(LOで秒針停止) digitalWrite(8, HIGH); // weak pull up pin 8 attachInterrupt(0, trig, RISING); // 割り込み0 (pin2) ルビジウムの1PPSパルスを入力 } void loop() { if ( onePPS == true ){ // 割り込みルーチンでフラグがセットされてないかチェック onePPS = false; // セットされていたらフラグをリセットして以下の処理実行 digitalWrite(13,HIGH); // LED flash flag = ! flag; if (flag == true) { digitalWrite(9, HIGH); // coil drive foward delay(coilDriveTime); // wait digitalWrite(9, LOW); // coil drive end } else { digitalWrite(10, HIGH); // coil drive revers delay(coilDriveTime); // wait digitalWrite(10, LOW); // coil drive end } digitalWrite(13,LOW); // LED flash end } } void trig(){ // 割り込み処理 if( digitalRead(8) == LOW){ // 運針スイッチがLOWなら onePPS = true; // 運針フラグセット } }