Boa tarde Pessoal. Este é meu primeiro post e gostaria de uma ajuda dos mestres de plantão.

o básico do básico na linguagem do Arduino eu consigo me virar, mas quando a coisa começa a apertar, sinto falta de não ter concluido meu curso de Mecatrônica.

estou projetando (hardware pronto) uma enchedora de garrafas de cerveja e o código base é este abaixo. já o testei na protoboard e funciona bem:

agora vem a parte que não sei como fazer e seria de suma importância para o projeto:

na linha:

digitalWrite(alivio,HIGH); // abre escape
delay(5000);

é o tempo que devo "setar" para encher a garrafa de 300ml até o limite desejado. gostararia de que esta variável fosse móvel, ou seja, que podesse trocá-la, sem entrar na programação do Ardiuno. tenho um lcd 16x2 com botões e gostaria de escolher o tipo de garrafa no visor. poderiam me ajudar? 

//ENCHEDORA CONTRA PRESSAO

int inicio = 2;
int co2 = 10;
int alivio = 11;
int beer = 12;
int led = 7;
int p13 = 13;

void setup()
{
   //Serial.begin(9600);
   pinMode(inicio, INPUT);
pinMode(co2,OUTPUT);
pinMode(alivio,OUTPUT);
pinMode(beer,OUTPUT);
pinMode(led,OUTPUT);
pinMode(p13, OUTPUT);
}

void loop()
{
   if (digitalRead(inicio) == HIGH){
digitalWrite(p13, LOW);   
digitalWrite(co2,HIGH); //liga co2
delay(2000);
digitalWrite(co2,LOW); // fecha co2
delay(500);  
digitalWrite(alivio,HIGH); // abre escape
delay(2000);  
digitalWrite(alivio,LOW); // fecha escape
delay(500);
digitalWrite(co2,HIGH); //liga co2
digitalWrite(alivio,HIGH); // abre escape
delay(1000);  
digitalWrite(alivio,LOW); // fecha escape
digitalWrite(co2,HIGH); //liga co2
delay(1000);
digitalWrite(co2,LOW); // fecha co2
delay(2000);
digitalWrite(beer,HIGH); // abre beer
delay(500);
digitalWrite(alivio,HIGH); // abre escape
delay(5000); // GARRAFA 300ML= 5000; GARRAFA 500ML= 8000; GARRAFA 600ML= 10000
digitalWrite(beer,LOW); // fecha beer
delay(3000);
digitalWrite(alivio,LOW); // fecha escape
delay(1000);
      digitalWrite(led,HIGH);
      delay(5000);
      digitalWrite(led,LOW);
          }else {
            
            digitalWrite(led,HIGH);
                       
                        }
           
                                         }

Exibições: 1715

Responder esta

Respostas a este tópico

Ninguem?

comeca por etapas, Daniel.

1 - faz o botao do LCD funcionar, nao precisa da tela em si mas apenas os botoes;

caso consiga;

 2 - faz o LCD funcionar, um hello world da vida basta;

caso consiga;

3 - faz o botao funcionar com LCD, mudando algo na tela.

tenta esse basico, conseguindo continuamos

Ola Akira Sato. Muito grato por me ajudar neste topico:

Usarei um desses lcds do arduino 16x2. Eu usaria aquele sem botoes, ja que usarei botoes externos.

Pensei na seguinte arquitetura:

Pagina inicial, onde escolhemos o tamanho da garrafa.

Ao escolher o tamanho da garrafa, abre uma pagina com somente escrito o tamanho da garrafa e o tempo de enchimento que pode ser ajustado e botao inicio.


#include

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {

lcd.begin(16, 2);

lcd.print("hello, labdegaragem");
}

void loop
lcd.setCursor(0, 1);

lcd.print(millis() / 1000);
}

Boa tarde Daniel.
Eu e meus amigos de faculdade fizemos um controle de usuário para um chuveiro elétrico. Onde o mesmo precisava de uma senha, e esta senha ficava guardada na EEPROM acho que seria interessante pra você ja que não quer precisar fazer o download do código para o Arduino novamente, você poderia encaixar estes delay na EEPROM assim fazendo com que o código vá buscar e caso tenha pane de energia e volte o valor do delay esta guardado. No momento não tenho o código que usamos mas vou procurar o Skecth e mando aqui se achar, mas acho que no caso pelo que quer fazer dessa forma ficaria mais confiável.

Abaixo esta o código que usamos para controle de usuário com um teclado.

Teclado 4x4.

void setup()
{
transf.begin(9600);
pinMode(4, OUTPUT); // Define pino 4 como saída.
digitalWrite(4, HIGH);
pinMode(13,INPUT);
//digitalWrite(13, LOW);
keypad.addEventListener(keypadEvent);
keypad.setDebounceTime(250);
EEPROM.write(0,'1');EEPROM.write(1,'3');EEPROM.write(2,'5');EEPROM.write(3,'7');
//setup do fluxo
pinMode(2, INPUT);
attachInterrupt(0, incpulso, RISING); //Configura o pino 2(Interrupção 0) para trabalhar como interrupção
}

void loop()
{
keypad.getKey(); // mapear tecla apertada
}
void keypadEvent(KeypadEvent eKey)
{
switch (keypad.getState())
{
case PRESSED:

if (eKey!='C')
{
transf.print(eKey);
variavel[v]=(eKey);
v=v++;
}
if(eKey=='C' && variavel[0]=='1' && variavel[1]=='0' && variavel[2]=='0' && variavel[3]=='1' && X==0)
{
transf.print('S');
v=0;
t=0;
f=4;
X=10;
return;
}
else
{}
if(eKey=='C' && variavel[0]=='1' && variavel[1]=='0' && variavel[2]=='0' && variavel[3]=='2' && X==0)
{
transf.print('S');
v=0;
t=0;
f=8;
X=10;
return;
}
else
{}
if(eKey=='C' && X==10)
{
for(int z=0;z<4;z++)
{
b[z] = EEPROM.read(f);
if(b[z]==variavel[z])
f=f++;
if(variavel[z] != b[z])
{
transf.print('B');delay(1000);
asm volatile ("jmp 0");
}
}
X=0;
transf.print('F');
delay(1000);
TEMPO();
}
else
{}
if(eKey=='C' && X==2)
{
X=3;
}
if(eKey=='C' && X==3)
master();
if((eKey=='C') && X==1) // Pressionando "C" confirma se a senha foi digitado corretamente.
{
if(variavel[0]=='1' && variavel[1]=='0' && variavel[2]=='0' && variavel[3]=='1')
{
t=0;
f=4;
X=2;
for(v=0;v<4;v++){variavel[v]='0';}
v=0;
transf.print('S');
}
if(variavel[0]=='1' && variavel[1]=='0' && variavel[2]=='0' && variavel[3]=='2')
{
t=0;
f=8;
X=2;
for(v=0;v<4;v++){variavel[v]='0';}
v=0;
transf.print('S');
}
}
if(eKey=='C' && (variavel[0]=='1' && variavel[1]=='3' && variavel[2]=='5' && variavel[3]=='7'))
{
transf.print('A');
X=1;
for(v=0;v<4;v++){variavel[v]='0';}
delay(1001);
transf.print('P');
v=0;
}
if(eKey=='C' && X==0 && ((variavel[0]!='1' || variavel[1]!='0' || variavel[2]!='0' || variavel[3]!='1') || (variavel[0]!='1' || variavel[1]!='0' || variavel[2]!='0' || variavel[3]!='2')||(variavel[0]!='1' || variavel[1]!='3' || variavel[2]!='5' || variavel[3]!='7')))
{
transf.print('B');
asm volatile ("jmp 0");
}
}
}
void master()
{
t=0;
while(t<4)
{
k=t+f;
//user[t] = Serial.read();
EEPROM.write(k, variavel[t]);
t=t++;

}
if(t==4)
{
transf.print('K');
asm volatile ("jmp 0");
}
}

Obrigado ainda não tinha lido..

Muito obrigado os próximos serão feitos desta forma.


Att

Especifique = lcd 16x2 com botões
Envie o diagrama, link fotos, etc.

deve ser aquele lcd1602 keypad shield, Murta

Caro Jose...seria um lcd 16x2 sem os botoes, pois irei usar botoes externos usando as entradas do arduino.


Anexei uma esboço de como seria a logica.
Anexos

voce quer que alguem escreve para vc o seu trabalho eh isso?

faz o basico, colega, eh o minimo

Senhores,

dei uma longa pesquisada em outros sites e peguei um código semi-pronto e adaptei ao que preciso.  Ps. o meu projeto não é destinado a venda e sim para meu hobbye que hoje é fazer cerveja para consumo próprio e de amigos, sem fins lucrativos:

o projetinho original tinha mais botões, por isso é que tem 4 botões declarados, como só uso 2, deixeis o restante declarado para não ter problema.

O que estou buscando ajuda seria alterar o valor de delay da linha abaixo usando o LCD dentro de uma nova janela onde a chamaria de SETUP. criar a nova janela eu já consigo fazer sozinho.

digitalWrite(aliviol,HIGH); // fecha escape lento
delay(10000);

pois caso no meio do envase eu tenha que reduzir ou aumentar este tempo, tenho que conectar o note e transferir o código.

// --- Bibliotecas Auxiliares ---
#include <LiquidCrystal.h>                              //Biblioteca para o display LCD


// ATENCAO PARA TROCAR AS PORTAS DO LCD


// --- Mapeamento de Hardware ---
          #define butUp    10                                     //Botão para selecionar tela acima no digital 12
#define butDown  12                                     //Botão para selecionar tela abaixo no digital 11
          #define butP     11                                     //Botão de ajuste mais no digital 10
#define butM      13                                     //Botão de ajuste menos no digital 9
#define co2      A0                                     //Saída para rele co2 no A0 (será usado como digital)
#define beer     A1                                     //Saída para rele beer no A1 (será usado como digital)
#define alivior  A2                                      //Saída para rele alivio rapido no A2 (será usado como digital)
#define aliviol  A3                                      //Saída para rele alivio lento no A3 (será usado como digital)
#define buzzer  A4                                       //Saída para buzzer anuncio garrafa cheia (será usada como digital)

// --- Protótipo das Funções Auxiliares ---
void changeMenu();                                      //Função para modificar o menu atual
void dispMenu();                                        //Função para mostrar o menu atual


void GARRAFA300ML();                                   //Função 3
void GARRAFA500ML();                                   //Função 4

// --- Variáveis Globais ---
char menu = 0x01;                                       //Variável para selecionar o menu
char set1 = 0x00, set2 = 0x00;                          //Controle das lâmpadas
boolean t_butUp, t_butDown, t_butP, t_butM;             //Flags para armazenar o estado dos botões

// --- Hardware do LCD ---
LiquidCrystal disp(7,  //RS no digital 7
                   8,  //EN no digital 8
                   6,  //D4 no digital 6
                   5,  //D5 no digital 5
                   4,  //D6 no digital 4
                   3);  //D7 no digital 3
                  
                  

// --- Configurações Iniciais ---
void setup()
{
  disp.begin(16,2);                                      //Inicializa LCD 16 x 2
  
  for(char i=9; i<13; i++) pinMode(i, INPUT_PULLUP);     //Entrada para os botões (digitais 9 a 12) com pull-ups internos
 
  pinMode(co2, OUTPUT);                                 //Configura saída para rele co2
  pinMode(beer, OUTPUT);                                //Configura saída para rele beer
  pinMode(alivior, OUTPUT);                            //Configura saída para rele alivio r
  pinMode(aliviol, OUTPUT);                            //Configura saída para rele alivio l
  pinMode(buzzer, OUTPUT);
 
  t_butUp   = 0x00;                                      //limpa flag do botão Up
  t_butDown = 0x00;                                      //limpa flag do botão Down
  t_butP    = 0x00;                                      //limpa flag do botão P
  t_butM    = 0x00;                                      //limpa flag do botão M
 
  digitalWrite(co2, HIGH);                               //Lâmpada 1 inicia apagada
  digitalWrite(beer, HIGH);                              //Lâmpada 2 inicia apagada
  digitalWrite(alivior, HIGH);                          //Lâmpada 1 inicia apagada
  digitalWrite(aliviol, HIGH);                          //Lâmpada 2 inicia apagada 
  digitalWrite(buzzer, LOW);
} //end setup


// --- Loop Infinito ---
void loop()
{  
   changeMenu();
   dispMenu();

} //end loop

//****************************************** Desenvolvimento das Funções Auxiliares********************************************************


void changeMenu()                                       //Modifica o menu atual
{
   if(!digitalRead(butUp))   t_butUp   = 0x01;          //Botão Up pressionado? Seta flag
   if(!digitalRead(butDown)) t_butDown = 0x01;          //Botão Down pressionado? Seta flag
     
   if(digitalRead(butUp) && t_butUp)                    //Botão Up solto e flag setada?
   {                                                    //Sim...
      t_butUp = 0x00;                                   //Limpa flag
     
      disp.clear();                                     //Limpa display
      menu++;                                           //Incrementa menu
     
      if(menu > 0x06) menu = 0x01;                      //Se menu maior que 6, volta a ser 1
  
   } //end butUp
  
   if(digitalRead(butDown) && t_butDown)                //Botão Down solto e flag setada?
   {                                                    //Sim...
      t_butDown = 0x00;                                 //Limpa flag
     
      disp.clear();                                     //Limpa display
      menu--;                                           //Decrementa menu
     
      if(menu < 0x01) menu = 0x06;                      //Se menu menor que 1, volta a ser 6
  
   } //end butDown  

} //end changeMenu

//******************************* CONTROLE DOS MENUS **********************************************************************************************************************

void dispMenu()                                         //Mostra o menu atual
{

disp.setCursor(4,1);                        //Posiciona cursor na coluna 4, linha 1
disp.print("FULL JAZZ");                      //Imprime mensagem
delay(100);

    switch(menu)                                        //Controle da variável menu
    {
       case 0x01:                                       //Caso 1
             GARRAFA300ML();                            //GARRAFA 300ML
             break;                                     //break

            
       case 0x02:                                       //Caso 2
             GARRAFA500ML();                            //GARRAFA 500ML
             break;                                     //break

             
                       
    
    } //end switch menu

} //end dispMenu


// *************************************** GARRAFAS DE 300ML*****************************************************************************************************************************

void GARRAFA300ML()                               
{
    disp.setCursor(0,0);                                 //Posiciona cursor na coluna 1, linha 1
    disp.print("GARRAFA 300ML");                         //Imprime mensagem do menu 3
 
   
   if(!digitalRead(butP))    t_butP    = 0x01;          //Botão P pressionado? Seta flag
   if(!digitalRead(butM))    t_butM    = 0x01;          //Botão M pressionado? Seta flag
  
   if(digitalRead(butP) && t_butP)                      //Botão P solto e flag setada?
   {                                                    //Sim...
      t_butP = 0x00;                                    //Limpa flag
     
      set1++;                                           //Incrementa set1
     
      if(set1 > 2) set1 = 0x01;                         //Se maior que 2, volta a ser 1
     
      switch(set1)                                      //Controle do set1
      {
             
          case 0x01:                                    //Caso 1
               // disp.setCursor(4,1);                    //Posiciona cursor na coluna 1, linha 2
              //  disp.print("ENCHENDO.....");        //Imprime mensagem

disp.clear();

disp.setCursor(0,0);
disp.print(" REMOVE OXIGENIO");

digitalWrite(co2,LOW); //liga co2
delay(2000);

digitalWrite(co2,HIGH); // fecha co2
delay(500);  

digitalWrite(alivior,LOW); // abre escape rapido
delay(2000); 
 
digitalWrite(alivior,HIGH); // fecha escape rapido
delay(500);
disp.clear();

// ******** GARRAFA SEM O2

disp.setCursor(0,0);
disp.print(" INJETA CO2");
digitalWrite(co2,LOW); // liga co2
delay(2000);
digitalWrite(co2,HIGH); // fecha co2
delay(1000);
disp.clear(); 

// *******    GARRAFA PRESSURIZADA COM CO2

digitalWrite(beer,LOW); // abre beer
delay(3000);
disp.setCursor(0,0);
disp.print("ENCHENDO....");
digitalWrite(aliviol,LOW); // abre escape lento
delay(24000);

disp.clear();
disp.setCursor(0,0);                 
disp.print("GARRAFA CHEIA");


digitalWrite(aliviol,HIGH); // fecha escape lento
delay(10000);


digitalWrite(beer,HIGH); // fecha beer
delay(1000);
disp.clear();
disp.setCursor(0,0);                 
disp.print("AGUARDE");


digitalWrite(alivior,LOW); // abre escape rapido
delay(3000);        
digitalWrite(alivior,HIGH); // fecha escape rapido
delay(500);        
        
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(500);

 
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(500);

 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(500);

 digitalWrite(buzzer,HIGH);
 delay(50);
 digitalWrite(buzzer,LOW);
 delay(50);

 digitalWrite(buzzer,HIGH);
 delay(50);
 digitalWrite(buzzer,LOW);
 delay(50);

 digitalWrite(buzzer,HIGH);
 delay(50);
 digitalWrite(buzzer,LOW);
 delay(50);


 digitalWrite(buzzer,HIGH);
 delay(50);
 digitalWrite(buzzer,LOW);
 delay(50);


 disp.clear();
 disp.print("PROXIMA GARRAFA");
 delay(5000);
 disp.clear();

 
//******** GARRAFA CHEIA
 
break;                                  //Break
               

     
      } //end switch set1
  
   } //end butM
 

} // FECHA ETAPA 300ML
 //************************************************************GARRAFAS DE 500ML************************************************************************************************************

void GARRAFA500ML()                               
{
    disp.setCursor(0,0);                                 //Posiciona cursor na coluna 1, linha 1
    disp.print("GARRAFA 500ML");                         //Imprime mensagem do menu 3
 
   
   if(!digitalRead(butP))    t_butP    = 0x01;          //Botão P pressionado? Seta flag
   if(!digitalRead(butM))    t_butM    = 0x01;          //Botão M pressionado? Seta flag
  
   if(digitalRead(butP) && t_butP)                      //Botão P solto e flag setada?
   {                                                    //Sim...
      t_butP = 0x00;                                    //Limpa flag
     
      set1++;                                           //Incrementa set1
     
      if(set1 > 2) set1 = 0x01;                         //Se maior que 2, volta a ser 1
     
      switch(set1)                                      //Controle do set1
      {
             
          case 0x01:                                    //Caso 1
               // disp.setCursor(4,1);                    //Posiciona cursor na coluna 1, linha 2
              //  disp.print("ENCHENDO.....");        //Imprime mensagem

disp.clear();

disp.setCursor(0,0);
disp.print(" REMOVE OXIGENIO");

digitalWrite(co2,LOW); //liga co2
delay(2000);

digitalWrite(co2,HIGH); // fecha co2
delay(500);  

digitalWrite(alivior,LOW); // abre escape rapido
delay(4000); 
 
digitalWrite(alivior,HIGH); // fecha escape rapido
delay(500);
disp.clear();

// ******** GARRAFA SEM O2

disp.setCursor(0,0);
disp.print(" INJETA CO2");
digitalWrite(co2,LOW); // liga co2
delay(2000);
digitalWrite(co2,HIGH); // fecha co2
delay(1000);
disp.clear(); 

// *******    GARRAFA PRESSURIZADA COM CO2

digitalWrite(beer,LOW); // abre beer
delay(500);
disp.setCursor(0,0);
disp.print("ENCHENDO....");
digitalWrite(alivior,LOW); // abre escape lento
delay(20000);
disp.clear();

disp.setCursor(0,0);                 
disp.print("AGUARDE");


digitalWrite(beer,HIGH); // fecha beer
delay(2000);
digitalWrite(alivior,HIGH); // fecha escape lento
delay(400);        
disp.clear();

delay(500);
disp.setCursor(0,0);                 
disp.print("GARRAFA CHEIA");
        
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(50);
 delay(500);
 digitalWrite(buzzer,HIGH);
 delay(500);
 digitalWrite(buzzer,LOW);
 delay(50);
 disp.clear();
 disp.print("PROXIMA GARRAFA");
 delay(3000);
 disp.clear();

 
//******** GARRAFA CHEIA
 
break;                                  //Break
               

     
      } //end switch set1
  
   } //end butM
 

} // FECHA ETAPA 500ML

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço