#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <math.h>
int RT0 = 10000 ; // Ω
int B = 4400 ; // K
int VCC = 5; //Supply voltage
int R = 10000;
float RT, VR, ln, Temp, T0, Read;
float ThermistorPin = A2;
float LightPin = A1;
float resistorPin = A0;
float Vt;
float Vl;
float Vr;
float Light0;
int i,k;
double Light (int RawADC0)
{
double Vout=RawADC0*0.0048828125; //ค่าแบ่งแรงดัน
int lux=(2500/Vout-500)/10; //การคำนวนค่าแสง
return lux; //รีเทรินเป็นจำนวนเต็ม
}
double Thermistor(int Analog)
{
double Temp;
T0 = 273.15; //เคลวิน
Read = Analog ;
Read = (5.00 / 1023.00) * Read; //แปลงค่าอินพุตแบบแอนาล็อกให้อยู่ในช่วง 0-5V.
VR = VCC - Read; // กำหนดให้แรงดัน 5vลบกับค่าที่อ่านได้
RT = Read / (VR / R); //หาความต่างระหว่างแรงดัน VCC (ปกติคือ 5V)
ln = log(RT / RT0); //สัดส่วนความต้านทานระหว่าง Thermistor และค่าความต้านทาน
Temp = (1 / ((ln / B) + (1 / T0))); //สมการที่มีค่าความต้านทานของ Thermistor
Temp = Temp - 273.15; //แปลงอุณหภูมิจากหน่วยเคลวินเป็นองศาเซลเซียส
return Temp;
}
LiquidCrystal_I2C lcd (0x27 , 20 , 4);//3F 27
void setup ()
{
lcd.init();
lcd.backlight () ; // Turn on the blacklight
lcd.setCursor(0,0);
lcd.print("Start");
DDRD = 0b00011111;//setD5-D7input D0-D4output
}
float sum = 0;
float Average = 0;
void resister (){
if (PIND == 0b11000000||k == 1)
{ sum = 0;
k = 1;
for(i=0;i>=0&&i<=3;++i)
{
Vr = analogRead(resistorPin)*(5.0/1023.0);
sum +=Vr ;
delay(500);
}
lcd.clear();
Average = (sum/4);
lcd.setCursor(0,0);
lcd.print("Resistor");
lcd.setCursor(0,1);
lcd.print("voltage = ");
lcd.print ( Average ) ;
lcd.print ( " V" ) ;
}
}
void Light(){
if (PIND == 0b10100000 || k == 2)
{ sum = 0;
k = 2;
for(i=0;i>=0&&i<=3;++i)
{
Vl = analogRead(LightPin);
Light0 = Light (Vl);
sum = (sum + Light0);
delay(500);
}
lcd.clear();
Average = (sum/4);
lcd.setCursor(0,0);
lcd.print("Lighting");
lcd.setCursor(0,1);
lcd.print("Lumen = ");
lcd.print ( Average );
lcd.print(" Lux");
}
}
void Thermistor(){
if (PIND == 0b01100000||k==3){
sum = 0;
k = 3;
for(i=0;i>=0&&i<=3;++i)
{
Vt = analogRead(ThermistorPin);
double temp = Thermistor(Vt)+15;
sum = (sum + temp);
delay(500);
}
lcd.clear();
Average = (sum/4);
lcd.setCursor(0,0);
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print("Celcius = ");
lcd.print(Average);
lcd.print(" C");
}
}
void loop() {
resister();
Light();
Thermistor();
}