Automação de envase ,, alterando e colocando teclado 3x4 para controle

 se alguém puder me ajudar ,, não sou muito entendido em linguagem C .

tenho problema com as chaves  }}}}}}}} ( os códigos utilizados são uma maçaroca de códigos encontrados no laboratório :D )

#include <Keypad.h>
#include <LiquidCrystal.h>
 
const byte Coluna = 3;
const byte Linha = 4;
 
int i=0;
char Teclas[Linha][Coluna] = {{'1','2','3'},{'4','5','6'},{'7','8','9'},{'*','0','#'}};
byte Pino_linha[Linha] = {6, 12, 13, 9};
byte Pino_coluna[Coluna] = {8, 7, 10};
 
LiquidCrystal lcd(1, 11, 5, 4, 3, 2);
Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna );
 #define bombaUm A5 // pino que aciona a bomba1 e a válvula1
 #define botaoliga A3 // Pino para botão de Ligar o sistema
 #define EPO A4 // Botaão para Emergencia ESP
 #define botao_prgm1 A0 // Pino para botão de carga do protudo 1
 #define hallsensor1 0 // The pin location of the sensor
 
 float Calc1 = 0; // Variavel para contagem de pulsos do sensor1 de fluxo

 unsigned int debounceDelay = 5; // Tempo de debounce
 unsigned int Flagbotaoliga; // Variavel para indicar se o botão de liga foi acionado
 unsigned int FlagEPO; // Variavel para indicar se o botão de emergencia foi acionado

void setup()
{
  {

   lcd.begin(16, 2);
    pinMode(hallsensor1, INPUT_PULLUP); // Initializes digital pin 2 as an input
 pinMode (bombaUm, OUTPUT); // pino que aciona a bomba1 e a válvula1 como saida
 pinMode (botao_prgm1, INPUT_PULLUP); // pino do botão de carga de 900ml1 como entrada e PULL_UP
 pinMode (botaoliga, INPUT_PULLUP); // pino do botão de liga como entrada e PULL_UP
 pinMode (EPO, INPUT_PULLUP); // pino do botão de Emergencia como entrada e PULL_UP
 Flagbotaoliga = 0; // Indicador de botaão de liga, como desligado
 digitalWrite (bombaUm, HIGH);

}
 
void loop()
{
  char teclaPressionada = keypad.getKey();
  if (teclaPressionada != NO_KEY)
}
       { lcd.setCursor(i, 0);
    lcd.print(teclaPressionada);
        i++;
       }
}                    

 // ================= botaoliga deboucing ===================
{
 {if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
 
 
 delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
 if(!digitalRead(botaoliga)) // Se botão de ligar está pressionado
 
 Flagbotaoliga = 1; // Indicador de botão de liga, como ligado
 FlagEPO = 0; // Indicativo de emergencia desligado
 lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
 lcd.print ("Ligado "); // Informa sistema ligado
 lcd.setCursor(0,1); // Posiciona cursor na 10a. posição da 2a linha
 lcd.print (" "); // Limpa a área
 while(!digitalRead(botaoliga)) // Espera pela liberação do switch
 delayMicroseconds(1); // delay de 1u segundos
 }
 
 
 if(!digitalRead(EPO)) // Se botão de ligar está pressionado
 { // Faça
 delay(debounceDelay); // delay para evitar bounce(ruído eletrico)
 if(!digitalRead(EPO)) // Se botão de emergencia está pressionado
 {
 FlagEPO = 1; // Indicativo de emergencia ligado
 digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
 Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
 lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
 lcd.print ("Deslig. "); // Informa sistema desligado
 lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
 lcd.print (""); // Limpa a área
 while(!digitalRead(EPO)) // Espera pela liberação do switch
 delayMicroseconds(1); // delay de 1u segundos
 }
 if (Flagbotaoliga == 1) // Se o botão de liga foi acionado
 { // Faça
 
 if ((Flagbotaoprgm2 == 0) & (Flagbotaoprgm3 == 0)) // Se não está usando prgm2 ou prgm3
 { // Faça
 if(!digitalRead(botao_prgm1)) // Se o botão de carga de 500ml1 está pressionado
 {
 if (Calc1 < 356 * teclaPressionada ) // Se a quantidade envasada for menor que 900ml
 { // Faça
 Flagbotaoprgm1 = 1; // Indicador de botão de progm1, como ligado
 digitalWrite (bombaUm,LOW); // Liga bomba 1 e Valvula 1
 if(pulseIn(hallsensor1, LOW)) // Se pulso do sensor1 de fluxo for low
 Calc1++; // Incremente contador de quantidade
 lcd.setCursor(0,2);
 lcd.print(Calc1);
 lcd.setCursor(10,1);
 lcd.print(Calc1*3.0303);
 }
 else // Se a quantidade envasada for maior que 500ml
 { // Faça
 Flagbotaoliga = 0; // Indicador de botão de liga, como desligado
 digitalWrite (bombaUm,HIGH);
 lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
 lcd.print (Calc1*3.0303); // Mostra contador
 lcd.setCursor(9,0); // Posiciona cursor na 9a. posição da 2a linha
 lcd.print ("Deslig."); // Informa sistema desligado
 Calc1 = 0; // Zera variavel contadora
 Flagbotaoprgm1 = 0; // Indicador de botão de progm1, como desligado
 }
 }
 else // Se o botão de carga de 500ml1 não está pressionado
 {
 if (Flagbotaoprgm1 == 1) // Se indicador de botão de progm1 estiver ligado
 { // Faça
 digitalWrite (bombaUm,HIGH); // Desliga bomba 1 e Valvula 1
 lcd.setCursor(10,1); // Posiciona cursor na 10a. posição da 2a linha
 lcd.print (Calc1*3.0303); // Mostra contador
 }
 }
 }
 }
 }

Exibições: 595

Responder esta

Respostas a este tópico

Minha especialidade não é com códigos. 

Mas seria interessante nos enviar o diagrama da sua montagem. 

Poderá facilitar na ajuda. 

http://www.embarcados.com.br/arduino-primeiros-passos/

https://www.arduino.cc/en/Tutorial/Sketch

Ola estou  postando um pequeno esquema só para ser melhor entendido . 

Este é o projeto antigo , que funcionou perfeito (exceto o lcd que fica meio loko) . você seleciona a quantidade  que deseja ,que é fixa em 500ml 900ml e 5Litros , após aperta o botão verde , ele aciona a bomba e libera a solenoide , apos a sensor ler o valor da quantidade envasada ele fecha a bomba e a solenoide ... 

 A ideia do novo projeto é simplesmente , excluir os botes de quantidade fixa e selecionar a quantidade desejada no teclado .. assim como em uma bomba de posto de combustivel ...  

Vlwwwww 

O acionamento da bomba é controlado pelo Arduino ?

Vi que tem um sensor de fluxo. Sabendo-se que a pressão é constante, você determina o volume pelo tempo de acionamento da válvula solenoide ou pelos pulsos do sensor de fluxo ? 

isso , a bomba e a solenoide são acionados por relé comandado pelo arduino...

.. o volume é determinado pelos pulsos ,, assim que se atingem tantos pulsos a valvula fecha ..

o que tentei modifiar no esquema , foi fazer uma multiplicação do numero de pulsos para 1 Litro , ou seja  o numero de pulsos para um litro é 196 isso  vezes o valor digitado no teclado ,, assim ela sempre vai envasar a quantidade digita...

por exemplo ,,,

valor do sensor < 196 * 3 = 558 pulsos  

3x4 , é igual a esse só que sem a coluna

a,b,c,d

meu problema maior é um erro  :

"""
teclado_e_lcd_e_controle_de_fluxo.ino: In function 'void setup()':
teclado_e_lcd_e_controle_de_fluxo:43: error: a function-definition is not allowed here before '{' token
teclado_e_lcd_e_controle_de_fluxo:48: error: 'teclaPressionada' was not declared in this scope
teclado_e_lcd_e_controle_de_fluxo.ino: At global scope:
teclado_e_lcd_e_controle_de_fluxo:54: error: expected unqualified-id before '{' token
a function-definition is not allowed here before '{' token

"""

 me indicarão um programa que corrige os erros mas não achei 

Primeiro erro , dentro de um void setup, a rotina começa com { e termina com }. 

void setup()
{   <= RETIRE ESSA CHAVE
  {

   lcd.begin(16, 2);
    pinMode(hallsensor1, INPUT_PULLUP);          // Initializes digital pin 2 as an input
 pinMode (bombaUm, OUTPUT);                       // pino que aciona a bomba1 e a válvula1 como saida
 pinMode (botao_prgm1, INPUT_PULLUP);       // pino do botão de carga de 900ml1 como entrada e PULL_UP
 pinMode (botaoliga, INPUT_PULLUP);           // pino do botão de liga como entrada e PULL_UP
 pinMode (EPO, INPUT_PULLUP);                 // pino do botão de Emergencia como entrada e PULL_UP
 Flagbotaoliga = 0;                                        // Indicador de botaão de liga, como desligado
 digitalWrite (bombaUm, HIGH);

}

opa ,,,, show de bola ,,,, pelo jeito deu certo ,,, ele só deu esse erro :

/Users/LucasFeil/Desktop/sensor_de_fluxo_melhorado_/sensor_de_fluxo_melhorado_.ino:1:20: fatal error: Keypad.h: No such file or directory
#include <Keypad.h>
^
compilation terminated.
exit status 1
Error compiling for board Arduino/Genuino Uno.

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Acredito que seja pq estou usando agora outro computador que não baixei a biblioteca do keypad  .. e também que  não liguei o ardido pois quero compra um especial parra este projeto e não usar o meu residencial ... obrigado mesmo José .. muito bom 

opa mas ja apareceu mais alguns erros no código 


/Users/LucasFeil/Desktop/sensor_de_fluxo_melhorado_/sensor_de_fluxo_melhorado_.ino: In function 'void loop()':
sensor_de_fluxo_melhorado_:41: error: expected primary-expression before '}' token
}
^
sensor_de_fluxo_melhorado_:41: error: expected ';' before '}' token
/Users/LucasFeil/Desktop/sensor_de_fluxo_melhorado_/sensor_de_fluxo_melhorado_.ino: At global scope:
sensor_de_fluxo_melhorado_:42: error: expected unqualified-id before '{' token
{ lcd.setCursor(i, 0);
^
sensor_de_fluxo_melhorado_:46: error: expected declaration before '}' token
}
^
exit status 1
expected primary-expression before '}' token

Lucas bom dia, 

As mensagens de erro especificam o erro:

expected primary-expression before '}' token }

Como eu já disse, todas as rotinas devem começar com { terminar com }.

Rotina é um conjunto de instruções ou comandos dentro de um void. 

Procure onde esta o erro - alguma rotina esta faltando ou sobrando chaves. 

opa meu amigo ,,, consegui , problema super resolvido .. agora não deu nenhum erro ....

Tinha alguns códigos que não apaguei , e como você falou algumas chaves não fechadas .

Obrigado pelo auxilio . abração

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço