X-Git-Url: https://code.citadel.org/?p=the_perfect_clock.git;a=blobdiff_plain;f=the_perfect_clock.ino;h=48050670dffc522ee099456ce8bb1f0316e419be;hp=318d641e1cbcaf392fa3527a34085d6862b81cbb;hb=HEAD;hpb=e764d8566466269f88e201f3b48686a076971389 diff --git a/the_perfect_clock.ino b/the_perfect_clock.ino index 318d641..2529492 100644 --- a/the_perfect_clock.ino +++ b/the_perfect_clock.ino @@ -87,6 +87,11 @@ void setup() { // Note: only write to the display when the readout needs to be updated. // Speaking I2C on every loop iteration jams the WWVB receiver. void loop() { + + // Reading it three times and taking the average gives us some hysteresis + int signal = (digitalRead(wwvb) + digitalRead(wwvb) + digitalRead(wwvb)) / 3; + + // has the timer ticked? unsigned long m = millis(); if (m != previous_millis) { millisecond += (m - previous_millis); @@ -101,14 +106,13 @@ void loop() { } } } - } + } previous_millis = m; int pulse_length; - int signal = digitalRead(wwvb); // is the input high or low right now? if (signal) { - analogWrite(timecodeled, 10); // it's too bright on my board so we dim it; change to digitalWrite() if not needed + analogWrite(timecodeled, 5); // it's too bright on my board so we dim it; change to digitalWrite() if not needed } else { digitalWrite(timecodeled, LOW); @@ -120,13 +124,13 @@ void loop() { else if ((!signal) && (previous_signal)) { // trailing edge of pulse detected pulse_length = millis() - start_of_pulse; - if (pulse_length > 175 && pulse_length < 225) { // "0" bit ~= 200 ms (represented as "0") + if (pulse_length > 150 && pulse_length < 250) { // "0" bit ~= 200 ms (represented as "0") this_pulse = 0; } - else if (pulse_length > 475 && pulse_length < 525) { // "1" bit ~= 500 ms (represented as "1") + else if (pulse_length > 450 && pulse_length < 550) { // "1" bit ~= 500 ms (represented as "1") this_pulse = 1; } - else if (pulse_length > 775 && pulse_length < 825) { // marker bit ~= 800 ms (represented as "2") + else if (pulse_length > 750 && pulse_length < 850) { // marker bit ~= 800 ms (represented as "2") this_pulse = 2; } else {