Problemas con LCD en Arduino

En esos puntos marcados como A0, A1 y A2 es donde se define la dirección del bus para I2C
Ve la hoja de datos del chip o del módulo y encontrarás el valor por defecto y cómo establecerlo.
La dirección que selecciones o tenga, es la que debes establecer para la comunicación.
IMG_20180508_203623.jpg
 
Como sabemos existe el PCF8574 y el PCF874A
Si el chip que tiene vuestro módulo es el PCF8574 la dirección por defecto es 0x27
Pero si el que tiene vuestro módulo es el PCF8574A la dirección por defecto es 0x3F
En la pag 5 y en la pag 6 estan las respectivas tablas de uno y otro, la tabla 4 es para el PCF8574 y la tabla 5 para el PCF8574A, tenerlo en cuenta porque si se quiere agregar otra pantalla se debera configurar siguiendo la tabla que corresponda.

De esta forma se pueden manejar hasta 8 dispositivos
 

Adjuntos

  • PCF8574_PCF8574A.pdf
    794.8 KB · Visitas: 10
Para ese dispositivo con lo mostrado es suficiente los utililizo habitualmente, la dir por defecto corresponde a A0=A1=A2=H que en la práctica es sin puente, solo hay que tener en cuenta si lleva "A" o no al final según eso tabla 4 o tabla5 con eso funciona de una y sin problemas.
 
Podria alguien ayudarme a entender porque no trabaja el metodo lcd.setCursor(y,x) de la libreria liquidCrystal.h cuando uso este código. Ademas le da igual cuando despliego el mensaje si uso lcd.print(miMsg); o lcd.write(miMsg)
Código:
// Concatenar 2 matrices de carácteres
/**
* Name:     Arduino - Mensaje al LCD de shield LCD-KeyPad
* Autor:    David Sanchez
* Date:     2018/05/16
*
* Arduino Uno, Pinout:
*         _______________
*        |      USB      |
*        |13           12|
*        |3V3          11|
*        |AREF         10|
*   APAD |A0            9| LCD
*        |A1            8| LCD
*        |A2            7| LCD
*        |A3            6| LCD
*        |A4            5| LCD
*        |A5            4| LCD
*        |          3/SCL|
*        |          2/SDA|
*        |5V          GND|
*        |RST         RST|
*        |GND   1/INT2/RX|
*        |VIN   0/INT3/TX|
*        |MISO         SS|
*        |SCK        MOSI|
*        |_______________|
*
*/

/* LIBRERIAS Y OBJETOS */
#include <LiquidCrystal.h>

// Evitamos programar con números los pines del Arduino.
// Asi que los declaramos con el nombre IOPINxx con el que
//  seran usados. Si es necesario los definimos e inicializamos

#define IOPIN4 4         // #define  solo declara el nombre
#define IOPIN5 5         //  con una constante para el compilador
#define IOPIN6 6
#define IOPIN7 7
#define IOPIN8 8
#define IOPIN9 9

// Inicializamos las constante usadas por la libraria LiquidCrystal
//   associando los pines de LCD-keypad shield, con los pines que
//   estan conectados al Arduino-Uno.
const int rs = IOPIN8, en = IOPIN9, d4 = IOPIN4,
          d5 = IOPIN5, d6 = IOPIN6, d7 = IOPIN7;


//   y declaramos el LCD del shield
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// #define  declara constantes para el compilador ... No ocupan RAM
// Inicializamos las constante usadas por la libraria LiquidCrystal
//   associando los pines de LCD-keypad shield, con los pines que
//   estan conectados al Arduino-Uno.

#define rowsLCD         2        // Número de filas del LCD
#define columnsLCD     16        // Número de columnas del LCD

//  matriz para el display

char mimsg[columnsLCD+1];  // reserva RAM para mis mensajes


//   Constantes que usa el shield LCD-Keypad
#define AKeyPad A0               // Entrada del teclado

                                 // Teclas del KeyPad
#define AKeyPad        A0        // Entrada del teclado
#define TpoRebote   150          // Tiempo para remover rebotes del teclado
boolean btnLeft   = false;       // Atras    / Salir
boolean btnRight  = false;       // Adelante / Entrar menu/submenu
boolean btnUp     = false;       // Opción anterior
boolean btnDown   = false;       // Opción siguiente
boolean btnSelect = false;       // Opción siguiente

// caracteres de la memoria ROM del LCD
#define cArrowR       0x7E        // LCD (icon Flecha Derecha)
#define cArrowL       0x7F        // LCD (icon Flecha Izquierda)
#define cGrados       0xDF        // LCD (icon Grados)
#define cDiv          0xFD        // LCD (icon Division)
#define cEñe          0xEE        // LCD caracter para ñ
#define cEblanco      0x20        // LCD caracter Espacio en blanco


// variables y constantes globales
// Del Arduino-Uno queremos usar el led interno asociado a pin13
#define IOPIN13 13        // Por lo que declaramos el pin del LED interno
int led13 = IOPIN13;      //   y lo definimos.

// Funciones para el Keypad

/**
* readButtons ( )     Lee las teclas del KeyPad
* Entrada Analogica A0 del arduino lee de mi shield LCD-Keypad (0,100,259.409,638)
*  Asi que somos generosos al definir los valores de comparación. Ajusta de acuerdo
*  a lo que lea tu teclado.
*  Usa las siguientes constantes de usuario
*             btnSelect, btnLeft, btnUp, btnDown, btnRight, AKeyPad, TpoRebote
*/
void readButtons( )
     {
         btnLeft     = false;
         btnRight   = false;
         btnUp       = false;
         btnDown  = false;
         btnSelect  = false;

         int val  = analogRead(AKeyPad);
         if (val < 1000)                                 // si alguna tecla fue oprimida?
          {
            delay(TpoRebote);                    // Espera para remover rebotes
            val  = analogRead(AKeyPad);   // re-lee el Key-Pad
          }

         if( val < 30 )
             btnRight = true;
         else if( val < 150 )
             btnUp    = true;
         else if( val < 360 )
             btnDown  = true;
         else if( val < 535 )
             btnLeft  = true;
         else if( val < 760 )
             btnSelect  = true;

//  Revisa el teclado hasta que alla una tecla apretada
      while( (btnLeft || btnRight || btnUp || btnDown || btnSelect) && analogRead(AKeyPad) < 1000 );
   }

  // en miMsg ponemos el resultado del agregar una matriz de caracteres a otra, pero
  // se debe tener cuidado de que sea de un tamaño igual a la suma de caracteres
  // a concatenar + 1

  const char *first = "sent ";      // apuntador al 1er arreglo en memoria Flash
  const char *second = "message";   // apuntador al 1er arreglo en memoria Flash


void setup() {
   // Inicia el LCD:
  lcd.begin(columnsLCD, rowsLCD);

  strcpy(miMsg,first);                // copiamos el primer arreglo al buffer
  strcat(miMsg,second);               // y concatenamos

}

void loop()
  {
  lcd.clear();
  lcd.write(first);               // LCD = sent
  lcd.setCursor(4,0);             //    miMsg deberia estar en la quinta posición
  delay(2000);
  lcd.setCursor(6,1);             //    miMsg deberia estar en la septima posición
  lcd.write(second);
  delay(5000);
  lcd.clear();
  lcd.print(miMsg);                   // LCD = sent message
  delay(5000);
  lcd.clear();
  delay(500);
  lcd.write(first);                // LCD = sent
   delay(5000);
    }
 
Podria alguien ayudarme a entender porque no trabaja el metodo lcd.setCursor(y,x) de la libreria liquidCrystal.h cuando uso este código. Ademas le da igual cuando despliego el mensaje si uso lcd.print(miMsg); o lcd.write(miMsg)

El único error que veo en el código que posteaste es que has declarado "mimsg" todo en minuscula y luego la usas de esta forma "miMsg" con la "m" en mayúscula.
 
Gracias. Era un error de dedo que ya había corregido cuando compilé el programa y no actuali el mismo. (Save)
Recomendación: Siempre se debe publicar el programa compilado que no funciona.
(También incluir información sobre el tipo de pantalla y diagrama esquemático del sistema)
 
Hola. Soy nuevo en arduino y tengo un problema específico con mi pantalla LCD 1602 y el reloj DS3231
El problema es que cuando inicializo el reloj con .begin(), el LCD no me imprime nada, pero si comento esta línea e imprimo un texto cualquiera, si lo hace.
No sé si alguien me podría ayudar.

Va el código que no funciona:
C++:
#include <LiquidCrystal.h>


#include <Wire.h>

#include "RTClib.h"


#define vo 3

#define RS 2

#define E 4

#define D4 5

#define D5 6

#define D6 7

#define D7 8


LiquidCrystal LCD(RS, E, D4, D5, D6, D7);

RTC_DS3231 reloj;


void setup() {


  Wire.begin();

  reloj.begin();

  reloj.adjust(DateTime(__DATE__,__TIME__));



  Serial.begin(9600);


  LCD.begin(16, 2);

  analogWrite(vo, 50);//contraste

  LCD.setCursor(0,0);



}


void loop() {


  DateTime now = reloj.now();


  LCD.print("D: ");

  LCD.print(now.year());

  LCD.print("/");

  LCD.print(now.month());

  LCD.print("/");

  LCD.print(now.day());

  LCD.setCursor(0,1);

  LCD.print("T: ");

  LCD.print(now.hour());

  LCD.print(":");

  LCD.print(now.minute());

  LCD.print(":");

  LCD.print(now.second());


  delay(1000);


  LCD.clear();


}//fin del loop
Subiendo este código a mi arduino Leonardo, no me imprime nada, solo se enciende la pantalla, pero solo eso.
En cambio, si comento las líneas en el setup y todo lo relacionado con el reloj, e imprimo una línea cualquiera, si se imprime en el LCD.
C++:
#include <LiquidCrystal.h>


#include <Wire.h>

#include "RTClib.h"


#define vo 3

#define RS 2

#define E 4

#define D4 5

#define D5 6

#define D6 7

#define D7 8


LiquidCrystal LCD(RS, E, D4, D5, D6, D7);

RTC_DS3231 reloj;


void setup() {


//   Wire.begin();

  //   reloj.begin();

  //  reloj.adjust(DateTime(__DATE__,__TIME__));



  Serial.begin(9600);


  LCD.begin(16, 2);

  analogWrite(vo, 50);//contraste

  LCD.setCursor(0,0);



}


void loop() {


  DateTime now = reloj.now();

/*

LCD.print("D: ");

  LCD.print(now.year());

  LCD.print("/");

  LCD.print(now.month());

  LCD.print("/");

  LCD.print(now.day());

  LCD.setCursor(0,1);

  LCD.print("T: ");

  LCD.print(now.hour());

  LCD.print(":");

  LCD.print(now.minute());

  LCD.print(":");

  LCD.print(now.second());    */


  LCD.print("HOLA");    //comentando las lineas de reloj, logro que esto se imprima en la pantalla

  delay(1000);


  LCD.clear();


}//fin del loop
Si en vez de querer imprimir por la LCD, imprimo por puerto serie la fecha y el tiempo, si funciona, o sea que el reloj está funcionando correctamente.
Aclaro que no tengo el modulo I2C para el LCD, solo conecto directo al arduino.
En cambio, el reloj trabaja con I2C y conecto a los pines SCL y SDA del arduino.
Espero haber sido claro. Gracias, desde ya.
 
Muchas gracias!! el segundo link me ayudo, solo cambie la conexion con el RTC y el arduino leonardo de la forma: SDA = 2 y SCL = 3, y al fin se imprime la hora y la fecha en mi LCD.
 
Buenas,hace tiempo programe una herramienta con arduino con diferentes menu pero lo hice para proteus y ahi si funcionó,hoy me dio por montarlo y me doy cuenta que el lcd no escribe la secuencia que tiene que poner,analizando el código y a prueba y error encontre que lo que hace que no se muestre los texto en el display es lo que se subraya en rojo,aunque no se porque se traba cuando solo estoy guardando lecturas en 4 variables,si quito esas lineas se muestra correctamente
Dejo parte del código

#include <LiquidCrystal.h>
int boton1 = 8;
int boton2 = 9;
int Entrada1;
int Entrada2;
unsigned int frecuencia;
float Salida1 = digitalRead(A0)*1.0;
float Salida2 = digitalRead(A1)*1.0;
float Salida3 = digitalRead(A2)1.0;

float Salida4 = digitalRead(A3)1.0;
int Estado;
int positionCounter;
int numero;
String numerohex;
int velocidad;
int Error1;
int Error2;
int Error3;
int Error4;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
frecuencia = 31;
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(Salida1,OUTPUT);
pinMode(Salida2,OUTPUT);
pinMode(Salida3,OUTPUT);
pinMode(Salida4,OUTPUT)
;
lcd.begin(16, 1);
lcd.print("Hecho por A");
delay(800);
lcd.clear();
delay(500);
lcd.print("Modo de operacion");
delay(1000);
for (int positionCounter = 0; positionCounter < 17; positionCounter++)
{
lcd.scrollDisplayLeft();
delay(100);
}
}
void loop() {
// put your main code here, to run repeatedly:
}
 
float Salida3 = digitalRead(A2)1.0;
float Salida4 = digitalRead(A3)1.0;
Eso de arriba 👆 ni siquiera compila. Falta algun operador entre el paréntesis que cierra y el 1.0

De todas formas está mal puesto, por que estás tratando de inicializar variables globales con una lectura del ADC y no sabés como ni cuando las instancia el linker...andá a saber que ocurre ahí.

Además las líneas de setup() que configuran las variables SalidaX las ponen como "output" pero vos has intentado usarlas como entradas analógicas en un momento desconocido.

Solo tenes que declarar las variables e inicializarlas correctamente en la función setup( ).

Y te recomiendo estudiar el lenguaje C para no andar haciendo desastres como este sin sentido.
 
digitalRead() no es flotante, y ni siquiera es numérico, simplemente es 1 o 0 (o TRUE o FALSE respectivamente).

Aparte tampoco compartes cómo montaste el circuito en la vida real, entre otras cosas, como el resto del código y librerías usada...
 
Buenas,hace tiempo programe una herramienta con arduino con diferentes menu pero lo hice para proteus y ahi si funcionó,hoy me dio por montarlo y me doy cuenta que el lcd no escribe la secuencia que tiene que poner,analizando el código y a prueba y error encontre que lo que hace que no se muestre los texto en el display es lo que se subraya en rojo,aunque no se porque se traba cuando solo estoy guardando lecturas en 4 variables,si quito esas lineas se muestra correctamente
Dejo parte del código
Si es verdad que "eso" funciona en proteus, o hizo algo parecido a funcionar es la demostración de que no debes de usar proteus nunca mas.
No tiene por donde agarrar ese "código" por llamarlo de algún modo.
Todo está en el setup luego solo se ejecuta una vez
Tienes lecturas de variables analógicas como float multiplicadas por 1 ¿Para que multiplicas por 1? que además están en el área de definición de las variables y no en el código
Está claro que puedes llamar como quieras a tus variables pero llamar salida a una entrada no le veo sentido.
Luego al valor de una lectura analógica que haces en digital y multiplicas por uno y es un float a ese número sea el que sea lo declaras como salida. No caben mas burradas en un solo pin.

Con el mayor de los respetos no tienes ni idea de programar.
 
Si es verdad que "eso" funciona en proteus, o hizo algo parecido a funcionar es la demostración de que no debes de usar proteus nunca mas.
No tiene por donde agarrar ese "código" por llamarlo de algún modo.
Todo está en el setup luego solo se ejecuta una vez
Tienes lecturas de variables analógicas como float multiplicadas por 1 ¿Para que multiplicas por 1? que además están en el área de definición de las variables y no en el código
Está claro que puedes llamar como quieras a tus variables pero llamar salida a una entrada no le veo sentido.
Luego al valor de una lectura analógica que haces en digital y multiplicas por uno y es un float a ese número sea el que sea lo declaras como salida. No caben mas burradas en un solo pin.

Con el mayor de los respetos no tienes ni idea de programar.
Es que es mi primer código grande si,si vieras lo demas del código lo hice solo con for..
digitalRead() no es flotante, y ni siquiera es numérico, simplemente es 1 o 0 (o TRUE o FALSE respectivamente).

Aparte tampoco compartes cómo montaste el circuito en la vida real, entre otras cosas, como el resto del código y librerías usada...
Bueno,te pongo el código (decir que no esta terminado,hay que arreglar algunos bugs)
#include <LiquidCrystal.h>
int boton1 = 8;
int boton2 = 9;
int Entrada1;
int Entrada2;
unsigned int frecuencia;
float Salida1 == analogRead(A0);
float Salida2 == analogRead(A1);
float Salida3 == analogRead(A2);
float Salida4 == analogRead(A3);
int Estado;
int positionCounter;
int numero;
String numerohex;
int velocidad;
int Error1;
int Error2;
int Error3;
int Error4;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup()
{
frecuencia = 31;
pinMode(boton1,INPUT);
pinMode(boton2,INPUT);
pinMode(Salida1,OUTPUT);
pinMode(Salida2,OUTPUT);
pinMode(Salida3,OUTPUT);
pinMode(Salida4,OUTPUT);
lcd.begin(16, 1);
lcd.print("Hecho por A");
delay(800);
lcd.clear();
delay(500);
lcd.print("Modo de operacion");
delay(1000);
for (int positionCounter = 0; positionCounter < 17; positionCounter++)
{
lcd.scrollDisplayLeft();
delay(100);
}
}


void conversion()
{
for (;Estado == 0 && digitalRead(boton1) == 0 && digitalRead(boton2) == 0;)
{
lcd.clear();
lcd.print("conversion");
Estado == 1;
}
for (;Estado == 1 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 2)
{
lcd.clear();
lcd.print("Pon el numero:");
lcd.print(numero);
delay(500);
}
for (;Estado == 2 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;)
{
for (numero++;numero < 513 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;)
{
lcd.clear();
lcd.print("Pon el numero:");
lcd.print(numero);
delay(100);
}
}
for (;Estado == 2 && digitalRead(boton1) == 0 && digitalRead(boton2) == 1;)
{
for (numero--;Estado == 2 && numero > 0 && digitalRead(boton2) == 1 ;)
{
lcd.clear();
lcd.print("Pon el numero:");
lcd.print(numero);
delay(100);
}
}
for (;Estado == 2 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 3)
{
numerohex = String(numero, BIN);
lcd.clear();
lcd.print("Bin:");
lcd.print(numerohex);
}
for (;Estado == 3 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;Estado = 4)
{
numerohex = String(numero, HEX);
lcd.clear();
lcd.print("Hex:");
lcd.print(numerohex);
}
}


void loop()
{
conversion();
comprobacion();
}


void comprobacion()
{
for (;Estado == 10 && digitalRead(boton1) == 0 && digitalRead(boton2) == 1;)
{
Estado = 0;
}
for (;Estado == 1 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;Estado = 10)
{
lcd.clear();
lcd.print("Comprobacion 74xx");
delay(500);
for (int positionCounter = 0; positionCounter < 16;positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Comprobacion 74xx");
delay(100);
}
}
for (;Estado == 10 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 11)
{
lcd.clear();
lcd.print("7400");
delay(500);
}
for (;Estado == 11 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 112)
{
Error1 = 0;
Error2 = 0;
Error3 = 0;
Error4 = 0;
lcd.clear();
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 1:");
if (Error1 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error1);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 2:");
if (Error2 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error2);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 3:");
if (Error3 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error3);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 4:");
if (Error4 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error4);
lcd.print(" ");
delay(200);
}
lcd.clear();
}
for (;Estado == 11 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;Estado = 12)
{
lcd.clear();
lcd.print("7408");
delay(500);
}
for (;Estado == 12 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 112)
{
Error1 = 0;
Error2 = 0;
Error3 = 0;
Error4 = 0;
lcd.clear();
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 < 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 1:");
if (Error1 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error1);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 2:");
if (Error2 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error2);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 3:");
if (Error3 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error3);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 4:");
if (Error4 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error4);
lcd.print(" ");
delay(200);
}
lcd.clear();
}
for (;Estado == 12 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;Estado = 13)
{
lcd.clear();
lcd.print("7432");
delay(500);
}
for (;Estado == 13 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 112)
{
Error1 = 0;
Error2 = 0;
Error3 = 0;
Error4 = 0;
lcd.clear();
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 < 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 < 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 1:");
if (Error1 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error1);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 2:");
if (Error2 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error2);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 3:");
if (Error3 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error3);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 4:");
if (Error4 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error4);
lcd.print(" ");
delay(200);
}
lcd.clear();
}
for (;Estado == 13 && digitalRead(boton1) == 1 && digitalRead(boton2) == 0;Estado = 14)
{
lcd.clear();
lcd.print("7486");
delay(500);
}
for (;Estado == 14 && digitalRead(boton1) == 1 && digitalRead(boton2) == 1;Estado = 112)
{
Error1 = 0;
Error2 = 0;
Error3 = 0;
Error4 = 0;
lcd.clear();
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 > 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 > 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 > 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 > 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,1);
digitalWrite(Entrada2,0);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 < 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
digitalWrite(Entrada1,0);
digitalWrite(Entrada2,1);
for (;Salida1/1023*5 < 2 && Estado == 112;)
{
Error1++;
}
for (;Salida2/1023*5 < 2 && Estado == 112;)
{
Error2++;
}
for (;Salida3/1023*5 < 2 && Estado == 112;)
{
Error3++;
}
for (;Salida4/1023*5 < 2 && Estado == 112;)
{
Error4++;
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 1:");
if (Error1 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error1);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 2:");
if (Error2 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error2);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 3:");
if (Error3 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error3);
lcd.print(" ");
delay(200);
}
for (int positionCounter = 0; positionCounter < 13; positionCounter++)
{
lcd.scrollDisplayLeft();
lcd.print("Puerta 4:");
if (Error4 >= 1)
{
lcd.print("MAL");
}
else
{
lcd.print("BIEN");
}
lcd.print(" ");
lcd.print("Err:");
lcd.print(Error4);
lcd.print(" ");
delay(200);
}
lcd.clear();
}
}
Parece que la página autotrasmuta : y ) al icono
 
Última edición:
Eso de arriba 👆 ni siquiera compila. Falta algun operador entre el paréntesis que cierra y el 1.0

De todas formas está mal puesto, por que estás tratando de inicializar variables globales con una lectura del ADC y no sabés como ni cuando las instancia el linker...andá a saber que ocurre ahí.
Y yo debo estar fumando cosas raras...
Revisé el código varias veces y ví analogRead....y era digitalRead :oops::oops::oops:.
Igual está mal, pero olvidate lo del ADC.
 
Y yo debo estar fumando cosas raras...
Revisé el código varias veces y ví analogRead....y era digitalRead :oops::oops::oops:.
Igual está mal, pero olvidate lo del ADC.
si me acabo de dar cuenta también,lo cambié porque eso es la lectura del voltaje y no tiene sentido que lea 5 o 0 v cuando no todas las puertas lógicas son perfectas

Es una herramienta que comprueba la serie 74xx y transforma de un número decimal a binario y hexadecimal.
La parte de comprobación de la serie 74xx no se si es la mejor manera de hacerlo pero es la que se me ocurrio como estudiante de electrónica

Edit:parece que después de cambiar a analogRead y solo cojer la parte de setup si imprime bien,tendre que revisar el desastre de abajo que es lo que hace que no se imprima bien

Lo que tengo una duda ¿como le puedo dar un valor a una variable sin referirme al pin? por ejemplo
Estado = 0;
Esto seria decir que Estado es igual al pin 0 pero yo solo quiero que tenga el valor 0,no se si con "" podria
 
Última edición:
Tienes un lío mental sideral.
No se sostiene lo que dices.
Ve a estudiar una introducción a la programación porque lo que dices no es coherente.

Repito que no lo digo con ánimo de ofender, esque es un concurso de cosas absurdas...
si me acabo de dar cuenta también,lo cambié porque eso es la lectura del voltaje y no tiene sentido que lea 5 o 0 v cuando no todas las puertas lógicas son perfectas
Ni por asomo. los conversores analogico a digital pasan de aGnd a aVcc el valor que haya dado en los 2ⁿ bits de la conversion. Nada de 0 y 5V
ademas es absurdo leer una entrada y en funcion de eso definir un pin como float multiplicado por 1... disparate×diaparate×disparate.
Es una herramienta que comprueba la serie 74xx y transforma de un número decimal a binario y hexadecimal.
¿Que que como qué? Esa frase no se sostiene. ¿como que numero decimal binario y hexadecimal?
Un numero es un numero y siempre es binario o en coma flotante. Tu lo representas como te interese.
La parte de comprobación de la serie 74xx no se si es la mejor manera de hacerlo pero es la que se me ocurrio como estudiante de electrónica
No se entiende esa frase.
Pues estudia un poco más, o un poco menos pero entiende algo.
Edit:parece que después de cambiar a analogRead y solo cojer la parte de setup si imprime bien,tendre que revisar el desastre de abajo que es lo que hace que no se imprima bien
¿Pero como vas a definir que pin segun leas otro pin?
Que compile no significa nada.
Lo que tengo una duda ¿como le puedo dar un valor a una variable sin referirme al pin? por ejemplo
¿Que tiene que ver la variable con el pin?
si tu dices
int edad = 15; pues se guarda 15 en edad. Si cada año le sumas 1 pues irá sumando...
¿Que pinta el pin ahí?
Estado = 0;
Esto seria decir que Estado es igual al pin 0
No, eso no es lo que tu dices.
pero yo solo quiero que tenga el valor 0,no se si con "" podria
No, 0 es el valor numerico 0 y "" es una cadena vacia.
Von el lio que llevas solo te falta meterte en cadenas en C...



Busca un libro de programacion basica-elemental a ver si de deslias la enseimada mental que llevas. Tienes todos los conceptos mal y mezclados.
 
Última edición:
Atrás
Arriba