Autor Tema: Llenado de tanque teclado, caudalimetro y relee  (Leído 1427 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado guadalumbres

  • PIC10
  • *
  • Mensajes: 1
Llenado de tanque teclado, caudalimetro y relee
« en: 21 de Septiembre de 2020, 15:01:00 »
Buen día.

Espero me puedan orientar con un proyecto que tengo en preparacion.

Con un sensor de flujo el FS300A y un display 16x2 y su debido codigo me muestra informacion relativamente correcta hemos llenado una cubeta de 20 litros y ha sido muy cercana la cantidad.

Pero al hacer el codigo agregando un teclado matricial y un relee, cambiando el codigo para que despues de cierta cantidad de litros desactive el relee no me regresa al menu principal. Anexo el codigo esperando me puedan ayudar por favor gracias.

Saludos.

#include <Key.h>
#include <Keypad.h>
#include <LiquidCrystal.h>

const byte filas = 4;     //Numero de filas del teclado
const byte columnas = 4;  //Numero de columnas del teclado
const int sensorPin = 2;
const int measureInterval = 2500;
volatile int pulseConter;
int relay = 11;
 
 
// FS300A
const float factorK = 5.5;
 
 
float volume = 0;
long t0 = 0;

//Defino una matriz 4x4 con la posicion de las filas y columnas
char matriz[filas][columnas] =
{

  { '1', '2', '3', 'A'},
  { '4', '5', '6', 'B'},
  { '7', '8', '9', 'C'},
  { '*', '0', '#', 'D'},

};

byte pinesFilas[filas] = {10, 9, 8, 7};       //Pines donde van conectadas las filas del teclado
byte pinesColumnas[columnas] = {6, 5, 4, 3}; //Pines donde van conectadas las columnas del teclado

//Inicializo el teclado con el numero de filas, columnas, los pines del Arduino utilizados y la matriz
Keypad teclado = Keypad( makeKeymap(matriz), pinesFilas, pinesColumnas, filas, columnas);

//Variables para el control de la posicion del cursor
int posX = 0;
int posY = 0;

//Variales para el control de las teclas
char presionando;
int veces_presionada = 0;
//Variables para el control del contador, ya que no se usa ningun delay() en este codigo
unsigned long tiempo_anterior = 0;
int periodo = 500;  //500 milisegundos
 
void ISRCountPulse()
{
   pulseConter++;
}
 
float GetFrequency()
{
   pulseConter = 0;
 
   interrupts();
   delay(measureInterval);
   noInterrupts();
 
   return (float)pulseConter * 1000 / measureInterval;
}
 
void SumVolume(float dV)
{
   volume += dV / 60 * (millis() - t0) / 1000.0;
   t0 = millis();
}
// iniciamos la libreria con el nimero de pines de la interfas
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
//Pines donde va conectada la pantalla (RS, E, D4, D5, D6, D7))
void setup() {
  pinMode(relay, OUTPUT);
//indicamos a la LCD el número de columnas y filas
  lcd.begin(16, 2);
  // imprime un mensaje en la LCD
  lcd.print("Medidor de Flujo");
  lcd.setCursor(0,1);
  lcd.print("Sistemas Andalucia");
  delay (1000);
  lcd.clear();
  Serial.begin(9600);
   attachInterrupt(digitalPinToInterrupt(sensorPin), ISRCountPulse, RISING);
   t0 = millis();
}
void loop() {


   lcd.setCursor(0,0);
   lcd.print("1.- 400l");
   lcd.setCursor(8,0);
   lcd.print("2.- 600l");
   
   char tecla_presionada = teclado.getKey();  //Almacena la tecla presionada


switch (tecla_presionada)        //Switch-case de acuerdo a la tecla presionada
  {
    case '1':                      //La tecla 1 es para 400 l
     do {
      digitalWrite(relay, LOW);
        // obtener frecuencia en Hz
   float frequency = GetFrequency();
 
   // calcular caudal L/min
   float flow_Lmin = frequency / factorK;
   SumVolume(flow_Lmin);

      lcd.setCursor(0,0);
   lcd.print("Sistemas Andalucia");   
    lcd.setCursor(0,1);
   lcd.print(flow_Lmin, 1);
   lcd.print(" L/m");
   lcd.setCursor(8,1);
  lcd.print("C ");
   lcd.print(volume, 1);
   lcd.print(" L");
      }
     while (volume<3);
        digitalWrite(relay, HIGH);
      break;

    case '2':                      //La tecla 1 es para 400 l
     do {
      digitalWrite(relay, LOW);
        // obtener frecuencia en Hz
   float frequency = GetFrequency();
 
   // calcular caudal L/min
   float flow_Lmin = frequency / factorK;
   SumVolume(flow_Lmin);

      lcd.setCursor(0,0);
   lcd.print("Sistemas Andalucia");   
    lcd.setCursor(0,1);
   lcd.print(flow_Lmin, 1);
   lcd.print(" L/m");
   lcd.setCursor(8,1);
  lcd.print("C ");
   lcd.print(volume, 1);
   lcd.print(" L");
      }
     while (volume<4);
        digitalWrite(relay, HIGH);
      break;
  }
}