Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Stepper.h>
- #include <LiquidCrystal.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #include <Wire.h>
- /*
- * Definicoes
- */
- #define DEBUG Serial.print
- /*
- * Constantes
- */
- const int pinoBotao = 19; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON
- const int totalStepToOpen = 158;
- const int stepsPerRevolution = 48;
- const int speedStep = 10;
- /*
- * Variaveis Globais
- */
- volatile bool isFishDetected, isButtonPressed = false; // Variaveis para controle da detecção de peixe e botão
- volatile int numSteps = 0; // Variavel para a contagem de voltas
- unsigned long initTime, finalTime, deltaTime = 0; // Variavel para determinacao do tempo
- float tempo, tempC, t, f, T, V; // Variaveis para conversa de frequencia
- /*
- * Pinout
- */
- /* LCD */
- LiquidCrystal lcd(53,52,51,50,49,48);
- /* Motor de Passos */
- Stepper stepper(stepsPerRevolution, 8,9,10,11);
- /* Sensor de Temperatura */
- OneWire oneWire(21);
- DallasTemperature sensors(&oneWire);
- DeviceAddress temperatureSensor;
- /*
- * Inicializacao dos perifericos
- */
- void setup() {
- Serial.begin(9600);
- //configura button
- pinMode(pinoBotao, INPUT_PULLUP);
- // Inicia sensor temp
- DEBUG("Inicializacao: Sensor Temp\n");
- sensors.begin();
- sensors.getAddress(temperatureSensor, 0);
- // Inicia LCD
- DEBUG("Inicializacao: Display LCD\n");
- lcd.begin(20, 2);
- pinMode(2, INPUT); //pino sensor vazao
- pinMode(3, INPUT); //pino fotodiodo
- // Realiza a abertura inicial
- DEBUG("Inicializacao: Motor de Passos\n");
- stepper.setSpeed(speedStep);
- stepper.step(stepsPerRevolution);
- // Apresenta a tela de inicio
- showInitialLCD();
- // Configura interrupcoes
- attachInterrupt(1, callbackPeixe, RISING);
- attachInterrupt(3, callbackButton, FALLING);
- // Aguarda 5s
- delay(3000);
- //limpa LCD para apresentar "aguarda botao"
- lcd.clear();
- esperaButton();
- delay(3000);
- }
- /*
- * Loop Embarcado
- */
- void loop() {
- //apresenta no LCD o aguardo do botao pressionado para iniciar sistema
- //se botao pressionado, começa sistema
- if(isButtonPressed){
- initTime = millis();
- DEBUG(">>> Inicio do Processo: ");
- DEBUG(initTime);
- DEBUG("\n");
- // Realiza abertura inicial
- DEBUG("Abertura da Valvula\n");
- stepper.setSpeed(speedStep);
- stepper.step(stepsPerRevolution);
- // Le sensor de Vazão
- readFlowSensor();
- // Le sensor de Tenoeratura
- sensors.requestTemperatures();
- tempC = sensors.getTempC(temperatureSensor);
- // Atualiza Display
- showLCD();
- // Incrementa numero de voltas
- numSteps++;
- // Aguarda 1min
- delay(1000);
- if(isFishDetected == true)
- {
- // Atualiza Display com a Tela Final
- showFinalLCD();
- Serial.print(deltaTime);
- // Fecha o Registros
- stepper.setSpeed(speedStep);
- stepper.step(-stepsPerRevolution*numSteps);
- // Atualiza flag de detecção do peixe
- isFishDetected = false;
- // Atualiza flag de detecção do botao
- isButtonPressed = false;
- // Trava o fluxo de codigo
- while(1);
- }
- }
- }
- void showInitialLCD()
- {
- lcd.setCursor(4, 0);
- lcd.print("Iniciando");
- lcd.setCursor(4, 1);
- lcd.print("Sistema...");
- }
- void showFinalLCD()
- {
- lcd.clear();
- lcd.setCursor(0, 0);
- lcd.print("Vf:");
- lcd.setCursor(4, 0);
- lcd.print(V);
- lcd.setCursor(19,0);
- lcd.print("L/min");
- lcd.setCursor(0,1);
- lcd.print("T final: ");
- lcd.write(223);
- lcd.print("C");
- lcd.setCursor(9,1);
- lcd.print(tempC);
- }
- void showLCD()
- {
- lcd.setCursor(0, 0);
- lcd.print("V:");
- lcd.setCursor(3, 0);
- lcd.print(V);
- lcd.setCursor(8,0);
- lcd.print(" L/M");
- lcd.setCursor(0,1);
- lcd.print("T: ");
- lcd.write(223);
- lcd.print("C");
- lcd.setCursor(4,1);
- lcd.print(tempC);
- }
- void getFreq()
- {
- tempo = pulseIn(2, HIGH); //pulso em alta, em microsegundos
- t = tempo * 0.000001; //pulso em segundos
- T = 2.00 * t; //periodo completo em s
- f = 1 / T; //frequencia
- }
- void convertFreqToFlow()
- {
- V = f/8.2; //[L/MIN]
- }
- void readFlowSensor()
- {
- getFreq();
- convertFreqToFlow();
- }
- void callbackPeixe()
- {
- // Calcula o diferencial de tempo
- finalTime = millis();
- DEBUG("Detectou um peixe:");
- DEBUG(finalTime);
- DEBUG("\n");
- // Calcula diferencial de Tempo
- deltaTime = (finalTime - initTime)/1000;
- DEBUG("Tempo desde o Inicio da Operacao:");
- DEBUG(deltaTime);
- DEBUG("\n");
- // Atualiza a flag de detecção do peixe
- isFishDetected = true;
- }
- void esperaButton()
- {
- lcd.setCursor(0,0);
- lcd.print("Aguardando botao.");
- }
- void callbackButton()
- {
- isButtonPressed = true;
- DEBUG("Botao Detectado");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement