#include <Wire.h>
#include <LiquidCrystal_I2C.h> //�ӿ����������1602I2C��
#include <SPI.h>
#define LOG_PERIOD 2000
#define MAX_PERIOD 60000
unsigned long counts; // GM ����
unsigned long cpm; // CPM ����
unsigned int multiplier; //���û������
unsigned long previousMillis; //����ʱ��
float usv;
LiquidCrystal_I2C lcd(0x27, 16, 2); //����LCD��ַΪ 0x27 ��1602��ʾ����
void tube_impulse() { //�Լ�
counts++;
}
void setup()
{
pinMode(2, INPUT_PULLUP);
counts = 0;
cpm = 0; //����
multiplier = MAX_PERIOD / LOG_PERIOD; //���������ȡ��������
//Serial.begin(9600);
attachInterrupt(0, tube_impulse, FALLING); //�ж�Ϊ�½��ش���
//////////////////
lcd.init();
// ������ݵ���Ļ
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("Boot..."); //дһ������boot���صĻ��棬�ṩһ���Ǹ��������ʱ�䡣
lcd.setCursor(0, 1);
for(int i=0;i<16;i++)
{
lcd.write(0xff);
delay(75);
}
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > LOG_PERIOD) {
previousMillis = currentMillis;
cpm = counts * 30 * multiplier;//��������
usv = float(cpm) / 581;// orig 151 ���빫ʽ���������ǿ��
lcd.clear();
lcd.print("CPM:");
lcd.print(cpm);//���cpmֵ
lcd.setCursor(1, 1);//�ڶ���
lcd.print(usv);
// lcd.setCursor(10, 1);
lcd.print(" uSv/h ");//���ǿ��ֵ
counts = 0;//��λ
if (usv >= 10)
{
lcd.setCursor(10, 0);
lcd.print("Danger");//����������10����ʾΣ��
delay(0.1);
}
else if (usv < 10 && usv >= 0.52)
{
lcd.setCursor(9, 0);
lcd.print("Warning");//��0.52-10�����Χ��ʾ����ȫ
delay(0.1);
}
else if (usv < 0.52)
{
lcd.setCursor(12, 0);
lcd.print("Safe");//�����ֵ������ʾ��ȫ
delay(0.1);
}
}
}