Step 4: Whew... only 94 lines this time
//The Arduino Code:
///////////////////////////////
#include <math.h>
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;
}
Remove these ads by
Signing Up























Not Nice
















Visit Our Store »
Go Pro Today »



