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
}
}
}
}
}
Tags:
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
O teclado é 4x4 ?
Faça testes com esse exemplo
http://www.dfrobot.com/wiki/index.php/Sealed_Membrane_4*4_button_pad_with_sticker_(SKU:FIT0129)
copie o link todo.
http://labdegaragem.com/forum/topics/teclado-matricial-4x4
http://playground.arduino.cc/Main/KeypadTutorial
http://labdegaragem.com/forum/topics/teclado-4x4-membrana-com-i2c
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por