Last active
December 6, 2016 21:53
-
-
Save evsusy/e081ee3425abf1a1436092e9b558c658 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Serial communication between ARDUINO and/or node MCU - Program of Master | |
// 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); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment