Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <math.h>
- const byte SENSORPIN = 0;
- const byte LEDPIN = 3;
- const int MINSENSOR = 0;
- const int MAXSENSOR = 1023;
- const byte MINLED = 0;
- const byte MAXLED = 255;
- const unsigned long PERIODOLED = 100;
- const unsigned long PERIODOMONITOR = 100;
- const unsigned long PERIODOSENS = 100;
- const float T0 = 25.0;
- const float R0 = 10000.0;
- const float B = 3977.0;
- // -----------------
- struct Led {
- byte valor;
- byte pin;
- unsigned long periodo;
- unsigned long last_ms;
- };
- struct Sensor {
- unsigned valor_an;
- float valor_cels;
- byte pin;
- unsigned long last_ms;
- unsigned long periodo;
- };
- struct Monitor {
- unsigned long periodo;
- unsigned long last_ms;
- };
- // -----------------
- void setup_led(struct Led &led, unsigned long periodo, byte pin){
- led.valor = HIGH;
- led.pin = pin;
- led.periodo = periodo;
- led.last_ms = 0;
- pinMode(led.pin, OUTPUT);
- digitalWrite(led.pin, led.valor);
- }
- void setup_sensor(struct Sensor &sensor, unsigned long periodo, byte pin){
- sensor.valor_an = 0;
- sensor.pin = pin;
- sensor.periodo = periodo;
- sensor.last_ms = 0;
- }
- void setup_monitor(struct Monitor &mont, unsigned long periodo){
- mont.periodo = periodo;
- mont.last_ms = 0;
- Serial.begin(9600);
- if(Serial){
- Serial.println("#> Graficas");
- }
- }
- // -----------------
- void loop_led(struct Led &led, struct Sensor &sensor, unsigned long curr_ms){
- if(curr_ms - led.last_ms >= led.periodo){
- led.last_ms += led.periodo;
- if(sensor.valor_cels >= 30 && sensor.valor_cels <= 35){
- led.valor = HIGH;
- digitalWrite(led.pin, led.valor);
- } else {
- led.valor = LOW;
- digitalWrite(led.pin, led.valor);
- }
- }
- }
- void analog_to_cels(struct Sensor &sensor){
- float RTMP = (MAXSENSOR * R0 / sensor.valor_an) - R0;
- sensor.valor_cels = (1.0/(1.0/(T0 + 273.15)+1.0/B * log(RTMP/R0))-273.15);
- }
- void loop_sensor(struct Sensor &sensor, unsigned long curr_ms){
- if(curr_ms - sensor.last_ms >= sensor.periodo){
- sensor.last_ms = curr_ms;
- sensor.valor_an = analogRead(sensor.pin);
- analog_to_cels(sensor);
- }
- }
- void loop_monitor(struct Monitor &mont,struct Sensor &sensor, struct Led &led, unsigned long curr_ms){
- if(curr_ms - mont.last_ms >= mont.periodo){
- mont.last_ms += mont.periodo;
- Serial.print(led.valor);
- Serial.print(" ");
- Serial.print(sensor.valor_cels);
- Serial.println();
- }
- }
- // -----------------
- struct Led led;
- struct Sensor sensor;
- struct Monitor mont;
- void setup() {
- setup_led(led, PERIODOLED, LEDPIN);
- setup_sensor(sensor, PERIODOSENS, SENSORPIN);
- setup_monitor(mont, PERIODOMONITOR);
- }
- void loop() {
- unsigned long curr_ms = millis();
- loop_sensor(sensor, curr_ms);
- loop_led(led, sensor, curr_ms);
- loop_monitor(mont, sensor, led, curr_ms);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement