#include byte chargePin = 9; byte triggerPin = 8; byte noninvertingPin = A0; byte invertingPin = A1; float constRes = 100; unsigned long timeStart; unsigned long timeEnd; unsigned long timeDelta; unsigned long capacitance; unsigned long inductance; unsigned long resistance; unsigned long frequency; String str; char c; void setup() { Serial.begin(9600); pinMode(chargePin, OUTPUT); pinMode(triggerPin, INPUT); pinMode(noninvertingPin, INPUT); pinMode(invertingPin, INPUT); str = ""; c = '\n'; } void loop() { while((Serial.available() > 0)) { c = Serial.read(); if(!(c=='\n')) { str += c; } else { if(str == "requestFarads") { testCapacitance(); Serial.println(capacitance); } else if(str == "requestHenrys") { testInductance(); Serial.println(inductance); } else if(str == "requestOhms") { testResistance(); Serial.println(resistance); } else if(str == "requestHertz") { testFrequency(); Serial.println(frequency); } str=""; while(Serial.available()>0) Serial.read(); } } digitalWrite(chargePin, LOW); } void testCapacitance () { digitalWrite(chargePin, LOW); while(analogRead(noninvertingPin)>1) {} timeStart = micros(); digitalWrite(chargePin, HIGH); while(!digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) break;} timeEnd = micros(); timeDelta = timeEnd-timeStart; //capacitance in nanoFarads capacitance = (-1*((timeDelta*1000)/((log((1000000-(1000000*analogRead(invertingPin)/1024)))-log(1000000))*constRes))); } void testInductance () { digitalWrite(chargePin, LOW); while(analogRead(noninvertingPin)>1) {} timeStart = micros(); digitalWrite(chargePin, HIGH); while(digitalRead(triggerPin)) {if((micros()-timeStart)>5000000) break;} timeEnd = micros(); timeDelta = timeEnd-timeStart; //inductance in nanoHenrys inductance = (-1*((1000*timeDelta*constRes)/(log(1000000*analogRead(invertingPin)/1024)-log(1000000)))); } void testResistance () { digitalWrite(chargePin, HIGH); delay(100); resistance = (float(analogRead(noninvertingPin))*100)/(1024-float(analogRead(noninvertingPin))); } void testFrequency () { frequency = pulseIn(triggerPin, HIGH); frequency += pulseIn(triggerPin, LOW); frequency = 1/frequency; }