#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
// Initialize Pins
int capPin = A1;
int resPin = A0;
int sw_cap = 12;
int sw_res = 11;
int raw = 0;
int Vin = 5;
float Vout = 0; // unknown voltage, we have to measure
float R1 = 1000;
float R2 = 0; // Unknown resistance, we have to measure
float buffer = 0;
int chargePin = 5;
int dischargePin = 3; //speeds up discharging process, not necessary though
// Initialize Resistor
int resistorValue = 10000;
// Initialize Timer
unsigned long startTime;
unsigned long elapsedTime;
// Initialize Capacitance Variables
float microFarads;
float nanoFarads;
void setup()
{
Serial.begin(9600); // Necessary to print data to serial monitor over USB
pinMode(chargePin, OUTPUT);
pinMode(sw_cap, INPUT_PULLUP);
pinMode(sw_res, INPUT_PULLUP);
digitalWrite(chargePin, LOW);
lcd.init(); // initialize the lcd
lcd.backlight();
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("WELCOME TO"); // print message at (0, 0)
lcd.setCursor(2, 1); // move cursor to (2, 1)
lcd.print("COMPONENT TEST"); // print message at (2, 1)
}
void loop()
{
int sw_capread = digitalRead(sw_cap);
int sw_resread = digitalRead(sw_res);
Serial.print("RES:");
Serial.println(sw_resread);
Serial.print("CAP:");
Serial.println(sw_capread );
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
if (sw_resread == 1 && sw_capread == 0) {
digitalWrite(chargePin, HIGH); // Begins charging the capacitor
startTime = millis(); // Begins the timer
while (analogRead(capPin) < 648)
{
// Does nothing until capacitor reaches 63.2% of total voltage
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Capacitor Test"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print("Make selection"); // print message at (2, 1)
//delay(1000);
}
elapsedTime = millis() - startTime; // Determines how much time it took to charge capacitor
microFarads = ((float)elapsedTime / resistorValue) * 1000;
Serial.print(elapsedTime);
Serial.print(" mS ");
if (microFarads > 1) // Determines if units should be micro or nano and prints accordingly
{
Serial.print((long)microFarads);
Serial.println(" microFarads");
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Capacitance(uF):"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print((long)microFarads);
delay(1000);
}
else
{
nanoFarads = microFarads * 1000.0;
Serial.print((long)nanoFarads);
Serial.println(" nanoFarads");
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Capacitance(nF):"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print((long)nanoFarads);
delay(1000);
}
digitalWrite(chargePin, LOW); // Stops charging capacitor
pinMode(dischargePin, OUTPUT);
digitalWrite(dischargePin, LOW); // Allows capacitor to discharge
while (analogRead(capPin) > 0)
{
// Do nothing until capacitor is discharged
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Capacitor Test"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print("Make selection"); // print message at (2, 1)
//delay(1000);
}
pinMode(dischargePin, INPUT); // Prevents capacitor from discharging
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
if (sw_resread == 0 && sw_capread == 1) {
raw = analogRead(resPin);
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Resistor Test"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print("Make selection"); // print message at (2, 1)
if (raw)
{
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R2 = R1 * buffer;
Serial.print("Vout: ");
Serial.println(Vout);
Serial.print("R2:");
Serial.print(R2);
Serial.print("ohm");
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Resistance(ohm)"); // print message at (0, 0)
lcd.setCursor(0, 1); // move cursor to (2, 1)
lcd.print(R2); // print message at (2, 1)
delay(1000); // resistance value is measured per second
}
}
if (sw_cap == 1 && sw_res == 1) {
lcd.clear(); // clear display
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("WELCOME TO"); // print message at (0, 0)
lcd.setCursor(2, 1); // move cursor to (2, 1)
lcd.print("COMPONENT TEST"); // print message at (2, 1)
delay(1000); // resistance value is measured per second
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
delay(1000);
}