Paso 2: El dibujo
La ONU se encargará de hacer el recuento. Vamos a utilizar la conexión en serie (por USB) de la ONU a un ordenador.
Este bosquejo llevará a cabo recuentos de ciclos AC sobre una base de segundo por segundo (GPS). Cualquier momento que tenga un segundo de 60 ciclos, se imprimirá una línea con el delta en el puerto serie. El anfitrión puede ver el puerto serie y se reúnen los deltas en su ocio.
También te indican cualquier pérdida de GPS PPS de señalización, que puede suceder si el GPS pierde su fix.
#include <Serial.h> #define PPS_PIN 2 #define AC_PIN 3 #define PPS_IRQ 0 #define AC_IRQ 1 #define NOMINAL_FREQUENCY 60 #define PPS_COMPLAINT_RATE 1500 unsigned long last_pps_complaint; unsigned int ac_cycle_count, last_ac_cycle_count; boolean pps_occurred; void pps_isr() { last_ac_cycle_count = ac_cycle_count; ac_cycle_count = 0; pps_occurred = true; } void ac_isr() { ac_cycle_count++; } void setup() { pinMode(PPS_PIN, INPUT); pinMode(AC_PIN, INPUT_PULLUP); Serial.begin(9600); pps_occurred = false; ac_cycle_count = 0; last_pps_complaint = 0; attachInterrupt(PPS_IRQ, pps_isr, RISING); attachInterrupt(AC_IRQ, ac_isr, RISING); } void loop() { if (pps_occurred) { pps_occurred = false; last_pps_complaint = millis(); // no excuse to complain, actually. int delta = NOMINAL_FREQUENCY - last_ac_cycle_count; if (delta) { Serial.print(delta); Serial.print("\r\n"); } } else { if (millis() - last_pps_complaint > PPS_COMPLAINT_RATE) { last_pps_complaint = millis(); Serial.print("Missed PPS\r\n"); } } }