Sou iniciante e realizei a união de alguns programas para montar uma esteira contadora de peças, utilizando Laser e LDR como sensores, LCD para amostragem do valor, botão de reset da contagem, e botão on/off para acionamento do motor através de relé. 

A contagem funciona normalmente.Porem estou tendo problemas com o comando de reset de contagem, e o comando de liga e desliga do relé do motor DC, ou seja, eles não funcionam se o laser ou qualquer outra fonte de luz estiver incidindo sobre o LDR, assim tendo de cobrir para funcionar.


Acredito que seja algum erro na estrura do programa, na hora de realizar as comparações (if). 

Podem me ajudar ?

Segue o código abaixo:

#include <LiquidCrystal.h>
#define rele1 8
#define chPin 7

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int contador = 0;
int valorCalibrado = 236;
int pino_botao_reset = A1;
int estadobotao = 0;
boolean chVal = 1;
boolean releVal = 1;

void setup()
{
  Serial.begin(9600);

  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Esteira");
  lcd.setCursor(0, 1);
  pinMode(pino_botao_reset, INPUT);
  lcd.print("Num Pecas: ");
  {
    pinMode(rele1, OUTPUT);
    digitalWrite(rele1, LOW);
    pinMode(chPin, INPUT);
    digitalWrite(chPin, HIGH);
  }

}

void loop()
{
  if (analogRead(A0) > 236)// objeto passando entre o LDR e o LED
  {
    contador++;//Incrementa o contador em 1

    Serial.println(contador);
    while (analogRead(A0) > 236);
    {
    }
    delay(500);//Aguarda 500 ms.
    lcd.setCursor(11, 1);
    lcd.print(contador);
  }
  {
    estadobotao = digitalRead(pino_botao_reset);
    if (estadobotao != 1)
    {
      contador = 0;
      lcd.setCursor(11, 1);
      lcd.print("   ");
    }
  }
  {
    chVal = digitalRead(chPin);
    if (chVal == 0) {
      releVal = !releVal;
      digitalWrite(rele1, releVal);
      delay(500);

    }
    delay(100);
  }
}

Exibições: 298

Responder esta

Respostas a este tópico

Sugiro vc arrumar a identação, ou seja: arrumar a posição das "{" "}" assim fica mais facil entender.

O que acontece é que vc tem um if que acina parte do programa se tiver alguma coisa entre os sensores e dentro dele um if verificando o pino de reset.

É preciso que o pino de reset seja verificado independente de se tem ou não um objeto na esteira.

Coloque esse if fora do colchete do outro.

Eduardo, obrigado

Arrumei a identação do programa, e também os if's porem ainda estou com o mesmo problema .

 Não consigo verificar o pino reset e nem o on/off do relé independetemente do objeto na esteira.

segue nova estrutura, agradeço se puder me ajudar.

#include <LiquidCrystal.h>
#define rele1 8
#define chPin 7

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int contador = 0;
int valorCalibrado = 236;
int pino_botao_reset = A1;
int estadobotao = 0;
boolean chVal = 1;
boolean releVal = 1;

void setup() {
  Serial.begin(9600);

  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Esteira");
  lcd.setCursor(0, 1);
  pinMode(pino_botao_reset, INPUT);
  lcd.print("Num Pecas: ");
  pinMode(rele1, OUTPUT);
  digitalWrite(rele1, LOW);
  pinMode(chPin, INPUT);
  digitalWrite(chPin, HIGH);

}

void loop() {

  if (analogRead(A0) > 236) {
    contador++;
    Serial.println(contador);
    while (analogRead(A0) > 236);
    delay(250);
    lcd.setCursor(11, 1);
    lcd.print(contador);
  }

  estadobotao = digitalRead(pino_botao_reset);
  if (estadobotao != 1) {
    contador = 0;
    lcd.setCursor(11, 1);
    lcd.print("   ");
  }

  chVal = digitalRead(chPin);
  if (chVal == 0) {
    releVal = !releVal;
    digitalWrite(rele1, releVal);
    delay(500); {
      delay(100);
    }
  }
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço