Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.82 KB | None | 0 0
  1. #include <math.h>
  2.  
  3. const byte SENSORPIN = 0;
  4.  
  5. const byte LEDPIN = 3;
  6.  
  7. const int MINSENSOR = 0;
  8.  
  9. const int MAXSENSOR = 1023;
  10.  
  11. const byte MINLED = 0;
  12.  
  13. const byte MAXLED = 255;
  14.  
  15. const unsigned long PERIODOLED = 100;
  16.  
  17. const unsigned long PERIODOMONITOR = 100;
  18.  
  19. const unsigned long PERIODOSENS = 100;
  20.  
  21. const float T0 = 25.0;
  22.  
  23. const float R0 = 10000.0;
  24.  
  25. const float B = 3977.0;
  26.  
  27. // -----------------
  28.  
  29. struct Led {
  30.  
  31. byte valor;
  32.  
  33. byte pin;
  34.  
  35. unsigned long periodo;
  36.  
  37. unsigned long last_ms;
  38.  
  39. };
  40.  
  41. struct Sensor {
  42.  
  43. unsigned valor_an;
  44.  
  45. float valor_cels;
  46.  
  47. byte pin;
  48.  
  49. unsigned long last_ms;
  50.  
  51. unsigned long periodo;
  52.  
  53. };
  54.  
  55. struct Monitor {
  56.  
  57. unsigned long periodo;
  58.  
  59. unsigned long last_ms;
  60.  
  61. };
  62.  
  63. // -----------------
  64.  
  65. void setup_led(struct Led &led, unsigned long periodo, byte pin){
  66.  
  67. led.valor = HIGH;
  68.  
  69. led.pin = pin;
  70.  
  71. led.periodo = periodo;
  72.  
  73. led.last_ms = 0;
  74.  
  75. pinMode(led.pin, OUTPUT);
  76.  
  77. digitalWrite(led.pin, led.valor);
  78.  
  79. }
  80.  
  81. void setup_sensor(struct Sensor &sensor, unsigned long periodo, byte pin){
  82.  
  83. sensor.valor_an = 0;
  84.  
  85. sensor.pin = pin;
  86.  
  87. sensor.periodo = periodo;
  88.  
  89. sensor.last_ms = 0;
  90.  
  91. }
  92.  
  93. void setup_monitor(struct Monitor &mont, unsigned long periodo){
  94.  
  95. mont.periodo = periodo;
  96.  
  97. mont.last_ms = 0;
  98.  
  99. Serial.begin(9600);
  100.  
  101. if(Serial){
  102.  
  103. Serial.println("#> Graficas");
  104.  
  105. }
  106.  
  107. }
  108.  
  109. // -----------------
  110.  
  111. void loop_led(struct Led &led, struct Sensor &sensor, unsigned long curr_ms){
  112.  
  113. if(curr_ms - led.last_ms >= led.periodo){
  114.  
  115. led.last_ms += led.periodo;
  116.  
  117. if(sensor.valor_cels >= 30 && sensor.valor_cels <= 35){
  118.  
  119. led.valor = HIGH;
  120.  
  121. digitalWrite(led.pin, led.valor);
  122.  
  123. } else {
  124.  
  125. led.valor = LOW;
  126.  
  127. digitalWrite(led.pin, led.valor);
  128.  
  129. }
  130.  
  131. }
  132.  
  133. }
  134.  
  135. void analog_to_cels(struct Sensor &sensor){
  136.  
  137. float RTMP = (MAXSENSOR * R0 / sensor.valor_an) - R0;
  138.  
  139. sensor.valor_cels = (1.0/(1.0/(T0 + 273.15)+1.0/B * log(RTMP/R0))-273.15);
  140.  
  141. }
  142.  
  143. void loop_sensor(struct Sensor &sensor, unsigned long curr_ms){
  144.  
  145. if(curr_ms - sensor.last_ms >= sensor.periodo){
  146.  
  147. sensor.last_ms = curr_ms;
  148.  
  149. sensor.valor_an = analogRead(sensor.pin);
  150.  
  151. analog_to_cels(sensor);
  152.  
  153. }
  154.  
  155. }
  156.  
  157.  
  158.  
  159. void loop_monitor(struct Monitor &mont,struct Sensor &sensor, struct Led &led, unsigned long curr_ms){
  160.  
  161. if(curr_ms - mont.last_ms >= mont.periodo){
  162.  
  163. mont.last_ms += mont.periodo;
  164.  
  165. Serial.print(led.valor);
  166.  
  167. Serial.print(" ");
  168.  
  169. Serial.print(sensor.valor_cels);
  170.  
  171. Serial.println();
  172.  
  173. }
  174.  
  175. }
  176.  
  177. // -----------------
  178.  
  179. struct Led led;
  180.  
  181. struct Sensor sensor;
  182.  
  183. struct Monitor mont;
  184.  
  185. void setup() {
  186.  
  187. setup_led(led, PERIODOLED, LEDPIN);
  188.  
  189. setup_sensor(sensor, PERIODOSENS, SENSORPIN);
  190.  
  191. setup_monitor(mont, PERIODOMONITOR);
  192.  
  193. }
  194.  
  195.  
  196.  
  197. void loop() {
  198.  
  199. unsigned long curr_ms = millis();
  200.  
  201. loop_sensor(sensor, curr_ms);
  202.  
  203. loop_led(led, sensor, curr_ms);
  204.  
  205. loop_monitor(mont, sensor, led, curr_ms);
  206.  
  207.  
  208.  
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement