/* switchCharacterize.ino Paul MacDougal May 2015 This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. */ const uint8_t LED_PIN = 13; const uint8_t SCOPE_PIN = 8; const uint8_t SCOPE2_PIN = 9; const uint8_t SW_PIN = 2; int lastval = LOW; int transitions = 0; bool eventStarted = 0; long int startTime; long int lastTransition; int samples = 0; int maxup = 0; int maxdown = 0; int reports = 0; void setup() { Serial.begin(9600); //while (!Serial); Serial.println(F("Initialized switchCharacterize")); pinMode(LED_PIN, OUTPUT); pinMode(SCOPE_PIN, OUTPUT); pinMode(SCOPE2_PIN, OUTPUT); pinMode(SW_PIN, INPUT); digitalWrite(LED_PIN, LOW); // blink 4 times for (uint8_t i=0; i<4; i++) { digitalWrite(LED_PIN, HIGH); delay(250); digitalWrite(LED_PIN, LOW); delay(250); } } void loop() { uint8_t val = digitalRead(SW_PIN); long int now = micros(); samples++; digitalWrite(SCOPE_PIN, val); if (val != lastval) { if (!eventStarted) { eventStarted = true; startTime = now; samples = 0; transitions = 0; } lastTransition = now; transitions++; lastval = val; } #define IDLE_TIME 4000 if (eventStarted && (now - lastTransition) > IDLE_TIME) { digitalWrite(SCOPE2_PIN, val); digitalWrite(SCOPE2_PIN, !val); digitalWrite(SCOPE2_PIN, val); Serial.print(reports); Serial.print(" | "); Serial.print(val); Serial.print(" - "); Serial.print(transitions); Serial.print(" : "); Serial.print(lastTransition-startTime); Serial.print(" usec "); Serial.print(samples); if (val) { Serial.print(" samples ==> "); if (transitions > maxup) maxup = transitions; } else { Serial.println(" samples"); if (transitions > maxdown) maxdown = transitions; } eventStarted = false; reports++; if (reports == 50) { Serial.print("Maxup "); Serial.print(maxup); Serial.print(" Maxdown "); Serial.println(maxdown); maxup = 0; maxdown = 0; reports = 0; } } }