Arduino Forum

International => Español => Hardware => Topic started by: TELO2254 on Jan 16, 2018, 05:13 pm

Title: Proyecto Monedero
Post by: TELO2254 on Jan 16, 2018, 05:13 pm
Hola a todos, ante todo presentarme y dar las gracias por vuestra labor.
me decico a reparacion de maquinas recreativas y para comprobar los monederos tengo un invento muy simple que construí hace años en cual va solo con led, si el monedero esta correcto al meterle una moneda me enciende unos led y si le meto otra moneda me enciende otros, por ejemplo
   MAQUINAS TIPO A
MONEDA                  LED
0.05                        3-4-8
0.10                        3-7
0.02                        3-4-7
0.50                        3-7-8
1€                           3-4-7-8
2€                           3-9

   MAQUINAS TIPO B
MONEDA                 LED
0.05                        3-4
0.10                        5
0.02                        4-5
0.50                        3-7
1€                           4-7
2€                           3-5-7
Deciros  que dichas salidas de monedero son por 1 segundo y el led se enciende. Cada salida es un cable distinto con el mismo positivo en comun.
Me he iniciado en el tema de arduino y me gustaría hacer este aparato para ver datos en display, es decir que al meter una moneda me indique que salida usa y que valor tiene la moneda.
He realizado un esquema con las conexiones de entradas y de salida ( creo están bien )
Lo que no se es como hacer dicha programación ya que he trasteado con algunas cosas pero con esto no me acabo de enterar...
Bueno a ver si alguien me orienta un poco.
Gracias
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 16, 2018, 05:27 pm
subo el diagrama , no se si estara correcto

(http://i67.tinypic.com/2gwzxhf.jpg)
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 16, 2018, 06:33 pm
Revisa este foro Español, hay al menos 2 temas muy parecidos a tu proyecto
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 16, 2018, 06:46 pm
Llevo todo el dia buscando por el foro pero no veo nada por el estilo
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 16, 2018, 07:56 pm
1ro no puede ser todo el dia porque acabo de mover tu hilo. (1 hora desde que lo moví!!)

2do no has buscado bien porque en 2 seg mira:
https://forum.arduino.cc/index.php?topic=453282.0 (https://forum.arduino.cc/index.php?topic=453282.0)

Busca simplemente Monedero arriba derecha
Hay muchos resultados posibles.

Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 16, 2018, 08:22 pm
Antes de poner mi post estuve buscando ....
De todas formas el post que me indicas no tiene nada que ver con lo que intento hace , en el otro post habla de simular un monedero y yo lo que intento hacer es trasladar datos del monedero al arduino y me los refleje en un display.
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 17, 2018, 12:55 am
Bueno pero lo que quieres es controlar los leds?
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 17, 2018, 03:09 pm
Eso es controlar los Led y reflejarlo en display
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 17, 2018, 04:27 pm
Y cual es el contacto que detecta que introdujiste una moneda?
En uno de los casos qeu creo haberte pasado y sino se trata de otro que no has visto, alguien tenia un cable plano con monedas por un lado y billetes por otro. Enviaba pulsos durante 100mseg y debíamos contarlos.
Bueno, ese era el que yo queria que vieras.

Esos pulsos entraban al arduino y incrementabamos un contador. Aca tu quieres comandar los leds.
En lugar de 100mseg, hablas de 1 seg.

Estoy en lo correcto? porque eso no se ve en tu esquema o le falta al lado izquierdo indicar que son entradas?
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 17, 2018, 09:21 pm
Bueno os cuento ya tengo bastante avanzado el tema , no me sirven los post que me comentas por qué esos son monederos que salen pulsos por un mismo pin , ósea si metes una moneda de 10 ctm da un pulso , si metes una de 20 da 2 y así sucesivamente los va multiplicando, yo lo que digo es otro tipo de monedero que cada moneda sale por distintas salidas: 5ctm salen por sus salidas y las demás igual , ojo algunas salidas pueden ser usadas por varias monedas ..... por ejemplo 1€ sale por la 3,4,7,8
2€ sale por la 9
0,50 sale por la 3 y 7
Como veis cada una tiene sus salidas y algunas se comparten.
Dicho todo este rollo , ya lo tengo listo y me encienden los led a la perfección, pero ahora quiero que se me refleje en el display y que me diga 2 cosas, una que salidas usa la moneda introducida y a la misma vez el valor de dicha moneda. Que esto último no sé cómo hacer para que use las distintas combinaciones....
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 18, 2018, 01:07 am
Esta bien pero sigues tu sin comprender o esto es un simulador?

No veo en nada de lo que expones ENTRADAS, entonces tu estas haciendo un simulador con los leds para luego probar tus monederos?
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 18, 2018, 07:42 am
Esto es un probador eso es, las entradas van en el conector que está en La foto a la izda al lado de la pila, este conector es el del monedero
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 18, 2018, 10:26 pm
Edito el post por que me he dado cuenta que me va a ser innecesario poner led ya que el display me va a decir que salidas usa.
ahora tengo un problema que es que cuando introducto una moneda me escribe solo una salida , no se como hacer para que en el dsisplay salgan todas, es decir si meto una moneda y sale por la salida 2 y 3, me escriba SALIDAS 2 3.....
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 19, 2018, 01:51 pm
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int inputPin3 = 41; // ENTRADA MONEDA ( TABACO 0.05, 0.10, 0.20, 0.50, 1€ Y 2€ ) ( TIPO B 0.05, 0.50 Y 2€ )
int inputPin4 = 43; // ENTRADA MONEDA ( TABACO 0.05, 0.20, 1€ Y FICHA ) ( TIPO B 0.05, 0.20, Y 1€ )
int inputPin5 = 45; // ENTRADA MONEDA ( TABACO FICHA ) ( TIPO B 0.10, 0.20, Y 2€ )
int inputPin7 = 47; // ENTRADA MONEDA ( TABACO 0.10, 0.20, 0.50, y 1€ ) ( TIPO B NADA )
int inputPin8 = 49; // ENTRADA MONEDA ( TABACO 0.05, 0.50 y 1€ ) ( TIPO B NADA )
int inputPin9 = 51; // ENTRADA MONEDA ( TABACO 2€) ( TIPO B NADA )
int inputPin10 = 53; // ENTRADA MONEDA Aun no tiene nada,

void setup()
   {
       lcd.begin(16, 2);           // Fijamos el numero de caracteres y filas
       lcd.clear();
       lcd.print("    PROBADOR ");  // Aqui va la primera linea con mensaje en espera
       lcd.setCursor(0, 1);    // Ponte en la linea de abajo 1, posicion 5
       lcd.print("   DE MONEDAS "); // Aqui va la segunda linea con mensaje en espera
       delay(2000);
       lcd.clear();

pinMode(inputPin3, INPUT);            // Decimos que la salida 3 del monedero
pinMode(inputPin4, INPUT);            // Decimos que la salida 4 del monedero 
pinMode(inputPin5, INPUT);            // Decimos que la salida 5 del monedero
pinMode(inputPin7, INPUT);            // Decimos que la salida 7 del monedero
pinMode(inputPin8, INPUT);            // Decimos que la salida 8 del monedero
pinMode(inputPin9, INPUT);            // Decimos que la salida 9 del monedero
pinMode(inputPin10, INPUT);           // Decimos que la salida 10 del monedero
 
   }

void loop()
{

   while( digitalRead(inputPin3) == LOW ) //salida 3
  {
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS 3      ");     // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin4) == LOW ) //salida 4
  {
   
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS  4    ");      // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin5) == LOW ) //Salida 5
  {
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS   5     ");    // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin7) == LOW ) //salida 7
  {
   
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS    7   ");     // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin8) == LOW ) //Salida 8
  {
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS     8  ");     // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin9) == LOW ) //Salida 9
  {
   
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS      9 ");     // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
   while( digitalRead(inputPin10) == LOW ) //Salida 10
  {
   
    lcd.setCursor(0, 0);               // Ponte en la linea de arriba 0, posicion 0
    lcd.print(" SALIDAS       10  ");  // Aqui va el numero de salida del monedero
    lcd.setCursor(0, 1);               // Ponte en la linea de abajo 1, posicion 0
    lcd.print("    VALOR ");           // Aqui va la segunda linea con mensaje del valor de la moneda
    delay(1000);
  }
 
}
Title: Re: Proyecto Monedero
Post by: noter on Jan 20, 2018, 01:04 pm
Bueno.
Confieso que hasta ahora no había entendido nada de lo que estabas intentando hacer. Ahora he releído tu primer post, y la parte en la que hablas de una máquina para COMPROBAR monederos, no un monedero en sí.
Antes de empezar a ayudarte, para intentar simplificar el código lo máximo posible, me gustaría que me dijeras cuántos leds tiene la máquina comprobadora y qué funciones tienen los que no usas aquí (1, 2 y 6, si no me equivoco).
Title: Re: Proyecto Monedero
Post by: _jose_ on Jan 20, 2018, 02:53 pm
Vigila con las salidas de J1 ,si son a 12v no las puedes meter directamente a las entradas de arduino...
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 04:20 pm
Gracias , te cuento
El 1 es 12v
2 y 6 gnd
Cada salida sale por gnd más su salida, no sé si me explico bien.
Gnd usa en común el Arduino y el monedero
A parte de esto en el último post  suprimo los de los led pero que lo veo que no tiene para esto mucho sentido encender un led y que al mismo tiempo en el lcd me diga que salida es, solo con indicarme en el lcd que salida es me vale
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 04:36 pm
La j1 del monedero va con fuente de alimentación a parte
Title: Re: Proyecto Monedero
Post by: _jose_ on Jan 20, 2018, 04:58 pm
Tendras que intercalar algo entre el conector J1 y las entradas del arduino que funcionan con 5v.Suponiendo que ese conector J1 esta en el monedero de la maquina que quieres verificar,y que esta alimentado por la propia fuente de la maquina ,quizas lo mas adecuado serian optoacopladores.Tal vez pudieras hacerlo con divisores de tension,los mas expertos en electronica te diran si en esas condiciones es lo mas adecuado.Si aun no has comprado el lcd ,te recomiendo uno para conexion I2C ,ahorraras cableado ,aunque veo que usas un mega y vas sobrado de pines. 
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 20, 2018, 05:55 pm
Mejor que divisores sería usar optoacopladores. Y garantizas 0 problemas entre entrada y salida.

Algo asi solo para entender la idea

(http://picmania.garcia-cuervo.net/images/aux_optoacoplador_entrada.gif)

los 12V de tu salida monedero solo accionan los leds del optoacoplador. Digamos a 10mA o menos por led. Algo que debe poder entregar asi que una R de 120 ohms para 10 o mas para tener menos corriente irá bien.

Del lado del transistor optoacoplado una R de 4k7 o 10k y de la salida olvida el esquema que es para un PIC y es lo mismo para Arduino, a tus entradas

Eso lo repites por cada entrada.
Title: Re: Proyecto Monedero
Post by: noter on Jan 20, 2018, 06:00 pm
Bueno. Como suponía, el resto de pines no tienen (y lo más importante, no tendrán) influencia en los valores. Se podría haber simplificado más aún, utilizando los pines de un puerto determinado y leyendo el puerto directamente, pero como no tenía seguro el extremo anterior, lo hice un poco más abierto. Más sencillo, incluso, si estuvieras dispuesto a cambiar la nomenclatura de tus leds para quitar los huecos.
Prueba a ver este código. Compila, aunque está sin probar; pero debería hacer algo.
Code: [Select]

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// ESTADO DE LOS LED. SI NECESITAMOS MÁS DE 8 HAY QUE CAMBIAR TIPO A INT
byte estaoLeds=0;

struct {
      byte numeroLed;
      int pin;
} leds [] = {
      {3, 41}, {4, 43}, {5, 45}, {7, 47}, {8, 49}, {9, 51}, {10, 53}
};

const byte totalLeds = sizeof(leds)/sizeof(leds[0]);

void setup()
{
      lcd.begin(16, 2);           // Fijamos el numero de caracteres y filas
      lcd.clear();
      lcd.print("    PROBADOR ");  // Aqui va la primera linea con mensaje en espera
      lcd.setCursor(0, 1);    // Ponte en la linea de abajo 1, posicion 5
      lcd.print("   DE MONEDAS "); // Aqui va la segunda linea con mensaje en espera
      delay(2000);
      lcd.clear();

      for(int i=0; i<totalLeds; i++){
            pinMode(leds[i].pin, INPUT);   
      }
}

void loop()
{
      byte nuevoEstadoLeds=0;
      for(int i=0; i<totalLeds; i++){
            // Si el led está en HIGH, establecemos el bit correspondiente en nuevoEstado
            if (digitalRead(leds[i].pin)) {
                  bitSet(nuevoEstadoLeds, i);
            }
      }

      // Si ha cambiado algún bit, refrescamos la pantalla
      if (estaoLeds != nuevoEstadoLeds) {
            estaoLeds = nuevoEstadoLeds;
            refrescaPantalla();
      }
}

void refrescaPantalla(void)
{
      lcd.setCursor(0, 0);
      lcd.print(" SALIDAS ");
      for(int i=0; i<totalLeds; i++){
            if(bitRead(estaoLeds, i))
                  lcd.print( leds[i].numeroLed);
            else
                  lcd.print(" ");
      }
      lcd.setCursor(0, 1);
      lcd.print("    VALOR ");
      lcd.print(estaoLeds);
      delay(1000);
}


Prueba y comenta.
Saludos.
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 06:48 pm
Surbyte, creo que no habéis entendido que el monedero coge los 12v para su funcionamiento aparte y solo para eso una vez funciona no actúa para nada esos 12v con el Arduino , para dar señales usa los pines  gnd y salida que son unos 2 o 3 v
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 06:56 pm
Noter: Luego lo pruebo ahora no tengo PC estoy con móvil , creo que me estás entendiendo perfectamente, donde pongo texto VALOR es para poder poner valor de la moneda según combinación de salidas , en el primer post pongo la combinación que existe .
Al encender el aparato:
    " PROBADOR "
  " DE MONEDEROS "
Mientras no se introduzcan monedas:
    " INSERTE "
   " MONEDAS "
Si se introduce una moneda 0,05
      " SALIDAS 3  4  7 "
     " VALOR  0,05 ctm "
Así me gustaría quedarlo
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 20, 2018, 07:03 pm
A ver.. llevamos 21 post intentando entenderte!! Entonces el que no sabe explicarse eres tu.

Dime donde dices que la salida entrega 2 a 3V?

Aun ahi no hay drama en usar los optos, mejor aun ya que con 2V no podras accionar la entrada del arduino. Con 3 vaya y pase, estas en el limite de lo que se llama tensión de entrada minima nivel Alto.

Con 2 o 3 V en las salidas de tu monedor a probar, usas una R de

R = (2-1.5)/10mA = 50 ohms o sea 47 ohms e irá bien.

El resto como ya te indiqué.
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 07:13 pm
Perdónarme por no explicarme bien y sobre todo por no saber nada de nada , llevo unos 7 días con el tema Arduino , antes ni sabia ni que era y me cuesta entender y explicar lo que quiero por mí más alta torpeza.
El código que puse que después borré y el que tengo ahora en el hilo es de mucho ver vídeos y sacar pequeños conceptos , algunos de ellos los entiendo y otros no.
Gracias por la ayuda y gracias por la paciencia
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 10:31 pm
Quote from: noter
Prueba y comenta.
NO ME FUNCIONA, al iniciar me da el mensaje de bienvenida y despues me sale :
salidas 3457891
valor 127
si introduzco una moneda  me borra las salidas correspondientes bien menos la 3 que no hace nada y en la fila de abajo en valor me pone valor y unos  datos que no comprendo segun moneda pone de menos a mas 101,111,117,119
Title: Re: Proyecto Monedero
Post by: noter on Jan 20, 2018, 10:55 pm
¿Quieres decir que las salidas están invertidas? ¿Que en lugar de encender el número correspondiente se apaga?
En cuanto a lo del led3, revisa la definición a ver si lo tienes conectado al pin correspondiente. Cada una de las parejas indica el nombre (número) de led y el pin al que va conectado:
      {3, 41}, {4, 43}, {5, 45}, {7, 47}, {8, 49}, {9, 51}, {10, 53}

así que el led3 irá en pin 41, el led 4 en 43, etc.
El número que aparece en valor, no te preocupes. Una vez que se representen los pines correctamente en la línea superior, te contaré cómo trabajar con ese valor.
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 11:15 pm
¿Quieres decir que las salidas están invertidas?
Eso es he cambiado esto y ya funciona menos el 3 que no se que pasa, estan bien la salida a su sitio
  if(bitRead(estaoLeds, i))
 lcd.print( " ")
else
   lcd.print( leds.numeroLed);
     
Title: Re: Proyecto Monedero
Post by: noter on Jan 20, 2018, 11:20 pm
Prueba a ver de esta otra forma. He cambiado tres cosas:
- He invertido la lógica (como has hecho tú, pero en la lectura, en lugar de en la impresión).
- He agregado un espacio más si el número a tapar es el 10 (son dos cifras a borrar).
- He quitado la pausa, a ver si es la causa de que no aparezca el 3.
Code: [Select]

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

// ESTADO DE LOS LED. SI NECESITAMOS MÁS DE 8 HAY QUE CAMBIAR TIPO A INT
byte estaoLeds=0;

struct {
      byte numeroLed;
      int pin;
} leds [] = {
      {3, 41}, {4, 43}, {5, 45}, {7, 47}, {8, 49}, {9, 51}, {10, 53}
};

const byte totalLeds = sizeof(leds)/sizeof(leds[0]);

void setup()
{
      lcd.begin(16, 2);           // Fijamos el numero de caracteres y filas
      lcd.clear();
      lcd.print("    PROBADOR ");  // Aqui va la primera linea con mensaje en espera
      lcd.setCursor(0, 1);    // Ponte en la linea de abajo 1, posicion 5
      lcd.print("   DE MONEDAS "); // Aqui va la segunda linea con mensaje en espera
      delay(2000);
      lcd.clear();

      for(int i=0; i<totalLeds; i++){
            pinMode(leds[i].pin, INPUT);   
      }
}

void loop()
{
      byte nuevoEstadoLeds=0;
      for(int i=0; i<totalLeds; i++){
            // Si el led está en LOW, establecemos el bit correspondiente en nuevoEstado
            if (!digitalRead(leds[i].pin)) {
                  bitSet(nuevoEstadoLeds, i);
            }
      }

      // Si ha cambiado algún bit, refrescamos la pantalla
      if (estaoLeds != nuevoEstadoLeds) {
            estaoLeds = nuevoEstadoLeds;
            refrescaPantalla();
      }
}

void refrescaPantalla(void)
{
      lcd.setCursor(0, 0);
      lcd.print("SALIDAS ");
      for(int i=0; i<totalLeds; i++){
            if(bitRead(estaoLeds, i)) {
                  lcd.print( leds[i].numeroLed);
            }
            else {
                  lcd.print(" ");
                  // otro espacio para tapar el 10
                  if (leds[i].numeroLed>=10)
                        lcd.print(" ");
            }
      }
      lcd.setCursor(0, 1);
      lcd.print("VALOR: ");
      lcd.print(estaoLeds);
}

Prueba y cuenta.
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 20, 2018, 11:43 pm
Prueba a ver de esta otra forma. He cambiado tres cosas:
- He invertido la lógica (como has hecho tú, pero en la lectura, en lugar de en la impresión).
- He agregado un espacio más si el número a tapar es el 10 (son dos cifras a borrar).
- He quitado la pausa, a ver si es la causa de que no aparezca el 3.
nada incluso peor, por quitar la pausa, la salida 10 me da igual que sea 0 si es mas facil, mejor sin pausa
Title: Re: Proyecto Monedero
Post by: noter on Jan 20, 2018, 11:59 pm
No entiendo tu última respuesta. ¿Puedes detallar un poco más lo que ocurre?
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 21, 2018, 12:16 am
EL 3 sigue sin salir y al quitar la pausa se queda el lcd dando salidas en blanco hasta que meto moneda que da las salidas correctas menos el 3 que no lo da y abajo simpre pone un valor, lo de abajo como me has dicho antes ya lo veremos pero la 3 no sale nunca, a menos que meta muchas veces la misma moneda que rara vez si lo da
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 21, 2018, 12:43 am
No te preocupes pero te das cuenta que no estamos en tu cabeza asi que de haber leído bien las normas, hubieras entendido lo importante que es explicar bien toda la idea y su contexto pero bueno ya se comprende.

Tenemos un monedero alimentado x 12V que realmente a nosotros no nos importa ( a ti si claro). Las salidas a probar/detectar entregan tensiones de entre 2 a 3V.
Necesitamos que se visualicen en un LCD.
El código hecho por noter seguramente funciona bien.

Esto

Code: [Select]
struct {
      byte numeroLed;
      int pin;
} leds [] = {
      {3, 41}, {4, 43}, {5, 45}, {7, 47}, {8, 49}, {9, 51}, {10, 53}
};


es una estructura que contiene el número de Led y el Pin con el que se detecta.
numeroLed Pin
 3 41
 4 43
 5 45
 7 47
 8 49
 9 51
10 53

Esa estructura se identifica por led y cuenta con dos valores i,j

que van de 0 al máximo
entonces el leds[0][0] = 3 y en cambio leds[0][1] = 41
para terminar
leds[6][0] = 10
leds[6][1] = 53

eso para que entiendas mejor como funciona la estructura.


 
Title: Re: Proyecto Monedero
Post by: TELO2254 on Jan 21, 2018, 12:53 am
se que empece mal explicando, y ya me disculpe y vuelvo a hacerlo....
mas o menos entiendo lo que me dices pero no acabo de entender por que el 3 no llega a salir, y si quito todas las entradas menos esa ( 3 ) si que funciona sola......
espero explicarme bien
Title: Re: Proyecto Monedero
Post by: noter on Jan 21, 2018, 10:24 am
Pues te comento, pero primero una pregunta: ¿Cuánto tiempo permanecen los led activados tras detectar una moneda?
Creo que el código funciona correctamente. Hace un barrido de los pines de entrada y los anota en valor. Pensé que tal vez lo que ocurría era que cuando se producía el cambio era a mitad de barrido, y por lo tanto sólo se anotaban los cambios en los pines posteriores del barrido. Al estar la pausa de un segundo, se estaría mostrando, por tanto, el valor erróneo durante todo ese segundo. Sin embargo, al quitar la pausa, aunque puede producirse ese mismo error en la primera lectura, inmediatamente se hace otro barrido que debería leer los valores correctos.
Me decanto a pensar que puede ser entonces problema hardware. Máxime si estás trabajando con voltajes en el límite de detección (entre 2V-3V no está bien definido el estado de una entrada. HIGH y LOW deberían estar por encima y debajo de esos valores). Además, en contra de la lógica "natural" estamos recibiendo lógica invertida. Aunque eso es fácil de solventar, como hemos visto, si lo has hecho así "sin querer" tal vez tu esquema de conexión no sea el correcto.
Intenta explicar un poco más detalladamente tu esquema de conexión y seguro que surbyte u otro forero (yo no, tristemente   :-[ ) te podrá asesorar en ello.
Title: Re: Proyecto Monedero
Post by: surbyte on Jan 22, 2018, 09:48 pm
Ya lo dije antes. si no usa un adaptador de nivel apropiado, eso no va a funcionar.