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);
}
}
Tags:
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
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");
}
}
Oi LAGFB, boa tarde.
PFNCCNADTDT .
http://labdegaragem.com/forum/topics/por-favor-n-o-cole-code-na-are...
e
http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
Rui
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por