Professional Documents
Culture Documents
Code
Code
h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
int btnPushCounter = 0;
int btnState = 0;
int lastBtnState = 0;
int btnLongPres = 0;
int count = 0;
bool led_stt, last_led_stt;
int number_Screen = 0;
void setup() {
Serial.begin(115200);
pinMode(pin_Var1, INPUT);
pinMode(pin_Var2, INPUT);
pinMode(pin_LDR, INPUT);
pinMode(pin_Btn, INPUT);
pinMode(pin_Led, OUTPUT);
lcd.init();
lcd.clear();
lcd.backlight();
lcdString(1,1, "Optical frequency");
lcdString(2,2, "counting device");
delay(2000);
lcd.clear();
lcdString(5,0, "Brightness");
lcdString(3,1,"calculation...");
autp_measure();
lcdString(7,2, "Ready!");
delay(2000);
lcd.clear();
void loop() {
// put your main code here, to run repeatedly:
buttonState();
switch(number_Screen)
{
case 1:
main_Screen();
break;
case 2:
result_Screen();
break;
default:
setting_Screen();
count = 0;
break;
}
lastBtnState = btnState;
}
void setting_Screen()
{
lcdString(7,0, "SETTING");
lcdString(0,1, "Set time :");
lcdString(0,2, "Set value:");
lcdString(0,3, "LDR value:");
val_LDR = analogRead(pin_LDR);
if ( btnPushCounter == 0)
set_time = 60;
if ( btnPushCounter == 1)
set_time = 120;
if ( btnPushCounter == 2)
set_time = 240;
if ( btnPushCounter == 3)
set_time = 300;
time_left = set_time;
lcdValue(11,1, set_time);
lcdString(14,1, "s");
lcdValue(11,2, val_Var1);
lcdValue(11,3, val_LDR);
lcdString(15,3, "Run");
lcdString(18,3, ">>");
}
void main_Screen()
{
lcdString(5,0, "COUNTING...");
lcdString(0,1, "Time left :");
lcdString(0,2, "Count value:");
lcdString(0,3, "<<");
lcdString(3,3, "Setup");
}
last_led_stt = led_stt;
if ( time_left > 0)
lcdValue(13,2, count);
if (time_left == 0)
{
number_Screen = 2;
lcd.clear();
}
}
void result_Screen()
{
lcdString(7,0, "RESULT");
lcdString(0,1, "Time Count: ");
lcdString(0,2, "Num of count: ");
lcdString(0,3, "Freq: ");
freq = (count/(set_time/60));
lcdValue(12,1, set_time);
lcdString(15,1, "s");
lcdValue(14,2, count );
lcdValue(6,3, freq);
lcdString(9,3, "time/min");
lcdString(18,3, ">>");
}
void buttonState()
{
btnState = digitalRead(pin_Btn);
if (btnState != lastBtnState)
{
time1_now = millis();
if (btnState == LOW)
{
btnPushCounter++;
}
}
if ( (unsigned long) (millis() - time1_now) > wait_time)
{
btnLongPres = btnState;
time1_now = millis();
}
if (btnLongPres == 1)
{
number_Screen++;
lcd.clear();
btnLongPres = 0;
if (number_Screen > 1)
number_Screen = 0;
}
if (number_Screen > 2)
number_Screen = 0;
if (btnPushCounter > 3)
btnPushCounter = 0;
}
void autp_measure()
{
for (int i = 0; i < 200; i++)
{
val_LDR = analogRead(pin_LDR);
sum = sum + val_LDR;
val_Var1 = sum/200 + 20;
lcdValue(0,3, val_Var1);
}
}
void lcdString( int _colum, int _row, String _string)
{
lcd.setCursor(_colum, _row);
lcd.print(_string);
}