Go Down

Topic: Ajuda estrutura programa de esteira (Read 226 times) previous topic - next topic

vinimoura

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, pois não consegue realizar as verificações (if) independentemente

Podem me ajudar ?

Segue código, o qual já alterei por diversas vezes:


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

HugoPT

Boas.
Usa as tags proprias para postares codigo de forma que fique legivel a quem o lê em proximos posts.
Em relação ao teu problema o que estas a constactar deve-se a esta linha:
Code: [Select]

while (analogRead(A0) > 236);

O teu programa fica aqui parado ate que esta condição não seja verdadeira, ou seja a LDR não esteja a ser incidida pelo laser...

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

vinimoura

Hugo, boa noite.

Muito obrigado. Realmente o problema era na condição while, porem com ela isolada meu contador faz a contagem infinitamente, o que poderia resolver neste caso ?

Outra coisa que não encontrei resposta é como eu posso fazer com que meu relé desligue após 60s se não houver nenhuma contagem de objeto neste periodo.

Abraço,

bubulindo

This... is a hobby.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy