Estou projeto de um dosador, e tenho o programa em c para o Arduíno, a ideia é fazer com que tenham três válvulas (as bombas) e que elas abram em tempos diferentes e separadas (primeira e segunda dosam dois líquidos, e a terceira abre pra mistura):

int bombaum = 3;
int bombadois = 5;
int bombatres = 6;
int botaoliga = 9;

void setup()
{
  pinMode (bombaum, OUTPUT);
  pinMode (bombadois, OUTPUT);
  pinMode (bombatres, OUTPUT);
  pinMode (botaoliga, INPUT);
}

void loop()
{
   if (botaoliga == 1)
   {
       delay(2000); //espera dois segundos

       digitalWrite (3,HIGH); //abre bomba 1 por 2 segundos
       delay(2000); //espera dois segundos
       
       digitalWrite (3,LOW); //fecha bomba 1

      delay(2000); //espera dois segundos

       digitalWrite (5,HIGH); //abre bomba 2
       delay(3000); // 3 segundos

      digitalWrite (5,LOW); //fecha bomba 2

      delay(2000); //espera dois segundos

      digitalWrite (6,HIGH); //abre bomba 3
      delay(5000); //5 segundos

     digitalWrite (6,LOW); //fecha bomba 3

     delay(2000); //espera dois segundos
   }
}

Preciso adicionar o display no dosador, minha intenção é que a pessoa escolha o programa através do display, ou seja, serão três programas igual o de cima que terão tempos de aberturas das bombas diferentes, o que, automaticamente, irá mudar a quantidade do liquido dosado. Como faço essa programação do display? Como coloco os três programas dentro (no display só vai aparecer 50ml, 100ml, 200ml como nomes dos programas) para a pessoa escolher a opção? E se eu quiser colocar um botão de emergência, como faz?

Exibições: 465

As respostas para este tópico estão encerradas.

Respostas a este tópico

OI Caroline, bom dia.

Este é aquele código que corrigi, do seu outro post?

Se for e estiver OK, sugiro colocar a palavra "Resolvido" antes do título do outro post.

Agora voce que adicionar no codigo um LCD com 3 rotinas de tempos diferentes

e um botão de "ESP"  ("Emergency Stop Program") . Correto?

Rui

Caroline, boa noite.

ESP =   Electronic Stability Program ?

Rui

Caroline, bom dia.

Coisa de velho, esquece tudo. kkk

Vou verificar o codigo. Ok.

Rui

Oi Caroline:

Qual recurso voce pretende usar para mudar de um programa para o outro?

No seu post anterior, voce fala os tempos em  "Segundos" e 4 tempos diferentes . Ok?

 2seg, 3seg, 5seg e 2seg.

Agora voce fala em ml.

Vou fazer as rotinas em segundos assim  :   200ml  =   2seg,        3seg,     5seg e 2seg.

                                                                 100ml =     1seg,     1,5seg,   2,5seg e 2seg.

                                                                   50ml =   0,5seg,   0,75seg, 1,25seg e 2seg.

Depois voce modifica os valores.

Rui

Oi caroline, veja se isto resolve.

Rui

#include <LiquidCrystal.h> // Biblioteca do LCD
LiquidCrystal lcd(13,12,11,10,9,8); // Pinos do LCD

const int bombaum = 5; // Mudei
const int bombadois = 6; // Mudei
const int bombatres = 7; // Mudei

const int botao_prgm1 = 0;
const int botao_prgm2 = 1;
const int botao_prgm3 = 2;
const int botaoliga = 3; // Mudei para 3 por usar este pino no LCD
const int EPO = 4; // ESP kkkkk

unsigned int debounceDelay = 5; // Tempo de debounce
unsigned int Flagbotaoliga;
unsigned int FlagEPO;
unsigned int Flagbotao_prgm1;
unsigned int Flagbotao_prgm2;
unsigned int Flagbotao_prgm3;

unsigned int ml_50_T1 = 500;
unsigned int ml_50_T2 = 750;
unsigned int ml_50_T3 = 1250;
unsigned int ml_50_T4 = 2000;

unsigned int ml_100_T1 = 1000;
unsigned int ml_100_T2 = 1500;
unsigned int ml_100_T3 = 2500;
unsigned int ml_100_T4 = 2000;

unsigned int ml_200_T1 = 1000;
unsigned int ml_200_T2 = 1500;
unsigned int ml_200_T3 = 2500;
unsigned int ml_200_T4 = 2000;

void setup()
{
lcd.begin(20, 2); // Inicializa LCD de 20 posiçoes e 2 linhas
lcd.setCursor(0,0); // Posiciona cursor na 1 posição da 1a linha
lcd.clear();
lcd.print ("Dosador");
pinMode (bombaum, OUTPUT);
pinMode (bombadois, OUTPUT);
pinMode (bombatres, OUTPUT);
pinMode (botaoliga, INPUT);
pinMode (EPO, INPUT);
pinMode (botao_prgm1, INPUT);
pinMode (botao_prgm2, INPUT);
pinMode (botao_prgm3, INPUT);
digitalWrite(botaoliga, HIGH); // Puul-Up Entrada
digitalWrite(EPO, HIGH); // Puul-Up Entrada
digitalWrite(botao_prgm1, HIGH); // Puul-Up Entrada
digitalWrite(botao_prgm2, HIGH); // Puul-Up Entrada
digitalWrite(botao_prgm3, HIGH); // Puul-Up Entrada
lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
lcd.print ("Deslig.");
Flagbotaoliga = 0;
}

void loop()
{
/* //For debug
digitalWrite(bombaum, HIGH); // Puul-Up Entrada
digitalWrite(bombadois, HIGH); // Puul-Up Entrada
digitalWrite(bombatres, HIGH); // Puul-Up Entrada
delay(100);
digitalWrite(bombaum, LOW); // Puul-Up Entrada
digitalWrite(bombadois, LOW); // Puul-Up Entrada
digitalWrite(bombatres, LOW); // Puul-Up Entrada
delay(100);
*/
// ================= botaoliga deboucing ===================
if(!digitalRead(botaoliga))
{
delay(debounceDelay);
if(!digitalRead(botaoliga))
{
Flagbotaoliga = 1;
FlagEPO = 0;
lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
lcd.print ("Ligado ");

while(!digitalRead(botaoliga)) // Espera pela liberação do switch
delayMicroseconds(1);
}
}
// ================= EPO deboucing ===================
if(!digitalRead(EPO))
{
delay(debounceDelay);
if(!digitalRead(EPO))
{
FlagEPO = 1;
Flagbotaoliga = 0;
lcd.setCursor(9,0); // Posiciona cursor na 10a. posição da 2a linha
lcd.print ("Deslig. ");
lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
lcd.print (" ");


while(!digitalRead(EPO)) // Espera pela liberação do switch
delayMicroseconds(1);
}
}

if (Flagbotaoliga == 1)
{
if (Flagbotao_prgm1 == 1) Program50ml();
if (Flagbotao_prgm2 == 1) Program100ml();
if (Flagbotao_prgm3 == 1) Program200ml();


// ================= botao_prgm1 deboucing ===================
if(!digitalRead(botao_prgm1))
{
delay(debounceDelay);
if(!digitalRead(botao_prgm1))
{
Flagbotao_prgm1 = 1;
Flagbotao_prgm2 = 0;
Flagbotao_prgm3 = 0;
lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
lcd.print ("Programa 50ml ");

while(!digitalRead(botao_prgm1)) // Espera pela liberação do switch
delayMicroseconds(1);
}
}
// ================= botao_prgm2 deboucing ===================
if(!digitalRead(botao_prgm2))
{
delay(debounceDelay);
if(!digitalRead(botao_prgm2))
{
Flagbotao_prgm2 = 1;
Flagbotao_prgm1 = 0;
Flagbotao_prgm3 = 0;
lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
lcd.print ("Programa 100ml");

while(!digitalRead(botao_prgm2)) // Espera pela liberação do switch
delayMicroseconds(1);
}
}
// ================= botao_prgm3 deboucing ===================
if(!digitalRead(botao_prgm3))
{
delay(debounceDelay);
if(!digitalRead(botao_prgm3))
{
Flagbotao_prgm3 = 1;
Flagbotao_prgm1 = 0;
Flagbotao_prgm2 = 0;
lcd.setCursor(0,1); // Posiciona cursor na 1a. posição da 2a linha
lcd.print ("Programa 200ml");

while(!digitalRead(botao_prgm3)) // Espera pela liberação do switch
delayMicroseconds(1);
}
}
}
}

// ================= programa 50ml ===================
void Program50ml()
{
digitalWrite (3,HIGH); //abre bomba 1
delay(ml_50_T2); // Delay
digitalWrite (3,LOW); //fecha bomba 1

delay(ml_50_T4); //espera dois segundos

digitalWrite (5,HIGH); //abre bomba 2
delay(ml_50_T3); // Delay

digitalWrite (5,LOW); //fecha bomba 2

delay(ml_50_T4); //espera dois segundos

digitalWrite (6,HIGH); //abre bomba 3
delay(ml_50_T3); // Delay

digitalWrite (6,LOW); //fecha bomba 3

delay(ml_50_T4); //espera dois segundos
Flagbotao_prgm1 =0;
}

// ================= programa 100ml ===================
void Program100ml()
{
digitalWrite (3,HIGH); //abre bomba 1
delay(ml_100_T1); // Delay
digitalWrite (3,LOW); //fecha bomba 1

delay(ml_100_T4); //espera dois segundos

digitalWrite (5,HIGH); //abre bomba 2
delay(ml_100_T2); // Delay

digitalWrite (5,LOW); //fecha bomba 2

delay(ml_100_T4); //espera dois segundos

digitalWrite (6,HIGH); //abre bomba 3
delay(ml_100_T3); // Delay

digitalWrite (6,LOW); //fecha bomba 3

delay(ml_100_T4); //espera dois segundos
Flagbotao_prgm2 =0;
}

// ================= programa 200ml ===================
void Program200ml()
{
digitalWrite (3,HIGH); //abre bomba 1
delay(ml_200_T1); // Delay
digitalWrite (3,LOW); //fecha bomba 1

delay(ml_200_T4); //espera dois segundos

digitalWrite (5,HIGH); //abre bomba 2
delay(ml_200_T2); // Delay

digitalWrite (5,LOW); //fecha bomba 2

delay(ml_200_T4); //espera dois segundos

digitalWrite (6,HIGH); //abre bomba 3
delay(ml_200_T3); // Delay

digitalWrite (6,LOW); //fecha bomba 3

delay(ml_200_T4); //espera dois segundos
Flagbotao_prgm3 =0;
}

Caroline, de um retorno se funcionou ou não.

Pode ser útil para outros garagistas também.

Rui

Rui!Poderia me dar uma mão?Coisa simples

Rui, assim que eu conseguir testar no meu projeto, eu dou um retorno ok!? Obrigada.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço