Alternativa a analogRead() o modificación

Buenas tardes,

Estoy realizando un código que detecte la introducción de monedas en un aceptador de monedas. El programa tendría dos partes:

  • Una parte sería la destinada a la introducción mediante un comando de forma remota, sin necesidad de tener que introducir ninguna moneda.
  • La otra parte sería que, en el momento que entre una moneda física, el programa sea capaz de detectarlo al igual que con los comandos.

Pues bien, el problema viene al querer detectar el aceptador de monedas. Tengo una señal que introduzco en una entrada analógica del arduino para que detecte el funcionamiento de aceptador de monedas, pero por lo que se ve este cable siempre tiene una señal que llega hasta los 1023.

El problema viene con este último número, ya que pongo una condición para que cuando detecte que la entrada a la que está conectado el aceptador de monedas realice una acción, pero dicha entrada llega al nivel deseado (1023) sin que se haya introducido ninguna moneda.

Mi pregunta es si existe alguna forma de realizar un analogRead y que tenga en cuenta un número mayor de valores, haciendo una función de forma manual que haga una suma rara para que solo llegue a dicho nivel cuando esté el equipo activo, etc.

He probado también a utilizar una lectura digital de la entrada (con pocas esperanzas) y, como me imaginaba, no ha servido para nada. Tengo el mismo problema.

Siento no poder explicarlo mejor. :confused:

if (Serial.available() > 0) {
    
    direccion = Serial.read();

    switch (direccion) {    //Para cada caso asignaremos directamente una dirección y un tipo de moneda
      
      case '1':             //Moneda de 1€
      
        Serial.println("Caso 1");
        Serial.println("Introducción de 1€");
        Tipo = 4;
        Camino = 2;
        DirMonedero = 2;
        euroIntro = 1;                   //1€
        Serial.println(Tipo);
        Serial.println(Camino);
        Serial.println(DirMonedero);
        Serial.println(euroIntro);
        delay(500);
        
        //Detección de moneda
        mete=true;
        Serial.println("+5 créditos");
        detectado=1;
        tactual=millis();     
        detectado=0; 
        goto monedero;

      case '2':
      
        Serial.println("Caso 2");
        Serial.println("Introducción de 20 céntimos");
        Tipo = 3;
        Camino = 1;
        DirMonedero = 2;
        euroIntro = 20;                //20 céntimos
        Serial.println(Tipo);
        Serial.println(Camino);
        Serial.println(DirMonedero);
        Serial.println(euroIntro);
        delay(500);

        //Detección de moneda
        mete=true;
        Serial.println("+1 crédito");
        detectado=1;
        tactual=millis();     
        detectado=0; 
        goto monedero;
    }
    puertoMonFlush();
  }

//Hasta este punto llega la parte en que introduzco monedas a través de comandos. A partir de aquí tengo el problema, ya que la variable PULSO da muchas veces el valor 1023 (que es el máximo que puede dar y que puedo registrar, así que no puedo ampliarlo).

    PULSO = analogRead(MONEDERO);
    
    if(PULSO >= 1023){
        
         mete=true;
         Serial.println("Ha entrado");
         detectado=1;
         tactual=millis();   
         detectado=0;
        }

El ADC del arduino es de 10 bits asi que nada supera un registro máximo del ADC de 1023.

El problema viene con este último número, ya que pongo una condición para que cuando detecte que la entrada a la que está conectado el aceptador de monedas realice una acción, pero dicha entrada llega al nivel deseado (1023) sin que se haya introducido ninguna moneda.

Si ocurre esto se debe a que el elemento que te envia la señal esta funcionando mal, entrega una tensión mayor o esta fallando de algún modo.

Revisa con un tester/multímetro dicha salida, y ten cuidado de conectar las entradas analógicas a tensiones mayores a 5V. Puedes llegar a quemarlas.