Cursores del LCD

Hola:

Uso el LCD Kaypad Shield 16x2.

Cuando indico que me muestre el cursor con este comando.
Código:
 lcd.cursor();
Me muestra esto: _
De forma fija me muestra _, sin parpadeos ni nada.
Si lo quiero ocultar uso esta otra instrucción:
Código:
lcd.noCursor();

Quiero que ese cursor _ parpadee. En el cual he usado esta otra Instrucción y si parpadea, pero me sale otro tipo de cursor que es esto:
Código:
lcd.blink();


¿Existe parpadeo del _ y no de este otro caracter █?

Saludos.
 
Que yo sepa en las instrucciones del LCD si, pero otra cuestión es que lo soporte la librería.
Hay como tres docenas de librerías para LCD, mira a ver que hace y que no hace la tuya.
 
Que yo recuerde se puede elegir.como de gordo quieres el cursor, desde un solo pixel a los 8 de uno en uno.
Si parpadea y si se escribe de izquierda a derecha o de derecha a izquierda.
Todo eso creo recordar, en su día lo hice todo a mano.
 
Hola:

En la consola de C# se cambia de tamaño en portentaje del 1 al 100.

C#:
Console.CursorSize = 1;

Lo que dices de Arduino se muestra aquí.

Página oficial de Arduino.

Tiene de todo menos el que dice, en la consola C# si lo incluye. Lo digo como ejemplo. ;)

Me da que tengo que programarlo desde cero.

Saludos.
 
no se a que se refieren con hacerlo manual...
dale una mirada a esto

Cursor/Blink Control Circuit The cursor/blink control circuit generates the cursor or character blinking. The cursor or the blinking will appear with the digit located at the display data RAM (DDRAM) address set in the address counter (AC). For example (Figure 8), when the address counter is 08H, the cursor position is displayed at DDRAM address 08H. AC6 0 AC5 0 AC4 0 AC3 1 AC2 0 AC1 0 AC0 0 1 00 2 01 3 02 4 03 5 04 6 05 7 06 8 07 9 08 10 09 11 0A 1 00 40 2 01 41 3 02 42 4 03 43 5 04 44 6 05 45 7 06 46 8 07 47 9 08 48 10 09 49 11 0A 4A AC cursor position cursor position Display position DDRAM address (hexadecimal) Display position DDRAM address (hexadecimal) For a 1-line display For a 2-line display Note: The cursor or blinking appears when the address counter (AC) selects the character generator RAM (CGRAM). However, the cursor and blinking become meaningless. The cursor or blinking is displayed in the meaningless position when the AC is a CGRAM address. Figure 8 Cursor/Blink Display Example
 
Por fin lo conseguí.
C:
void loop()
{
  lcd.cursor(); // Activa cursor.
  delay(500);
  lcd.noCursor(); // Desactiva cursor.
  delay(500);
}

Como no quiero usar delay y si milli(). No me sale, pero se que algo así era.
C:
// 500 mili segundos.
unsigned long intervalo = 500;

void loop()
{
  lcd.cursor(); // Activa cursor.
  intervalo = millis();
  lcd.noCursor(); // Desactiva cursor.
  intervalo = millis();
}

Si saben hacelo en millis, quiero ver un ejemplo.

@Jota Jota
Porque me sale con el blicnk el █, no quiero eso, solo quiero el _.
 
¿En serio vas a apagar y encender el cursor "a mano"?
¿Tan importante es la forma del cursor? Estoy perplejo
¿Defines un long para una cosa de tamaño Int? 500 no es long.

Usa interrupciones.
Delays es una M entera pero millis es media M, o tres cuartos, no sabría decir el tamaño.
Copiado tal cual de la librería flexitimer2:

C:
// Toggle LED on pin 13 each second
#include <FlexiTimer2.h>

void flash() {
  static boolean output = HIGH;

  digitalWrite(13, output);
  output = !output;
}

void setup() {
  pinMode(13, OUTPUT);

  FlexiTimer2::set(500, flash); // 500ms period
  FlexiTimer2::start();
}

void loop() {
}

Cambia digitalWrite por cursor y ya estará parpadeando para siempre

He estado leyendo el datasheet del HD44780U y parece que el tamaño del cursor no es configurable. Me traicionó la memoria.
 
Última edición:
Hola:

Mi idea no es usar librerías de terceros. Cuando hablo a mano, no me refiero que haga parpadear el cursor _ con la mano. :ROFLMAO:

Mi idea es crear una función que haga eso.

Saludos.
 
Como este aquí que funciona de maravilla pero usa delay que eso ya no me hace gracia.

C++:
void loop()
{
  lcd.cursor(); // Activa cursor.
  delay(500);
  lcd.noCursor(); // Desactiva cursor.
  delay(500);
}

Creao una función llamada por ejemplo, miCursor(); Y ya está.
C++:
void loop()
{

// Función.
void miCusror()
{
  lcd.cursor(); // Activa cursor.
  delay(500);
  lcd.noCursor(); // Desactiva cursor.
  delay(500);
}


// Llamo a mi función.
miCursor();

}
 
Por eso no quiero usar delay, que se me esclavisa el pobre Arduinio eternamente. Es un ejemplo tonto para que se entienda.
Ya que es programable Arduino, me imagino que se podrá hacer como digo.
 
Entonces....

Como dicen.

O me conformo con el que viene por defecto. █
 
Eso dependera de ti, y del programa en si. Si no es critico, usa cualquiera, si los tiempos son criticos, entonces usa el flexitimer.
Yo para una alarma de auto, uso lo de millis y los if para algunas cosas, el resto corre sin delay ni nada. Ni siquiera uso interrupciones (aunque deberia), pero en mi caso no es crucial los tiempos, ya que no tengo nada que demore.
 
Me parece un despilfarro lo resuelvas como lo resuelvas. Yo me conformaría con el cursor que sea que haga el controlador del display que es una cosa totalmente estética.
En cualquier caso me parece infinitamente mas sencillo usar interrupciones que cualquier otro método.
Efectivo ya ni comentar.
 
Como experiencia, a veces nos piden hacer esos arreglos estéticos que lo único que hace es complicar el producto final en algo que no suma a las prestaciones del equipo.

Pero bueno, el cliente es el que tiene la razón. :rolleyes:
 
Me parece un despilfarro lo resuelvas como lo resuelvas. Yo me conformaría con el cursor que sea que haga el controlador del display que es una cosa totalmente estética.
En cualquier caso me parece infinitamente mas sencillo usar interrupciones que cualquier otro método.
Efectivo ya ni comentar.
Al final, opino igual.
 
Arriba