Pantalla LCD-I2c y Diodo led

Hola a todos, abro este post para ver si alguien puede despejarme una duda que tengo.
Estoy comenzando en esto del prototipado con arduino y uno de los primeros “proyectos” que estoy intentando hacer es encender un led desde el pin digital numero 3 y mostrar el estado del led con una lcd que simplemente muestre “Encendido” o “Apagado”.
Las dos tareas por separado, funcionan correctamente, el led parpadea por un lado o la pantalla muestra la informacion por otro, pero al momento de unir las dos partes no hace ni una cosa ni otra, por eso pido ayuda a quien pueda darmela.

El codigo que estoy usando es este:

#include <Wire.h> 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

int led=3;

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();
  pinMode(led, OUTPUT);

}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  lcd.print("Activo");
  delay(1000);               // wait for a second
  lcd.clear();
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  lcd.print("Desactivado");
  delay(1000);               // wait for a second
  lcd.clear();
}

Desde ya muchisimas gracias a todos!
Saludos

Saludos No vi problemas en el código. Pero si te comento como tienes una LCD de 20x4 seria bueno querés luego del lcd.clear() coloques un delay de 5 o 10 para dar tiempo al display de ejecutar la orden de limpieza

max_saeta:
Saludos
No vi problemas en el código. Pero si te comento como tienes una LCD de 20x4 seria bueno querés luego del lcd.clear() coloques un delay de 5 o 10 para dar tiempo al display de ejecutar la orden de limpieza

Muchas gracias por tu pronta respuesta Max, pero nada, el poner el delay(); no funciona.

Un detalle, que no se si es importante o no, pero por si acaso lo pongo, la libreria LiquidCrystal_I2C que estoy usando es la de F Malpartida (https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads)
y la pantalla que uso es la YwRobot Arduino LCM1602 IIC V1

Saludos!!

puede ser la direccion que no sea la correcta, lee la info en la pagina del que hizo el display

maxid:
puede ser la direccion que no sea la correcta, lee la info en la pagina del que hizo el display

Muchas gracias por responder!
La direccion de la pantalla esta bien, la detecte con un sketch que se encarga de eso, si lo que ya comentaba, los elementos por separado funcionan correctamente, pero al unirlos es cuando fallan. Como detalle el led, es un led normal, que no tiene interfaz ni nada, y la placa que uso es una leonardo.
Quiero poner una foto de comp esta el circuito montado tambien, por si acaso veis algun fallo.
Muchas gracias! :slight_smile:

creo lo estas volviendo loco, imagina que envias al display miles de veces datos. has la prueba de poner un if que haga la impresion solo cuando haya un cambio para enviar a la pantalla. un boton para hacer el cambio de estado, lees la salida 3 y si cambio imprimes sino sigues preguntando por el pin 3.

Solucion simple

#include <Wire.h> 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

int led=3;

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();
  pinMode(led, OUTPUT);
  lcd.clear();

}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  int i = 0;

  if (i++/2) {      // cada vez que i sea impar encenderá y cuando sea par se apagara.
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
      //            01234567890123456
      lcd.print("Activo           ");  // completa con espacios para que uno borre el anterior.
  else {
       digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
      //            01234567890123456
       lcd.print("Desactivado");
  }
  delay(1000);               // wait for a second

}

surbyte:
Solucion simple

#include <Wire.h> 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

int led=3;

void setup()   /----( SETUP: RUNS ONCE )----/
{
 
  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines, turn on backlight
  lcd.backlight();
  pinMode(led, OUTPUT);
  lcd.clear();

}/–(end setup )—/

void loop()   /----( LOOP: RUNS CONSTANTLY )----/
{
  int i = 0;

if (i++/2) {      // cada vez que i sea impar encenderá y cuando sea par se apagara.
      digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
      //            01234567890123456
      lcd.print("Activo           ");  // completa con espacios para que uno borre el anterior.
  else {
       digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
      //            01234567890123456
       lcd.print(“Desactivado”);
  }
  delay(1000);               // wait for a second

}

no va a funcionar si defines la variable cada vez en el loop debe estar fuera

Tienes razón.

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  int i = 0;

  while (1) {
    if (i++/2) {      // cada vez que i sea impar encenderá y cuando sea par se apagara.
        digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
        //         01234567890123456
        lcd.print("Activo     ");  // completa con espacios para que uno borre el anterior.
    else {
         digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
        //          01234567890123456
         lcd.print("Desactivado");
    }
    delay(1000);               // wait for a second
  }

}

Hola,

Cambia esto:

int led=3;

Por esto:

int led=13;

Al parecer usas el pin 3 para la pantalla por lo que no lo puedes usar para el led.

Saludos,

Luis A. Mata C.

Que tiene de malo el pin3? es el pin del arduino no del ATMEGA328 que se usa para la comunicacion serie, si fuera asi tendría razón. IO3 o pin3 es el pin 5 de ATMEGA328

Pin 3 del ATMEGA328 es pin IO1 del Arduino UNO.

A eso te refieres Luis?

se refiere a que lo declara en la creacion del objeto

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

y despues lo usa para manejarlo manualmente

Ahhh mucha razón por cierto!!! Yo apunté para otro lado. Mis disculpas.