#define Entrada 12
#define Pulsador1 27 //Modo
#define Pulsador2 26 //tipo
#define Fpwm 15
int pulso = 0; //0 entra primer flanco, 1 entra segundo flanco.
int modo = 0;//modo 0: menu, modo 1: OperacionNormal
int tipo = 0;//tipo 0: circuito 1; tipo 1: circuito 0
int imp = 0; //impprimir el dato
float T = 0;
float t1 = 1;
float t2 = 2;
float f = 0;
float Q = 0;
float Q2= 0; //caudal en LMP
//Sensor1 LIT 4
float m1 = 0.1; //Lmin/Hz
float kp1 = 0.264172874; //Kte conversion LMIn a GPM
float m2 = 9.7959184;
float kp2 = 0.00440287;//Kte conv LHora a GPM
float kp3 = 0.0166667;//Kte conv Lhora a LPM
const int frecp = 100;//PWM prueba
const int ledChannel = 0;//PWM prueba
const int resolution = 8;//PWM prueba
const int ledPin = 14; //PWM prueba
int dutyCycle = 128;//PWM prueba
volatile int interruptCounter;
hw_timer_t * timer2 = NULL;
portMUX_TYPE timerMux2 = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR onTimer2(){
// Critical Code here
portENTER_CRITICAL_ISR(&timerMux2);
interruptCounter++;
imp = 1-imp;
portEXIT_CRITICAL_ISR(&timerMux2);
}
void IRAM_ATTR interrupcion(){
pulso = 1-pulso;
if(pulso == 1){
t1 =micros(); //Tiempo ptrimer flanco
}else{
t2 = micros()-t1;
}
}
void IRAM_ATTR IntP1(){
modo = 1-modo;
}
void IRAM_ATTR IntP2(){
tipo = 1-tipo;
}
void setup() {
Serial.begin(9600);
pinMode(Entrada, INPUT);
pinMode(Pulsador1, INPUT);
pinMode(Pulsador2, INPUT);
pinMode(Fpwm, OUTPUT);
attachInterrupt(Entrada, interrupcion, RISING);
attachInterrupt(Pulsador1, IntP1, FALLING);
attachInterrupt(Pulsador2, IntP2, FALLING);
ledcSetup(ledChannel, frecp, resolution);//PWM prueba
ledcAttachPin(ledPin, ledChannel);//PWM prueba
ledcWrite(ledChannel, dutyCycle); //PWM prueba
timer2 = timerBegin(2, 80, true);
timerAttachInterrupt(timer2, &onTimer2, true);
timerAlarmWrite(timer2, 2000000, true);
timerAlarmEnable(timer2);
}
void loop() {
// put your main code here, to run repeatedly:
if(imp==1){
if(modo == 0){
impmenu();
}else{
if(tipo == 0){
imprimirC1();
} else{
imprimirC2();
}
}
imp = 0;
}
calcular();
flpwm();
}
void calcular(){
T = t2/1000;
f = (1/T)*1000;
if(tipo == 0){
calcularC1();
}else{
calcularC2();
}
}
void calcularC1(){
Q = m1*f*kp1;
}
void calcularC2(){
Q = m2*f*kp2;
Q2 = m2*f*kp3;
}
void impmenu(){
Serial.println("Tipo de sensor: ");
if(tipo == 0){
Serial.println("KOBOLD DRS9.5-F30");
Serial.println(" ");
}else{
Serial.println("YF-S201");
Serial.println(" ");
}
}
void imprimirC1(){
Serial.println("KOBOLD DRS9.5-F30");
Serial.print("Periodo[ms]: ");
Serial.println(T);
Serial.print("Frecuencia[Hz]: ");
Serial.println(f);
Serial.print("Caudal[GPM]: ");
Serial.println(Q);
Serial.println(" ");
}
void imprimirC2(){
Serial.println("YF-S201");
Serial.print("Periodo[ms]: ");
Serial.println(T);
Serial.print("Frecuencia[Hz]: ");
Serial.println(f);
Serial.print("Caudal[GPM]: ");
Serial.println(Q);
Serial.print("Caudal[LPM]: ");
Serial.println(Q2);
Serial.println(" ");
}
void flpwm(){
//falsa pwm de pruebas
digitalWrite(Fpwm,1);
delay(50);//delay 50 ms
digitalWrite(Fpwm,0);
delay(50);//delay 50 ms
}