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

}

}

Exibições: 428

Responder esta

Respostas a este tópico

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!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço