Ir ao conteúdo
  • Cadastre-se

Arduino Programa em arduino para café expresso


Posts recomendados

Olá, galera estou montando um programa em arduino de uma máquina de café expresso. Porém tenho umas dúvidas e não sei como resolver, o programa está praticamente pronto, eu só gostaria que no display ficasse aparecendo sempre a escrita ( CAFÉ EXPRESSO), e quando alguém apertasse algum botão então apareceria o  menu de opções.

Outro problema que eu tenho e não sei como resolver é por exemplo; tenho a opção de , CAFÉ EXPRESSO FORTE, e tenho também a meia dose do café expresso forte, no display eles aparecem em sequencia, eu queria por tipo um menu que eu selecionaria " café expresso forte" e dentro desse aparecesse " 1/2 dose café expresso forte e dose completa do café. A mais uma coisinha tem como por que em quanto a máquina está preparando a receita aparecesse no display a palavra "PROCESSANDO". obrigado.

#include <LiquidCrystal.h>

const int b1 = 2;    //botao para cima
const int b2 = 3;    //botao para baixo
int  b3 = A4;   // fichas
const int  b4 = A5;  // enter

const int agua = 10;
const int leite = 11;
const int chocolate = 12;
const int cafe = 13;
const int res_agua = A2;   //reservatorio agua
const int res_leite = A3;  //reservatorio leite


int sensor_agua = A0;    // agua
int sensor_leite = A1;    //leite
int valor_agua = 0;
float temp_agua = 0;
int valor_leite = 0;
float temp_leite = 0;

int fichas = 0;
int enter = 0;
int alto = 0;
int baixo = 0;

int x = 0;
int retencao = 0;
int contador = 0;
int saldo = 0;
int credito = 0;

LiquidCrystal lcd(9, 8, 7, 6, 5, 4);

void setup()
{
  lcd.begin(16, 2);

  pinMode(alto, INPUT);
  pinMode(baixo, INPUT);
  pinMode(sensor_agua, INPUT);
  pinMode(sensor_leite, INPUT);
  pinMode(fichas, INPUT);
  pinMode(enter, INPUT);

  pinMode(agua, OUTPUT);
  pinMode(leite, OUTPUT);
  pinMode(chocolate, OUTPUT);
  pinMode(cafe, OUTPUT);
  pinMode(res_agua, OUTPUT);
  pinMode(res_leite, OUTPUT);

  lcd.setCursor (0, 0);
  lcd.print ("CAFE EXPRESSO");
  lcd.setCursor(0, 1);
  lcd.print("ESCOLHA A OPCAO");
   delay(2000); // ver a necessidade dessa opção
   Serial.begin (9600);
   

}

void loop()
{
  alto = digitalRead(b1);     // leitura dos botões.
  baixo = digitalRead(b2);
  fichas = digitalRead(b3);
  enter = digitalRead(b4);


  valor_agua = analogRead(sensor_agua);
  temp_agua = (valor_agua * 0.00488);
  temp_agua = (temp_agua * 100);
  Serial.println(temp_agua);    
  delay (300);


  valor_leite = analogRead(sensor_leite);
  temp_agua = (valor_leite * 0.00488);
  temp_leite = (temp_leite * 100);
  Serial.println(temp_leite);
    delay(300);


  if (alto == HIGH)       //contador do menu
  {
    contador = contador + 1;
  }

  if (contador > 7)
  {
    delay (50);
    contador = 0;
  }

  if (baixo == HIGH)
  {
    delay (50);
    contador = contador - 1;
  }

  if (contador < 0)
  {
    delay (50);
    contador = 7;
  }


  if (enter == HIGH)
  {
    delay (50);
    retencao = 1;
  }


  if (fichas == HIGH)
  {
    delay(100);
    
    saldo = saldo + 1;  /// descição do saldo
  }

  lcd.setCursor(0, 0);
  lcd.print("                   ");
  lcd.setCursor(0, 0);
  lcd.print("saldo: ");
  lcd.setCursor(6, 0);
  lcd.print(saldo);

  // inicio do menu
  if (contador == 0)            //cafe extra forte
  {
    lcd.setCursor(0, 1);
    lcd.print("                 ");
    lcd.setCursor(0, 1);
    lcd.print("CAFE EXTRA FORTE");
    delay(100);
  }

  if ((contador == 0) && (retencao == 1) && (saldo < 4))     //informando a falta de fichas
  {
    credito = 4 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
    lcd.print("saldo +   ");
    lcd.setCursor(8, 0);
    lcd.print(credito);
    delay(2500);
    retencao = 0;
  }


  if ((contador == 0) && (retencao == 1) && (saldo >= 4))      //abre valvula

  {

    digitalWrite(res_agua, HIGH);
    while (temp_agua < 90)
    {

      valor_agua = analogRead(sensor_agua);
      temp_agua = (valor_agua * 0.00488);
      temp_agua = (temp_agua * 100) + 60;
      delay (300);
    }

    digitalWrite(res_agua, LOW);

    for (int i = 0; i < 2; i++)
    {
      digitalWrite(cafe, HIGH);
      delay(500);
      digitalWrite(cafe, LOW);
      digitalWrite(agua, HIGH);
      delay(2500);
      digitalWrite(agua, LOW);
    }
    saldo = saldo - 4;   // verificar o saldo 4
    delay(100);
    retencao = 0;

  }
  // meia dose extra forte

  if (contador == 1)
  {
    lcd.setCursor(0, 1);
    lcd.print("                  ");
    lcd.setCursor(0, 1);
    lcd.print("1/2 EXTRA FORTE");
    delay(100);
  }


  if ((contador == 1) && (retencao == 1) && (saldo < 2) )     // falta de fichas
  {
    credito = 2 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
   lcd.print("saldo +   ");
   lcd.setCursor(8, 0);
   lcd.print(credito);
    delay(2000);
    retencao = 0;
  }

  if ((contador == 1) && (retencao == 1) && (saldo >= 2) )       //abre valvulas
  {
    digitalWrite(res_agua, HIGH);

    while (temp_agua <= 90)
    {

      valor_agua = analogRead(sensor_agua);
      temp_agua = (valor_agua * 0.00488);
      temp_agua = (temp_agua * 100) + 60;
      delay (300);
    }

    digitalWrite(res_agua, LOW);

    digitalWrite(cafe, HIGH);
    delay(500);
    digitalWrite(cafe, LOW);
    digitalWrite(agua, HIGH);
    delay(2500);
    digitalWrite(agua, LOW);

    saldo = saldo - 2;

    delay(100);
    retencao = 0;

  }

  if (contador == 2)     // cafe fraco
  {
    lcd.setCursor(0, 1);
    lcd.print("                  ");
    lcd.setCursor(0, 1);
    lcd.print("EXPRESSO FRACO");
    delay(100);
  }

  if ((contador == 2) && (retencao == 1) && (saldo < 2) )     //fichas
  {
    credito = 2 - saldo;
    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
   lcd.print("saldo +    ");
    lcd.setCursor(8, 0);
   lcd.print(credito);
    delay(2500);
    retencao = 0;
  }

  if ((contador == 2) && (retencao == 1) && (saldo >= 2) )     //valvulas
  {

    digitalWrite(res_agua, HIGH);

    while (temp_agua < 90)
    {
      valor_agua = analogRead(sensor_agua);
      temp_agua = (valor_agua * 0.00488);
      temp_agua = (temp_agua * 100) + 60;
      delay(300);
    }

    digitalWrite(res_agua, LOW);

    for (int i = 0; i < 2; i++)
    {
      digitalWrite(cafe, HIGH);
      delay(250);
      digitalWrite(cafe, LOW);
      digitalWrite(agua, HIGH);
      delay(2500);
      digitalWrite(agua, LOW);
    }
    saldo = saldo - 2;

    delay(100);
    retencao = 0;

  }

  if (contador == 3)       // cappuccino
  {
    lcd.setCursor(0, 1);
    lcd.print("                 ");
    lcd.setCursor(0, 1);
    lcd.print("CAPPUCCINO");
    delay(100);
  }

  if ((contador == 3) && (retencao == 1) && (saldo < 4))     // fichas
  {
    credito = 4 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                  ");
    lcd.setCursor(0, 0);
  lcd.print("saldo +   ");
   lcd.setCursor(8, 0);
   lcd.print(credito);
    delay(3000);
    retencao = 0;
  }

  if ((contador == 3) && (retencao == 1) && (saldo >= 4) )         //abre valvulas
  {
    digitalWrite(res_leite, HIGH);
    digitalWrite(res_agua, HIGH);

    while ((temp_agua < 70) && (temp_leite < 70) )
    {

      valor_agua = analogRead(sensor_agua);
      temp_agua = (valor_agua * 0.00488);
      temp_agua = (temp_agua * 100) + 60;
      delay (300);

      valor_leite = analogRead(sensor_leite);
      temp_leite = (valor_leite * 0.00488);
      temp_leite = (temp_leite * 100);
       delay(300);
    }

    digitalWrite(res_leite, LOW);
    digitalWrite(res_agua, LOW);

    for (int i = 0; i < 2; i++)    // ver as porcentagens
    {
      digitalWrite(cafe, HIGH);
      delay(350);
      digitalWrite(cafe, LOW);
      digitalWrite(chocolate, HIGH);
      delay(750);
      digitalWrite(chocolate, LOW);
      digitalWrite(agua, HIGH);
      delay(1500);
      digitalWrite(agua, LOW);
      digitalWrite(leite, HIGH);
      delay(1000);
      digitalWrite(leite, LOW);
    }
    saldo = saldo - 4;

    delay(100);
    retencao = 0;

  }

  if (contador == 4)       // leite com chocolate
  {
    lcd.setCursor(0, 1);
    lcd.print("                  ");
    lcd.setCursor(0, 1);
    lcd.print("LEITE & CHOCOLATE");
    delay(100);
  }

  if ((contador == 4) && (retencao == 1) && (saldo < 4) )    // fichas
  {
    credito = 4 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                  ");
    lcd.setCursor(0, 0);
    lcd.print("saldo +   ");
    lcd.setCursor(8, 0);
   lcd.print(credito);
    delay(3000);
    retencao = 0;
  }

  if ((contador == 4) && (retencao == 1) && (saldo >= 4) )     //abre valvulas
  {

    digitalWrite(res_leite, HIGH);

    while (temp_leite < 29)
    {

      valor_leite = analogRead(sensor_leite);
      temp_leite = (valor_leite * 0.00488);
      temp_leite = (temp_leite * 100) ;
       delay(300);
    }
    digitalWrite(res_leite, LOW);

    for (int i = 0; i < 2; i++)
    {
      digitalWrite(chocolate, HIGH);
      delay(500);
      digitalWrite(chocolate, LOW);
      digitalWrite(leite, HIGH);
      delay(2500);
      digitalWrite(leite, LOW);
    }
    saldo = saldo - 4;

    delay(250);
    retencao = 0;

  }


  if (contador == 5)       //meia dose leite e chocolate
  {
    lcd.setCursor(0, 1);
    lcd.print("                  ");
    lcd.setCursor(0, 1);
    lcd.print("1/2 LEITE & CHOCOLATE");
    delay(100);
  }

  if ((contador == 5) && (retencao == 1) && (saldo < 2) )  // fichas
  {
    credito = 2 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
    lcd.print("saldo +   ");
    lcd.setCursor(8, 0);
  lcd.print(credito);
    delay(2500);
    retencao = 0;
  }

  if ((contador == 5) && (retencao == 1) && (saldo >= 2))     //valvulas
  {
    digitalWrite(res_leite, HIGH);
    while (temp_leite < 29)
    {
      valor_leite = analogRead(sensor_leite);
      temp_leite = (valor_leite * 0.00488);
      temp_leite = (temp_leite * 100) ;
      delay(200);
    }
    digitalWrite(res_leite, LOW);

    digitalWrite(chocolate, HIGH);
    delay(500);
    digitalWrite(chocolate, LOW);
    digitalWrite(leite, HIGH);
    delay(2500);
    digitalWrite(leite, LOW);

    saldo = saldo - 2;

    delay(100);
    retencao = 0;

  }


  //leite puro

  if (contador == 6)
  {
    lcd.setCursor(0, 1);
    lcd.print("                 ");
    lcd.setCursor(0, 1);
    lcd.print("LEITE PURO");
    delay(100);
  }

  if ((contador == 6) && (retencao == 1) && (saldo < 2) )   // fichas
  {
    credito = 2 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
    lcd.print("saldo +   ");
   lcd.setCursor(8, 0);
    lcd.print(credito);
    delay(2500);
    retencao = 0;
  }

  if ((contador == 6) && (retencao == 1) && (saldo >= 2) )      //abrir valvulas (fazendo cafe)
  {
    digitalWrite(res_leite, HIGH);
    while (temp_leite < 36)
    {
      valor_leite = analogRead(sensor_leite);
      temp_leite = (valor_leite * 0.00488);
      temp_leite = (temp_leite * 100) ;
      delay(300);
    }
    digitalWrite(res_leite, LOW);

    for (int i = 0; i < 2; i++)
    {

      digitalWrite(leite, HIGH);
      delay(2500);
      digitalWrite(leite, LOW);
    }
    saldo = saldo - 2;

    delay(100);
    retencao = 0;

  }

  // meia dose leite

  if (contador == 7)
  {
    lcd.setCursor(0, 1);
    lcd.print("                 ");
    lcd.setCursor(0, 1);
    lcd.print("1/2 LEITE");
    delay(100);
  }

  if ((contador == 7) && (retencao == 1) && (saldo < 1) )  // fichas
  {
    credito = 1 - saldo;

    lcd.setCursor(0, 0);
    lcd.print("                 ");
    lcd.setCursor(0, 0);
    lcd.print("saldo +   ");
    lcd.setCursor(8, 0);
    lcd.print(credito);
    delay(2500);
    retencao = 0;
  }


  if ((contador == 7) && (retencao == 1) && (saldo >= 1) )     // valvulas
  {
    digitalWrite(res_leite, HIGH);
    while (temp_leite < 36)
    {
      valor_leite = analogRead(sensor_leite);
      temp_leite = (valor_leite * 0.00488);
      temp_leite = (temp_leite * 100) ;
      delay(300);
    }
    digitalWrite(res_leite, LOW);

    digitalWrite(leite, HIGH);
    delay(2500);
    digitalWrite(leite, LOW);

    saldo = saldo - 1;

    delay(100);
    retencao = 0;
  }

}

 

Link para o comentário
Compartilhar em outros sites

O negocio é que você colocou teu menu dentro do void loop e a função do menu vai ser chamada constantemente o melhor seria você criar outra função void do lado de fora do loop principal colocar algum while para parar tua função para os menus. Outra forma é você usar alguma biblioteca "menu para arduino". Estou reparando que tem muitos if e poucos while que parem o código, mas enfim...mas se você quer que só escreva em determinados momentos coloque eles dentro dos ifs fora de condicionais e dentro do loop principal vai dar o problema que você relata .

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!