#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7
// SELECTOR
int select =A0;
int selvalue;
int selvout;
float selvin;
// DC VOLTMETER
int dc =A1;
int dcvalue;
int dcvout;
float dcvin;
// CAPACITOR METER
int cap=A4;
unsigned long time0,time1,time2;
float c,null0;
byte kn,mk,i;
// RESISTOR
float R1 =100000; // value of 1k resistor
float R2 = 0;
// DOIDE AND LED
int DL =A3;
int DLvalue;
int DLvout;
float DLvin;
// CONTIUINTY TESTER
int raw = 0;
int Vin = 5;
float Vout = 0;
float R11 = 1000;
float R22 = 0;
float buffer = 0;
int mode=1;
void setup()
{
lcd.begin(16,2);
pinMode(select, INPUT);
pinMode(dc, INPUT);
pinMode(DL, INPUT);
pinMode(cap,INPUT);
lcd.print("AKINFOYEKU SAM");
lcd.setCursor(0, 1);
lcd.print("MULTIMETER ----");
delay(5000);
lcd.clear();
}
void loop() {
selvalue = analogRead(select);
selvout = selvalue * (5.0*11 / 1023);
selvin=selvout*0.09;
if (selvin >4.6)
{
mode=1; // 100V DC VOLTMETER
}
else if (selvin >4.3)
{
mode=2; // 600V DC VOLTMETER
}
else if (selvin >3.4)
{
mode=3; // AC VOLTMETER
}
else if (selvin >3.1)
{
mode=4;// OHM METER
}
else if (selvin >2.8)
{
mode =5; // INDUCTOR METER
}
else if (selvin >2.4)
{
mode=6; // CONUITY TESTER
}
else if (selvin >2.0)
{
mode=7; // DOIDE AND LED TESTER
}
else if (selvin >1.6)
{
mode=8; // FREQUCY METER
}
else if (selvin >1.2)
{
mode=9; // HFE METER
}
else
{
mode=10; // CAPACITOR TESTER
}
//////////////////////////////// 100V DC VOLTMETER MODE 1//////////////////////////////////
if( mode == 1 )
{
lcd.setCursor(0, 0);
lcd.print("DC Voltmeter100V");
dcvalue = analogRead(dc);
dcvout = dcvalue * (5.0*22 / 1023);
dcvin=dcvout*0.9;
lcd.setCursor(0, 1);
lcd.print("DC volt=");
lcd.print(dcvin,1);
lcd.print("V ");
}
//////////////////////////////// 1000V DC VOLTMETER MODE 2//////////////////////////////////
if( mode == 2 )
{
lcd.setCursor(0, 0);
lcd.print("DC Voltmete1000V");
dcvalue = analogRead(dc);
dcvout = dcvalue * (5.0*221 / 1023);
dcvin=dcvout*0.9;
lcd.setCursor(0, 1);
lcd.print("DC volt=");
lcd.print(dcvin,1);
lcd.print("V ");
}
//////////////////////////////// AC VOLTMETER MODE 3//////////////////////////////////
if( mode == 3 )
{
lcd.setCursor(0, 0);
lcd.print("AC Voltmete 600V");
}
//////////////////////////////// OHM METER MODE 4//////////////////////////////////
if( mode == 4 )
{
lcd.setCursor(0, 0);
lcd.print(" OHM METER ");
raw = analogRead(DL);
buffer = raw * Vin;
Vout = (buffer)/1023.0;
buffer = (Vin/Vout) - 1;
R2 = R1 * buffer;
if (R2>1000000)
{
lcd.setCursor(0, 1);
lcd.print("RES=");
lcd.print(R2/1000000,1);
lcd.print("M");
}
else if (R2>1000)
{
lcd.setCursor(0, 1);
lcd.print("RES=");
lcd.print(R2/1000,1);
lcd.print(" K");
}
else
{
lcd.setCursor(0, 1);
lcd.print("RES=");
lcd.print(R2,1);
lcd.print(" ");
}
}
//////////////////////////////// INDUCTOR METER MODE 5//////////////////////////////////
if( mode == 5 )
{
lcd.setCursor(0, 0);
lcd.print("INDUCTOR METER ");
}
//////////////////////////////// CONTINUITY MODE 6//////////////////////////////////
if( mode == 6 )
{
lcd.setCursor(0, 0);
lcd.print("CONTINUITY TEST");
raw = analogRead(DL);
buffer = raw * Vin;
Vout = (buffer) / 1024.0;
buffer = (Vin / Vout) - 1;
R22 = R11 * buffer;
lcd.setCursor(0, 1);
lcd.print("CONTUINTY=");
lcd.print(R22,1);
}
//////////////////////////////// DOIDE AND LED MODE 7//////////////////////////////////
if( mode == 7 )
{
lcd.setCursor(0, 0);
lcd.print(" DOIDE AND LED ");
DLvalue = analogRead(DL);
DLvout = (DLvalue * 5.0) / 1024.0; // see text
DLvout = 5 - DLvout;
lcd.setCursor(0, 1);
lcd.print("DOIDE=");
lcd.print(DLvout,1);
}
//////////////////////////////// FREQUNCY METER MODE 8//////////////////////////////////
if( mode == 8 )
{
lcd.setCursor(0, 0);
lcd.print(" FREQUNCY METER ");
}
//////////////////////////////// HFE METER 9//////////////////////////////////
if( mode == 9 )
{
lcd.setCursor(0, 0);
lcd.print(" HFE METER ");
}
//////////////////////////////// CAPACITPR METER MODE 10//////////////////////////////////
if( mode == 10 )
{
lcd.setCursor(0, 0);
lcd.print(" CAPACITOR METER ");
lcd.setCursor(15,1);
lcd.print("*");
if(mk==0){
pinMode(8,OUTPUT);
pinMode(9,INPUT);
digitalWrite(8,HIGH);
}
if(mk==1){
pinMode(9,OUTPUT);
pinMode(8,INPUT);
digitalWrite(9,HIGH);
}
time0=micros();
while(analogRead(cap)<644){
time2=micros()-time0;
if(time2>=1000000 && mk==0){
mk=1;
time0=100000000;
break;
}
}
time1=micros()-time0;
while(analogRead(cap)>0){
pinMode(9,OUTPUT);
pinMode(8,OUTPUT);
digitalWrite(9,LOW);
digitalWrite(8,LOW);
}
if(mk==1&&time1<1000){
mk=0;
}
lcd.setCursor(1,1);
c=time1;
c=c/1000-null0;
c=abs(c);
if(time1>=10000000){
lcd.setCursor(1,1);
lcd.print(" TEST uF ");
}
else{
lcd.print(c);
if(mk==0){
lcd.print(" nF ");
}
if(mk==1){
lcd.print(" uF ");
}
}
if(i==0){
i++;
null0=c+0.02;
}
delay(100);
}
} // END LOOP