Ir ao conteúdo

Posts recomendados

Postado

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;
  }

}

 

Postado

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 .

  • 1 ano depois...
Postado

Olá, gostaria de saber se você deu andamento ao projeto e se teria como me mandar a ligações e os sensores que você usou pois to com um projeto parecido

desde já agradeço

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!