Caros amigos, tento escrever um programa ( sou muito verde ainda.. ) que quando o ValorSensor atingir o SetPoint ele liga o Buzzer e este só desliga qdo o ValorSensor chegar em SetPoint2
Mas não consigo.. tentei usar a função While mas deu errado..
Cheguei só até onde o Buzzer liga qdo o ValorSensor chega em SetPoint e desliga qdo sai dele..
Alguma ajuda?
/* projeto de automação de bomba de agua
Propósito: estabelecer dois valores em SetPoint
e SetPoin2 e fazer com que o Buzzer toque entre os dois */
#include <LiquidCrystal.h> // Inclui a biblioteca para utilizar o LCD.
#define sensor 0 // Define o pino A0 como “sensor”
int ValorSensor; // Variável para ler o sinal do pino do Arduino
int Buzzer = 10; // Pino no qual o buzzer está conectado, no caso 10
int SetPoint = 300; // Set point de temperatura, acima desse valor dispara o alarme
int SetPoint2 = 350; // Set point de temperatura, acima desse valor dispara o alarme
float Volume; // Variável que recebe o valor convertido para o volume.
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
/* Esta função acima declara quais os pinos do Arduino serão utilizados para o controle do LCD */
void setup()
{
lcd.begin(16, 2); // Diz para o Arduino que o display é 16x2.
lcd.print("Litros: "); // Manda o texto para a tela do display
pinMode(Buzzer, OUTPUT); // Configura o pino do buzzer como saída
Serial.begin(9600); // Cria a comunicação serial
}
void loop()
{
ValorSensor = analogRead (sensor); /* Manda o Arduino ler o pino e armazena o valor em “ValorSensor”. */
Volume =(65*ValorSensor)/488; /* Converte o valor de tensão em
Volume e armazena na variável “Volume” */
lcd.setCursor(0, 1); // Move o cursor do display para a segunda linha.
lcd.print(Volume); // Exibe o valor de Volume no display.
lcd.print(" L"); // Escreve “L” para dizer que a escala é Litros.
delay(200); /* Aguarda 0,2 segundo para efetuar uma nova leitura de
volume. */
Serial.print("Valor do Sensor = "); // Escreve Valor do Sensor = na serial
Serial.println(ValorSensor); // Escreve o valor do sensor na serial
if (ValorSensor < SetPoint) {
digitalWrite(Buzzer, HIGH); // O valor lido é menor que o set point, aciona o alarme
}
else {
digitalWrite(Buzzer, LOW); // O valor lido é maior que o set point, não aciona o alarme
}
}
Tags:
tente usar isso
if (ValorSensor >= SetPoint && ValorSensor < SetPoint2){
digitalWrite(Buzzer, HIGH);
}else{
digtalWrite(Bizzer, LOW);
}
Prezado João, muito obrigado por tentar me ajudar..
Bem, não funcionou conforme o esperado mas talvez eu é não tenha me expressado direito.
Com seu programa o que aconteceu é que quando o ValorSensor entra na faixa entre SetPoint e SetPoint2 o Buzzer vai a HIGH
Na verdade ( trata-se de um controle para nível de H2O para aquários ) o que eu preciso é que quando o ValorSensor desça dos valores mais altos, passe por SetPoint2 sem nada acontecer e ao atingir o SetPoint ele dispare o Buzzer que ficará em High enquanto sobe o valor sensor até atingir o SetPoint2, quando então vai a LOW
O típico funcionamento de uma bomba de H2O
Por isso havia tentado usar o While.. pensei em alguma coisa tipo quando atinge o SetPoint ele entra em While até atingir o SetPoint2.. mas não sei se está certo nem escrever ( tentei de alguma maneiras e só deu pau )..
Abcs e muito grato
if (ValorSensor <= SetPoint)
{
digitalWrite(Buzzer, HIGH);
}
if (ValorSensor >= SetPoint2)
{
digitalWrite (Buzzer, LOW);
}
Tenta assim
Luiz, muito obrigado amigo. Funcionou...
Vou tentar me aprofundar em programação Arduíno para evoluir no meu projetinho, mas a funcionalidade mínima já é essa.. Vc foi ótimo.
Valeu
;)
Por nada, estamos aqui pra isso!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por