Go Down

Topic: Introducir comandos (Read 99 times) previous topic - next topic

mAnuel_AA

Hola,

Estoy desarrollando un programa para simular la introducción de monedas en una máquina expendedora. La idea es configurar 2 pines digitales como salidas y dos entradas analógicas (una conectada a cada uno de los pines digitales activados como salidas) para detectar qué pin es el que está activo.

La idea es poder introducir comandos simples, no más de un carácter. Por ejemplo, quiero simular que introduzco una moneda de 1€, así que configuro que se active el PIN 11 (por ejemplo) y éste le mande una señal a la entrada analógica A1 (que es la configurada para las monedas de 1€). Una duda que tengo aquí es si me vendría mejor configurar la entrada como digital en lugar de analógica ya que solamente necesitaría un pulso, pero lo tengo puesto así ya que me funciona correctamente.

Pues bien, el problema lo tengo a la hora de introducir los comandos y diferenciarlos. Quiero tener solo 2 comandos activos, "1" para introducir 1€ y "2" para introducir 20 céntimos. He utilizado las funciones if, if...else if, while, do...while, etc. pero con ninguna consigo hacerlo.

Dejo por aquí mi código para que así lo podáis entender mejor. Otra cosa que quiero aclarar es que esto forma parte de un proyecto mayor y más complejo (por eso tiene variables que no utilizo) y es la parte que me está dando problemas.



Code: [Select]
#define MONEDA1E 11
#define MONEDA20C 12
#define A1entrada1e A1
#define A2entrada20c A2

int pulso1e;
int pulso20c;
int detectado = 0;
bool mete=true;
unsigned long tactual;
char moneda;
int Entrada1e;
int Entrada20c;



void setup() {
 
  //Iniciamos el puerto serie y le decimos que nos avise cuando esté listo
  Serial.begin(9600);
  Serial.println("Aceptador de monedas listo");

  //Establecemos el pin 11, asignado a MONEDA1E, como una salida y le decimos que se mantenga inactivo
  pinMode (MONEDA1E, OUTPUT);
  digitalWrite (MONEDA1E, LOW);
  Serial.println ("PIN 11 listo");
 
  //Hacemos lo mismo con el pin 12 para las monedas de 20 céntimos
  pinMode (MONEDA20C, OUTPUT);
  digitalWrite (MONEDA20C, LOW);
  Serial.println ("PIN 12 listo");
 
  //Establecemos los pines A1 y A2 como entradas en estado bajo esperando a ser activadas por los pines 11 y 12
  pinMode (A1entrada1e, INPUT);
  Serial.println ("PIN A1 listo");

  pinMode (A2entrada20c, INPUT);
  Serial.println ("PIN A2 Listo");
}


void loop() {
 
  moneda = Serial.read();
 
      Serial.println ("Ingrese crédito. Válidas monedas de 20 céntimos o 1€");
    while (Serial.available()) { 
      if (moneda == '1') {
        digitalWrite(11, HIGH);       
        //delay(5);                            Lo he quitado por si funciona sin eso al establecer las entradas como digitales
        digitalWrite(11, LOW);
        Serial.println("Se ha introducido 1€");
      //  goto pulsos;
     // break;
    }
      else if (moneda = '2') {
        digitalWrite(12, HIGH);
        //delay(5);
        digitalWrite(12, LOW);
        Serial.println("Se han introducido 20 céntimos");
      //  goto pulsos;
       // break;
    }
   }
}

bosoft

Hola
cambia la linea
Code: [Select]
else if (moneda = '2') {
por
Code: [Select]
if (moneda == '2') {

Si ya no te funcionaba con el '1' debes tener algún error al teclear en el monitor serie

saludos

Go Up