Go Down

Topic: Lee mal las entradas digitales? (Read 194 times) previous topic - next topic

jlijo71b

Hola

soy nuevo y tengo un ejemplo en el que son 4 las entradas que se controlan.
Dependiendo si es activa (5V+) o no (no entra nada)
Luego, con un pulsador, selecciono o modifico el grupo (1-2-3)

El caso es que me lee bien los valores, pero al variar alguno, sale 1 bien y otra mal... por ejemplo, debe dar 1111, quito una señal 5V+ y da 0111, pero en el siguiente barrido ya da 1111 ¿?

Os dejo el código y ya no sé si es tema soft o hard, pues es muy raro

//4 Entradas

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 13, en = 12, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
int botonState=0;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {      //Sólo al inicio
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);//16 columnas X 2 filas
  // Print a message to the LCD.

  lcd.print("Hola a todo@s!");
  delay(500);
  pinMode(7,INPUT_PULLUP);//botón en el 10 como entrada

  pinMode(8,INPUT);//imán 1
  pinMode(9,INPUT);//imán 2
  pinMode(10,INPUT);//imán 3
  pinMode(11,INPUT);//imán 4

  int imanes=0;
}

void loop() {
 
    //Reconoce Tipo por entradas
    //Tipo 4 - 1111
    //Tipo 3 - 1010
    //Tipo 2 - 1001

      lcd.setCursor(0,2);     
      lcd.print("                ");

      lcd.setCursor(0,2);
      //imprime en pantalla valores en entradas
      for (int i=8; i <= 11; i++){
        lcd.print(digitalRead(i));
      }
      //Saca el valor para una variable de las entradas (deben dar los diferentes Tipo)
      int imanes=0;
      imanes=digitalRead(8)*1000+digitalRead(9)*100+digitalRead(10)*10+digitalRead(11)*1;
        //imprime valor formado por las 4 entradas
        lcd.setCursor(6,2);       
        lcd.print(imanes);
        delay(2000);
    //Fin de reconocimiento de imanes
 
  if (digitalRead(7)==0){            //Si se pulsa, cambia a otro grupo
      //el operador % significa módulo
      lcd.clear();
      botonState=(botonState+1)%3;
      //delay(200);
  }
 
  switch(botonState){                 
 
    case 0:
      lcd.setCursor(0,0);
      for (int i=0; i <= 16; i++){     
        lcd.print(" ");
      }   
      lcd.setCursor(0, 0);   
      lcd.print("Grupo 1");    //primer caso
   
      if (imanes==1111){
        lcd.setCursor(13,2);
        lcd.print("   ");       
        lcd.setCursor(13,2);
        lcd.print("50E");
        delay(500);
      }
      if (imanes==1010){
        lcd.setCursor(13,2);
        lcd.print("   ");         
        lcd.setCursor(13,2);
        lcd.print("20E");
        delay(500);
      }
      if (imanes==1001){
        lcd.setCursor(13,2);
        lcd.print("   ");       
        lcd.setCursor(13,2);
        lcd.print("10E");
        delay(500);
      }     
      break;
     
    case 1:
      lcd.setCursor(0,0);
      for (int i=0; i <= 16; i++){     
        lcd.print(" ");
      }     
      lcd.setCursor(0, 0);     
      lcd.print("Grupo 2");         //segundo caso
      if (imanes==1111){
        lcd.setCursor(13,2);
        lcd.print("50E");
        delay(500);
      }
       if (imanes==1001){
        lcd.setCursor(13,2);
        lcd.print("20E");
        delay(500);
      }     
      if (imanes==1010){
        lcd.setCursor(13,2);
        lcd.print("10E");
        delay(500);
      }
           
      break;
     
    case 2:
      lcd.setCursor(0,0);
      for (int i=0; i <= 16; i++){     
        lcd.print(" ");
      }     
      lcd.setCursor(0, 0);     
      lcd.print("Grupo 3");         //tercer caso
      if (imanes==1010){
        lcd.setCursor(13,2);
        lcd.print("50E");
        delay(500);
      }     
      if (imanes==1001){
        lcd.setCursor(13,2);
        lcd.print("20E");
        delay(500);
      }     
         
      break;
  }

}


Gracias!!!

_jose_

Porfavor lee las normas del foro ,sobre todo en lo referente a la forma adecuada de postear codigo.

Go Up