Вы находитесь на странице: 1из 14

#include <glcd.

h>
#include <glcd_Buildinfo.h>
#include <glcd_Config.h>

//MEGA
#include <glcd.h>
#include <config/ks0108.h> // library header
#include <fonts/Arial14.h> // font definition for 14 point Arial font.
#include <fonts/SystemFont5x7.h> // system font
#include <bitmaps/ArduinoIcon.h> // bitmap

// ������
int Pin_CandelGlow = 3; // ����� ������
int Pin_WaterPump = 9; // ������ �����
int Pin_GasPump = 6; //������ ������� //10,15,20,25,30,35,40,45,50,100//
���������� ��� �������, ������ ������.
int Pin_AirPump = 10; //������ ������� �� ���

// �����
int Pin_StartStop = 12; // �������� ���� ������� ��� �������� ���������
int Pin_VoltageMonitoring = 0; // ��������� ��������� �� ���������� ������
int Pin_FlameMonitoring = 1; // ��������� ������� �������
int Pin_Temperatura = 2; // ���������� ��������� ����������� �����-��������

float VoltAnalog, Voltage, X, T_heater; // ��������� ���������� ��������� ������

long t_1 = 0; // ��������� �� ������� �������� ������ ��������� � �����


long t_2 = 0; // ��������� �� ������� �������� ������ ��������� � �����

String inData; // �������� ������ ������ ������ (��������� �������)

int Flame, air, val, low, i, b, t, g, p, l;

boolean pauzada = false;


boolean stopp = false;
boolean pauzadaOff = false;

void setup()
{
pinMode(Pin_StartStop, INPUT);
pinMode(Pin_CandelGlow, OUTPUT);
pinMode(Pin_GasPump, OUTPUT);
pinMode(Pin_WaterPump, OUTPUT);
pinMode(Pin_AirPump, OUTPUT);

Serial.begin(9600);

delay(500);
//GLCD.Init() ; //������������� �� �������� ���������� ��������
(������� �����)
GLCD.Init(NON_INVERTED); // ���� �����
//GLCD.Init(INVERTED); // ������������� �� �������� ���������� ��������
(��������� �����)
GLCD.ClearScreen(); // �������� ��� ������� (���� ����� NORMAL , ����
INVERTED - ������)
GLCD.ClearScreen(WHITE); // ���� �����
//GLCD.ClearScreen( BLACK); // ������ ��� �������
GLCD.SetFontColor( BLACK); // �������� "������" BLACK
//*****���������*�������*****
// test
// tempr
// airon
// airoff
// wateron
// wateroff
// gason -> 5,10,15,20,25,30,35,40,45,50
// glowon ��� ��������
// flame
// start
// stop

void test() // ������� ����������� ���� ���������� � ��������


{

digitalWrite(Pin_CandelGlow, HIGH);
Serial.println("Pin_CandelGlow: On Off");
delay(5000);
digitalWrite(Pin_CandelGlow, LOW);
delay(1000);

digitalWrite(Pin_WaterPump, HIGH);
Serial.println("Pin_WaterPump: On Off");
delay(5000);
digitalWrite(Pin_WaterPump, LOW);
delay(1000);

digitalWrite(Pin_GasPump, HIGH);
Serial.println("Pin_GasPump: On Off");
delay(500);
digitalWrite(Pin_GasPump, LOW);
delay(1000);

digitalWrite(Pin_AirPump, HIGH);
Serial.println("Pin_AirPump: On Off");
delay(5000);
digitalWrite(Pin_AirPump, LOW);
delay(1000);
Serial.println(" ");

///Voltage///
volt();

///Flame///
flame();

///StartStop///

if (digitalRead(Pin_StartStop) == HIGH)
{
Serial.println("Pin_StartStop: HIGH");
}
if (digitalRead(Pin_StartStop) == LOW)
{
Serial.println("Pin_StartStop: LOW");
}
Serial.println(" ");
delay(1000);

///Temperatura///

Temperatura();
Serial.print("T_heater: ");
Serial.print(T_heater);
Serial.println(" ");
delay(1000);
}

void ReadTextComands() // ������ �����


{
inData = "";
if (Serial.available() > 0)
{
int h = Serial.available();
// if you are getting escape -characters try h--; here

for (int i = 0; i < h; i++)


{
inData += (char)Serial.read();
}
// if you are getting escape -characters try Serial.read(); here
}
//print it out
Serial.println(inData);
delay(10);
}

void flame() // ������� �������


{
Flame = analogRead(Pin_FlameMonitoring);
Flame = map(Flame, 320, 890, 0, 100);

// �������� ����������� � �������� ������


float floatMap(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void Temperatura() // ����������a
{
int ValueTempratura = analogRead(Pin_Temperatura); // ���������
�������� �������
T_heater = floatMap(ValueTempratura, 544, 365, 22, 52); // ��������
������������ ��������� � ����������� /// ������������ �����������
T_heater = constrain(T_heater, -30, 120); // �������� ��������
����������� �� -30 �� +150
/*
Serial.print("ValueTempratura: ");/// ������������ �����������
Serial.print(ValueTempratura); /// ������������ �����������
Serial.print(" T: "); /// ������������ �����������
Serial.println((T_heater), 2);
*/
}

void volt()
{
int Pin0_AnalogValue = analogRead(Pin_VoltageMonitoring);
VoltAnalog = 0.0046 * Pin0_AnalogValue;
int R1 = 29500; //30000 Om 29700
int R2 = 7430; //7500 Om 7470

X = (R2 / ((R1 + R2) * VoltAnalog)) * 100;


Voltage = (123.775 / X) * (-1); //131.25 menjatj ot 100 i vihe 132.25

// Serial.print("Voltage: ");
// Serial.print((float)(Voltage), 2);
}

void pauza() // ���� ����� �����


{
delay(50);
Serial.println("Pauza");
GLCD.GotoXY(1,3);
GLCD.Puts("Pauza");

while (1)
{
flame();
delay(50);
Serial.println(Flame);
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);

digitalWrite(Pin_WaterPump, HIGH);

digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
digitalWrite(Pin_AirPump, 80);
if (Flame <= 15)
{
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);

Serial.println("Pauza On");
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, HIGH);
digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);

pauzada = true;
break;
}
}
}

void stopproces() // ��������a �����


{
delay(10);
Serial.println("Stoping");
GLCD.GotoXY(1,3);
GLCD.Puts("Stoping");

while (1)
{
flame();
delay(500);
Serial.println(Flame);
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);

digitalWrite(Pin_WaterPump, HIGH);

digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
analogWrite(Pin_AirPump, 80);
if (Flame <= 15)
{
digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);

for ( i = 0; i < 3 ; i++ ) // 3 �������� �������, ������������� ����������


�������
{
digitalWrite(Pin_AirPump, HIGH);
delay(1500);
digitalWrite(Pin_AirPump, LOW);
delay(1500);
}

digitalWrite(Pin_AirPump, LOW);
digitalWrite(Pin_WaterPump, LOW);
digitalWrite(Pin_CandelGlow, LOW);
digitalWrite(Pin_GasPump, LOW);
pauzadaOff = false;
pauzada = false;

Serial.println("Proces Off");
GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������
GLCD.Puts("Proces Off");
delay(5000);
GLCD.ClearScreen(WHITE);
break;
}
}
}

void loop()
{
GLCD.SelectFont(System5x7,BLACK);

Temperatura();
volt();

GLCD.GotoXY(85,3); //����������� ������� � ��������� ����������


GLCD.Puts("T:");
GLCD. print((float)(T_heater)); //�������� ������������ ����� � ���� �������
����� ������.
GLCD.GotoXY(85,13); //����������� ������� � ��������� ����������
GLCD.Puts("V:");
GLCD. println((float)(Voltage));
Serial.print("T: ");
Serial.println(T_heater);
Serial.print("V: ");
Serial.println(Voltage);

/////////////////////////////////////////////
delay(2000);
ReadTextComands();

GLCD.GotoXY(1,23);

GLCD.print(inData);
Serial.print(inData);

/////////////////////////////////////////////

///Test///

if (String(inData) == "test") // ������ ������������ ������


{
Serial.println("TestRun");
test();
}

///temperatura///

if (String(inData) == "tempr")
{
Temperatura();
Serial.print("T_heater: ");
Serial.println(T_heater);
}

///Air///

if (String(inData) == "airon") // ������� ��� �������� ������ ������� (������


��� ������ ��������� �����)
{
Serial.println("AirOn");
digitalWrite(Pin_AirPump, HIGH);

t_1 = millis();
while ((t <= 300) || (String(inData) == "airoff")) // �������� ����� 5 �����
������ ��� ������������� ��������
{
ReadTextComands();

t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}
long t = (t_2 - t_1) / 1000;
delay(2000);

if ((String(inData) == "airoff") || (t >= 300))


{
Serial.println("AirOff");
digitalWrite(Pin_AirPump, LOW);
break;
}
}
}

///WaterPump///

if (String(inData) == "wateron") // ������� ��� �������� �������������� �����


(������ ��� ������ ��������� �����)
{
Serial.println("WaterOn");
digitalWrite(Pin_WaterPump, HIGH);

t_1 = millis();
while ((t <= 600) || (String(inData) == "wateroff")) // �������� ����� 10 �����
������ ��� ������������� ��������
{
ReadTextComands();

t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}

long t = (t_2 - t_1) / 1000;


delay(500);

if ((String(inData) == "wateroff") || (t >= 600))


{
Serial.println("WaterOff");
digitalWrite(Pin_WaterPump, LOW);
break;
}
}
}

///GasOn///

if (String(inData) == "gason") // ������ ������� (������ ��� ������ ���������


�����)
{
Serial.println("Enter the number of Gas doses!?");
Serial.println("5,10,15,20,25,30,35,40,45,50");

t_1 = millis();
while (1) // ��� �������� ������� �� ���������� ��� �������
{
delay(100);

int val = Serial.parseInt();


if ((val == 5) || (val == 10) || (val == 15) || (val == 20) || (val == 25) ||
(val == 30) || (val == 35) || (val == 40) || (val == 45) || (val == 50)) //������
�� ������� �� ��������
{
Serial.println(" ");
Serial.print("GasPumping: ");
Serial.println(val);

for (i = 0; i < val; i++) //����� ��� �����a�� ��������


{
digitalWrite(Pin_GasPump, HIGH);
delay(150);
digitalWrite(Pin_GasPump, LOW);
delay(250);
}
break;
}
t_2 = millis();
if (t_2 < 0)
{
(t_2)*(-1);
}

long t = (t_2 - t_1) / 1000;

if (t > 60) // �� 1 ���


{
break;
}
// ��� ����� ������� �� 1 ���..... �� ����� �� ���������
Serial.println(".");
}
}

///GlowOn///

if (String(inData) == "glowon") //������� ����� ������ �� 7 ������


{
digitalWrite(Pin_CandelGlow, HIGH);
Serial.println("Pin_CandelGlow: On");
delay(7500);
digitalWrite(Pin_CandelGlow, LOW);
Serial.println("Pin_CandelGlow: Off");
}

if (String(inData) == "flame")
{
for( i=0; i<50; i++ )
{
flame();
Serial.print("Flame:");
Serial.println(Flame);
Serial.println(i);
delay(1000);
}
i=0;
}

if (T_heater >= 85) //������� ��������� ��������� � ��� ���� ������� ��� ����
������ ��������� ��������
{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
delay(1000);
while (1)
{
Temperatura();
delay(500);
Serial.print("DANGEROUUS CONDITION ");
Serial.println("VERY HOT, DONT START");
Serial.print(" Temperatura: ");
Serial.println(T_heater);
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.Puts("VERY HOT");
GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������
GLCD.Puts("DANGEROUUS CONDITION");
GLCD.GotoXY(1,33); //����������� ������� � ��������� ����������
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //�������� ������������ ����� � ����
������� ����� ������.

if (T_heater <= 70)


{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
break;
}
}
}
///********�����*�Ĩ�*������*�������*��A��*��*����O�*********///
//???????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????
if (pauzada == true)
{
while (1)
{
Temperatura();
delay(500);
ReadTextComands(); // �������� ������� ���� ���� �� ��������
delay(500);

Serial.print("Temperatura: ");
Serial.println(T_heater);
GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //�������� ������������ ����� � ����
������� ����� ������.

if ( T_heater <= 55 )
{
pauzadaOff = true;
break;
}

if ((String(inData) == "stop") || (digitalRead(Pin_StartStop) == HIGH)|| (b


== 4))
{
GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK);
stopproces();
break;
}
}
}
///****************************** ������ ���������
******************************///

if ((String(inData) == "start") || (digitalRead(Pin_StartStop) == HIGH) ||


(pauzadaOff == true))
{
if (T_heater >= 70) //������� ��������� ��������� � ��� ���� ������� ��� ����
������ ��������� �������� ��� ��� ��� � ����� ��������
{
Temperatura();
Serial.print("DANGEROUUS CONDITION ");
Serial.println("VERY HOT, DONT START");
Serial.print("Temperatura: ");
Serial.println(T_heater);
return;
}

Serial.flush();
Serial.println("StartHeating");

GLCD.ClearScreen(WHITE);
GLCD.SelectFont(System5x7,BLACK); //������� ����� � ��� ������� �����
GLCD.GotoXY(1,3); //����������� ������� � ���������
����������
GLCD.Puts("StartHeating"); //STARTING,WORKING,FINISHED,ERROR

analogWrite(Pin_AirPump, 50); //�k���� ��������� ���������


delay(5000);
digitalWrite(Pin_CandelGlow, HIGH);
delay(7500);
digitalWrite(Pin_CandelGlow, LOW);
delay(7500);

for ( b = 0; b < 4; b++ ) // 4 ���� ��������� ����


{
lable:
digitalWrite(Pin_CandelGlow, HIGH);
delay(9000);

Serial.println("Gas pumping:");
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.Puts("Gas pumping");

for ( i = 0; i < 10; i++) // 10 ��� �������� ��������


{
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
delay(300);
}
digitalWrite(Pin_CandelGlow, LOW); //�������� ����� ������

flame();
Serial.print("Flame: ");
Serial.println(Flame);
GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);
///****************************** ������ ���������
******************************///

if (Flame >= 20 && i == 10 ) //���� ���� ������ ��������� ����, ��


��������� �������� �����
{
digitalWrite(Pin_CandelGlow, LOW); //�������� ����� ������ ewo raz
analogWrite(Pin_AirPump, 50); //�k���� ��������� ���������
digitalWrite(Pin_WaterPump, HIGH); //������ ������� �����
delay(100);
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);

for ( l = 50; l > 0; l--) // ������ ������� ��������� � ������� ������


{
digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
delay(450);

flame();
Serial.print(l);
Serial.print(" Flame: ");
Serial.println(Flame);

GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������


GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);
GLCD.Puts(" i: ");
GLCD. print(l);

if (Flame <= 20)


{
goto lable;
break;
}
}
GLCD.ClearScreen(WHITE); // �������� �����
GLCD.SelectFont(System5x7,BLACK); //������� ����� � ��� ������� �����

while ((Flame >= 20) && (T_heater <= 82)) // ����� � ���� ���� ���� ���� �
����������� ���� 80
{
ReadTextComands();
flame();
Temperatura();
volt();

digitalWrite(Pin_WaterPump, HIGH); //������ ������� �����

///*** ������ ������ ���������� �� �����������***///

if (T_heater <= 30)


{
air = map(T_heater, 5, 30, 50, 80); //����� ������ ������� �
����������� �� �����������
air = constrain(air, 50, 80);
t = map(T_heater, 5, 30, 450, 300); //����� ���� ����������� �������
���������� �������� � ����������� �� �����������
t = constrain(t, 300, 450);

Serial.print("T<=30 ");
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("T<=30");
}
if ((30 <= T_heater) && ( T_heater <= 60))
{
air = map(T_heater, 30, 60, 80, 120);
air = constrain(air, 80, 120);
t = 300;

Serial.print("30<=T<=60 ");
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("30<=T<=60");
}
if ( (60 <= T_heater) && (T_heater <= 80) )
{
air = map(T_heater, 60, 80, 120 , 80);
air = constrain(air, 80, 120);
t = map(T_heater, 60, 80, 300, 600);
t = constrain(t, 300, 600);

Serial.print("60<=T<=80 ");
GLCD.GotoXY(1,13); //����������� ������� � ��������� ����������
GLCD.EraseTextLine(eraseFULL_LINE);
GLCD.Puts("60<=T<=80");
}
analogWrite(Pin_AirPump, air); //������ ������ �������

///*************************************************///

Serial.print("F: ");
Serial.print(Flame);
Serial.print(" T: ");
Serial.print(T_heater);
Serial.print(" A: ");
Serial.print(air);
Serial.print(" Low(t): ");
Serial.print(low);
Serial.print(" V: ");
Serial.println(Voltage);

digitalWrite(Pin_GasPump, HIGH);
delay(100);
digitalWrite(Pin_GasPump, LOW);
low = t;
delay(low);

GLCD.GotoXY(1,3);
GLCD.Puts("Heating");
GLCD.GotoXY(50,3); //����������� ������� � ��������� ����������
GLCD.Puts("Volt: ");
GLCD. print((float)(Voltage));
GLCD.GotoXY(1,23); //����������� ������� � ��������� ����������
GLCD.Puts("Flame: ");
GLCD. print(Flame,DEC);
GLCD.GotoXY(1,33); //����������� ������� � ��������� ����������
GLCD.Puts("Temperatura: ");
GLCD. print((float)(T_heater)); //�������� ������������ ����� � ����
������� ����� ������.
GLCD.GotoXY(1,43); //����������� ������� � ��������� ����������
GLCD.Puts("Air: ");
GLCD. print(air,DEC);
GLCD.GotoXY(1,53); //����������� ������� � ��������� ����������
GLCD.Puts("Low(t): ");
GLCD. print(t,DEC);

//******************************
���������*��������������*�������_�����*����� ******************************//

if ((String(inData) == "stop") || (digitalRead(Pin_StartStop) == HIGH) ||


(Flame <= 20)) // ������ ������ ������� �������� ��� ������� ���, �� �����
���������.
{
GLCD.ClearScreen(WHITE); // �������� �����
GLCD.SelectFont(System5x7,BLACK); //������� ����� � ��� ������� �����
stopp = true;
break;
}
if (T_heater >= 80)
{
GLCD.ClearScreen(WHITE); // �������� �����
GLCD.SelectFont(System5x7,BLACK); //������� ����� � ��� ������� �����
pauzada = true;
break;
}
}
if ( stopp == true )
{
stopp = true;
break;
}
if (pauzada == true)
{
pauzada = true;
break;
}
}
if ( stopp == true )
{
stopp = true;
break;
}
if (pauzada == true)
{
pauzada = true;
break;
}
}
if (( b == 4 ) || (stopp == true)) // ��������� ������� ���� ����������� � 4
����, ��������� ������ �����
{
stopproces();
}
if (pauzada == true)
{
pauza();
}
}
}