Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // RODRIGUEZ-GAMBOA, JUAN C. & ALBARRACIN-ESTRADA, E. SUSANA
- // - E-MAIL: {juan.gamboa,eva.susana}@ufrpe.br
- // Libraries
- #include <string.h>
- #include "TimerOne.h"
- const byte button = 2; // Digital pin when is wired the button
- const int led=13;
- const int gas_S1=A0;
- const int gas_S2=A1;
- const int gas_S3=A2;
- const int gas_S4=A3;
- const int gas_S5=A4;
- const int gas_S6=A5;
- const int air_pump=12;
- const int valve1=9;
- const int valve2=10;
- const int valve3=11;
- String data_received="";
- char var[8];
- float time_conf=0;
- float sensor1;
- float sensor2;
- float sensor3;
- float sensor4;
- float sensor5;
- float sensor6;
- int state=0;
- int meter=0;
- int time_state1=10;
- int time_state2=20;
- int time_state3=10;
- bool button_status = false;
- bool timeout=false;
- bool flag=false;
- void configuration(void);
- bool send_data(float number);
- void to_receive(void);
- void tCallback (void) { timeout=true;}
- void push_button(void) {
- button_status=true;
- delay(100);
- if (flag==false) {
- flag=true;
- state=1;
- meter=0;
- }
- }
- void setup()
- {
- Serial.begin(38400); //Open serial port communication
- attachInterrupt(digitalPinToInterrupt(button),push_button,FALLING);
- Timer1.initialize(333333);
- Timer1.attachInterrupt(tCallback);
- pinMode(led, OUTPUT);
- pinMode(air_pump, OUTPUT);
- pinMode(valve1, OUTPUT);
- pinMode(valve2, OUTPUT);
- pinMode(valve3, OUTPUT);
- }
- void loop()
- {
- if (timeout)
- {
- meter++;
- if (state==2)
- { timeout=false;
- read_sensor();
- }
- timeout=false;
- }
- if (flag==true && state!=0 && meter==0)
- {
- configuration();
- delay(1000);
- }
- if (state!=0 && meter!=0)
- {
- switch (state)
- {
- //gas concentration
- case 1:
- if ((meter/3)>=time_state1)
- { state=2;
- meter=0;
- }
- break;
- case 2:
- if ((meter/3)>=time_state2) {
- state=3;
- meter=0;
- }
- break;
- case 3:
- if ((meter/3)>=time_state3) {
- state=4;
- flag=false;
- meter=0;
- }
- break;
- }
- }
- }
- void read_sensor(void)
- {
- sensor1=analogRead(gas_S1)*5.0/1024.0;
- String fild="s1";
- send_data(sensor1,fild);
- delay(40);
- sensor2=analogRead(gas_S2)*5.0/1024.0;
- fild="s2";
- send_data(sensor2,fild);
- delay(40);
- sensor3=analogRead(gas_S3)*5.0/1024.0;
- fild="s3";
- send_data(sensor3,fild);
- delay(40);
- sensor4=analogRead(gas_S4)*5.0/1024.0;
- fild="s4";
- send_data(sensor4,fild);
- delay(40);
- sensor5=analogRead(gas_S5)*5.0/1024.0;
- fild="s5";
- send_data(sensor5,fild);
- delay(40);
- sensor6=analogRead(gas_S6)*5.0/1024.0;
- fild="s6";
- send_data(sensor6,fild);
- }
- void configuration(void)
- {
- switch (state)
- {
- //gas concentration
- case 1:
- Serial.println("Gas concentration");
- digitalWrite(air_pump,LOW);
- digitalWrite(valve1,LOW);
- digitalWrite(valve2,LOW);
- digitalWrite(valve3,HIGH);
- break;
- //measurement
- case 2:
- Serial.println("Measurement");
- digitalWrite(valve3,LOW);
- digitalWrite(air_pump,HIGH);
- digitalWrite(valve1,HIGH);
- digitalWrite(valve2,HIGH);
- break;
- //purge
- case 3:
- Serial.println("Purge");
- digitalWrite(air_pump,HIGH);
- digitalWrite(valve1,HIGH);
- digitalWrite(valve2,HIGH);
- digitalWrite(valve3,HIGH);
- break;
- case 4:
- Serial.println("Measurement finished");
- digitalWrite(air_pump,LOW);
- digitalWrite(valve1,LOW);
- digitalWrite(valve2,LOW);
- digitalWrite(valve3,LOW);
- flag=false;
- state=0;
- break;
- }
- }
- bool send_data(float number, String fild)
- {
- dtostrf(number,2,2, var);
- Serial.flush();
- char cadena[4];
- fild.toCharArray(cadena,4);
- Serial.write(cadena);
- Serial.write('\n');
- delay(1);
- Serial.flush();
- Serial.write(var);
- Serial.write('\n');
- delay(5);
- Serial.flush();
- digitalWrite(led,HIGH);
- return true;
- }
- void to_receive(void)
- {
- Serial.flush();
- delay(5);
- if (Serial.read()=="conf")
- {
- data_received="";
- data_received=Serial.read();
- char cadena[4];
- data_received.toCharArray(cadena,4);
- time_conf = strtod(cadena,NULL);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement