Problemas com meu código

Cheguei num ponto onde estou tendo dificuldades para finalizar o meu código. Ele será usado da seguinte maneira: Será feito para contar a entrada e saída de abelhas de uma colmeia através passagem delas na frente de um sensor de luminosidade. Porém a questão é: ao passar pelo sensor ele conta várias vezes a depender do tempo que a "abelha" fica na frente dele, mas isso pensei em resolver com o debounce. A outra questão é que o estado não permanece após a passagem das abelhas pelo sensor e não cheguei numa solução para isso ainda. Ou seja, se eu passo no sensor de fora, o estado de entrada só fica ativo enquanto estou na frente do sensor e não logo após. Como vocês resolveriam isso?

#define sensorfora 6
#define sensordentro 7
#define tempo 100

int abelhasEntrando = 0;
int abelhasSaindo = 0;

bool sinalFora = digitalRead(sensorfora); // negativa ou não? (!!!!!)
bool sinalDentro = digitalRead(sensordentro);

// INCLUSÃO DE BIBLIOTECAS
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// DEFINIÇÕES
#define endereco  0x27 // Endereços comuns: 0x27, 0x3F
#define colunas   16
#define linhas    2

// INSTANCIANDO OBJETOS
LiquidCrystal_I2C lcd(endereco, colunas, linhas);


enum estado {
ABELHA_SAINDO,
ABELHA_ENTRANDO,
SEM_MOVIMENTO,
};

void setup() {

pinMode(sensorfora,INPUT);
pinMode(sensordentro,INPUT);
Serial.begin(9600);
iniciaVisor();

}

void loop() {
  // Atualiza a leitura dos sensores
  sinalFora = digitalRead(sensorfora);
  sinalDentro = digitalRead(sensordentro);

  switch (estado()) {
    case SEM_MOVIMENTO:
      Serial.println("sem movimento");
      break;

    case ABELHA_SAINDO:
      Serial.println("abelhasSaindo");
      if (sinalFora) { //&& !sinalDentro (vendo a possibilidade disso)
        abelhasSaindo++;
        Serial.println(abelhasSaindo);
        lcd.setCursor(7, 1);
        lcd.print(abelhasSaindo);
      }
      //delay(tempo);
      break;

    case ABELHA_ENTRANDO:
      Serial.println("abelhasEntrando");
      if (sinalDentro) { //  && !sinalFora (vendo a possibilidade disso)
        abelhasEntrando++;
        Serial.println(abelhasEntrando);
        lcd.setCursor(10, 0);
        lcd.print(abelhasEntrando);
      }
      //delay(tempo);
      break;
      
  }
}

int estado() {
  if (sinalFora) {
    return ABELHA_ENTRANDO;
  } else if (sinalDentro) {
    return ABELHA_SAINDO;
  } else {
    return SEM_MOVIMENTO;
  }
}


void iniciaVisor(){
 lcd.init(); // INICIA A COMUNICAÇÃO COM O DISPLAY
  lcd.backlight(); // LIGA A ILUMINAÇÃO DO DISPLAY
  lcd.clear(); // LIMPA O DISPLAY
lcd.print("entrando: ");
 lcd.setCursor(0, 1); // POSICIONA O CURSOR NA PRIMEIRA COLUNA DA LINHA 2
  lcd.print("saindo: ");
}

Pra quando seu professor pediu este seu trabalho?

As abelhas passam uma por uma na frente do sensor?
O que voce previu se uma abelha passar logo em seguida da outra, mas junto de modo que não fique espaço entre elas?
E se uma abelha passa pelo sensor de entrada e no memo tempo outra passa pelo sensor de saída e elas se encontram no meio do caminho?
De detalhes de como é o seu sensor.
Qual o tempo que uma abelha leva para passar entre o dois sensores, em qualquer direção, entrando ou saindo?

é bem complexo isso aqui de contagem. sabia q ao contar as sementes as maquinas do agro tem o mesmo problema se 2 sementes passam juntas ? tem um erro nao lembro se de 3-5% já inherente ao método. A abelha pode voltar tambem ir e voltar, vc talvez teria q contabilizar pulsos com interrupcao pra nao perder eles. do jeito q está , ele sempre está no loop contabilizando

Já que voce não respondeu minhas indagações, fico sem condições de ajuda-lo.

O trabalho é para o quanto antes.
As abelhas passam por um tudo pequeno praticamente do tamanho delas onde irão se encontrar os sensores.
O tempo que leva para passar entre os sensores será o menor possível, a depender da casa de abelha na qual instalarei o Sensor.
Se duas abelhas passem pelos 2 sensores diferentes estou assumindo que irá gerar um erro, só não estou tentando acumulá-los ao longo da contagem.

eu imaginei a problemática que teria. Minha idéia é analisar num espaço de tempo bem longo então se o erro for pequeno diria que não tem tanto problema. Eu to num processo de aplicar um debounce pra evitar as contagens infinitas que estão atrapalhando na hora de definir o estado e arrumar algum jeito de deixar a variável estado "setada" mesmo depois da abelha sair do sensor. Meu grande problema agora é que ao entrar na frente do sensor ela ativa o estado e ao mesmo tempo ativa a o if do loop principal, tenho que mudar isso.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.