Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. // RODRIGUEZ-GAMBOA, JUAN C. & ALBARRACIN-ESTRADA, E. SUSANA
  2. // - E-MAIL: {juan.gamboa,eva.susana}@ufrpe.br
  3.  
  4.  
  5.  
  6. // Libraries
  7. #include <string.h>
  8. #include "TimerOne.h"
  9.  
  10. const byte button = 2; // Digital pin when is wired the button
  11. const int led=13;
  12. const int gas_S1=A0;
  13. const int gas_S2=A1;
  14. const int gas_S3=A2;
  15. const int gas_S4=A3;
  16. const int gas_S5=A4;
  17. const int gas_S6=A5;
  18. const int air_pump=12;
  19. const int valve1=9;
  20. const int valve2=10;
  21. const int valve3=11;
  22.  
  23. String data_received="";
  24. char var[8];
  25.  
  26. float time_conf=0;
  27. float sensor1;
  28. float sensor2;
  29. float sensor3;
  30. float sensor4;
  31. float sensor5;
  32. float sensor6;
  33.  
  34. int state=0;
  35. int meter=0;
  36. int time_state1=10;
  37. int time_state2=20;
  38. int time_state3=10;
  39.  
  40. bool button_status = false;
  41. bool timeout=false;
  42. bool flag=false;
  43.  
  44. void configuration(void);
  45. bool send_data(float number);
  46. void to_receive(void);
  47. void tCallback (void) { timeout=true;}
  48. void push_button(void) {
  49. button_status=true;
  50. delay(100);
  51. if (flag==false) {
  52. flag=true;
  53. state=1;
  54. meter=0;
  55. }
  56. }
  57.  
  58. void setup()
  59. {
  60. Serial.begin(38400); //Open serial port communication
  61. attachInterrupt(digitalPinToInterrupt(button),push_button,FALLING);
  62. Timer1.initialize(333333);
  63. Timer1.attachInterrupt(tCallback);
  64. pinMode(led, OUTPUT);
  65. pinMode(air_pump, OUTPUT);
  66. pinMode(valve1, OUTPUT);
  67. pinMode(valve2, OUTPUT);
  68. pinMode(valve3, OUTPUT);
  69.  
  70. }
  71.  
  72.  
  73. void loop()
  74. {
  75. if (timeout)
  76. {
  77. meter++;
  78. if (state==2)
  79. { timeout=false;
  80. read_sensor();
  81. }
  82.  
  83. timeout=false;
  84. }
  85.  
  86. if (flag==true && state!=0 && meter==0)
  87. {
  88. configuration();
  89. delay(1000);
  90. }
  91.  
  92. if (state!=0 && meter!=0)
  93. {
  94. switch (state)
  95. {
  96. //gas concentration
  97. case 1:
  98. if ((meter/3)>=time_state1)
  99. { state=2;
  100. meter=0;
  101. }
  102. break;
  103. case 2:
  104. if ((meter/3)>=time_state2) {
  105. state=3;
  106. meter=0;
  107. }
  108. break;
  109. case 3:
  110. if ((meter/3)>=time_state3) {
  111. state=4;
  112. flag=false;
  113. meter=0;
  114. }
  115. break;
  116.  
  117. }
  118. }
  119.  
  120.  
  121. }
  122.  
  123.  
  124. void read_sensor(void)
  125. {
  126. sensor1=analogRead(gas_S1)*5.0/1024.0;
  127. String fild="s1";
  128. send_data(sensor1,fild);
  129. delay(40);
  130. sensor2=analogRead(gas_S2)*5.0/1024.0;
  131. fild="s2";
  132. send_data(sensor2,fild);
  133. delay(40);
  134. sensor3=analogRead(gas_S3)*5.0/1024.0;
  135. fild="s3";
  136. send_data(sensor3,fild);
  137. delay(40);
  138. sensor4=analogRead(gas_S4)*5.0/1024.0;
  139. fild="s4";
  140. send_data(sensor4,fild);
  141. delay(40);
  142. sensor5=analogRead(gas_S5)*5.0/1024.0;
  143. fild="s5";
  144. send_data(sensor5,fild);
  145. delay(40);
  146. sensor6=analogRead(gas_S6)*5.0/1024.0;
  147. fild="s6";
  148. send_data(sensor6,fild);
  149. }
  150.  
  151. void configuration(void)
  152. {
  153. switch (state)
  154. {
  155. //gas concentration
  156. case 1:
  157. Serial.println("Gas concentration");
  158. digitalWrite(air_pump,LOW);
  159. digitalWrite(valve1,LOW);
  160. digitalWrite(valve2,LOW);
  161. digitalWrite(valve3,HIGH);
  162. break;
  163. //measurement
  164. case 2:
  165. Serial.println("Measurement");
  166. digitalWrite(valve3,LOW);
  167. digitalWrite(air_pump,HIGH);
  168. digitalWrite(valve1,HIGH);
  169. digitalWrite(valve2,HIGH);
  170. break;
  171. //purge
  172. case 3:
  173. Serial.println("Purge");
  174. digitalWrite(air_pump,HIGH);
  175. digitalWrite(valve1,HIGH);
  176. digitalWrite(valve2,HIGH);
  177. digitalWrite(valve3,HIGH);
  178. break;
  179. case 4:
  180. Serial.println("Measurement finished");
  181. digitalWrite(air_pump,LOW);
  182. digitalWrite(valve1,LOW);
  183. digitalWrite(valve2,LOW);
  184. digitalWrite(valve3,LOW);
  185. flag=false;
  186. state=0;
  187. break;
  188. }
  189.  
  190. }
  191.  
  192. bool send_data(float number, String fild)
  193. {
  194. dtostrf(number,2,2, var);
  195. Serial.flush();
  196. char cadena[4];
  197. fild.toCharArray(cadena,4);
  198. Serial.write(cadena);
  199. Serial.write('\n');
  200. delay(1);
  201. Serial.flush();
  202. Serial.write(var);
  203. Serial.write('\n');
  204. delay(5);
  205. Serial.flush();
  206. digitalWrite(led,HIGH);
  207. return true;
  208. }
  209.  
  210. void to_receive(void)
  211. {
  212. Serial.flush();
  213. delay(5);
  214. if (Serial.read()=="conf")
  215. {
  216. data_received="";
  217. data_received=Serial.read();
  218. char cadena[4];
  219. data_received.toCharArray(cadena,4);
  220. time_conf = strtod(cadena,NULL);
  221. }
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement