Problemas con pantalla OLED

Hola buenas tardes a tod@s, soy un poco nuevo con el tema de arduino y estaba haciendo un proyecto de mostrar un texto en una pantalla OLED 0.96" I2C.

Pero la pantalla solo se calienta mas no muestra el texto, aqui pueden ver mi codigo y como lo conecte para ver si me podeis ayudar.

#include <Adafruit_SSD1306.h>  // incluye la libreria de adafruit para el driver del display OLED

Adafruit_SSD1306 display(128, 32);  // declara la resolucion del display

int cont=0;
int tam=0;
void setup(){   
               
  Serial.begin(9600);
  delay(100);  // se da una espera de 100ms para que el display inicie correctamente
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // inicia la comunicacion I2C con el display que tiene la direccion 0x3C
  display.setRotation(0);  // se escoje la orientacion del display puede ser 0, 1, 2 o 3
  display.setTextColor(WHITE);  // se le dice a la pantalla que el texto que se va a desplegar es en color blanco 

  display.dim(true); //dejamos el brillo en minimo 

  //esto solo es visible al iniciar el programa:
  
  display.clearDisplay();  // limpia el buffer del display
  display.setTextSize(2);  // cambia tamaño de letra a 2 
  display.setCursor(0, 0); //(x,y) pone el cursor en el origen del display 
  display.println("Iniciando"); //escribe en buffer del display
  display.display(); // muestra la informacion del buffer en la pantalla 
  delay(2000); //pausa de 2 segundos o 2000 milisegundos 
} 

void loop(){

// primera pantalla de presentacion 
  int sensorValue = analogRead(A5);
  display.dim(true); // brillo maximo 
  
  display.clearDisplay();  
  display.setTextSize(1); // selecciona el tamaño de la letra puede ser u entre 1 y 10
  display.setCursor(0, 0);  // (x,y) pone el cursor en el origen del display
  display.println("CANAL AQUILES VAESA"); 
  display.setCursor(0, 30);  // (x,y) pone el cursor mas o menos en la mitad horizontal del display
  display.println("youtube.com/aquilesvaesa");
  display.setCursor(30, 50); //(x,y) 
  display.println(">  Suscribete  <");
  display.display(); 
  delay(5000); //pausa de 5 segundos o 5000 milisegundos


// segundo pantallazo, bajamos el brillo del display 
 
  display.dim(true); //dejamos el brillo en minimo 
  
  display.clearDisplay();  
  display.setTextSize(2);  // cambia tamaño de letra a 2 
  display.setCursor(0, 0);  
  display.println("Escala de letra 2.  Probando texto largo y desborde"); //Por defecto el texto largo se desborda y continua en la siguiente linea
  display.display(); 
  delay(5000);

// tercer pantallazo

  display.clearDisplay();  
  display.setTextWrap(false); // desactiva el desborde de texto
  display.setTextSize(2);  
  display.setCursor(0, 0);  
  display.println("Desborde desactivado con la instruccion display.setTextWrap(false) ...");
  display.display(); 
  delay(5000);

// cuarto pantallazo
  
  display.clearDisplay();  
  display.setTextWrap(true); // activa el desborde de texto
  display.setTextSize(1);  
  display.setCursor(0, 30);  
  display.println("Vamos a desplegar una variable entera en diferentes escalas del 1 al 9 ");
  display.display(); 
  delay(7000);

// pantalla final varia con el incremento de las variables de los ciclos "for" 

  for(int tam = 1; tam < 10; tam++){  // creamos un ciclo con la variable tam (tamaño) que va desde 1 hasta 9
    display.setTextSize(tam); // usa la variable tam para cambiar el tamaño del texto en cada ciclo
      for(int cont=0; cont<10; cont++){ //creamos un ciclo con la variable cont (contador) que va de 0 a 9 y se muestra en la pantalla
        display.clearDisplay();
        display.setCursor(0, 0);  
        display.println(cont); // escribe el valor de la variable en el bufer 
        display.display(); 
        delay(100);
      }

  } 
  
}  // Final de la funcion principal, salta al inicio del "void loop"

Espero que no se caliente mucho, ( que queme al tocarla) eso significaria que estaria dañada.
En principio por lo que veo la tratas como una 128X32:

Y esa de la foto es una 128 x64, que segun los ejemplos que tengo, ( tengo funcionando las dos) llevan chip y librerias diferentes. quita la libreria que tienes, carga las siguientes y declara antes del setup:

#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
Adafruit_SH1106 display(-1); //(-1) = pin del Reset (-1 si comparte el pin reset del Arduino o la pantalla no lleva pin de reset)

Y en setup inicia la comunicacion I2C con la siguiente instruccion :

display.begin(SH1106_SWITCHCAPVCC, 0x3C); 

En una lectura rapida de tu codigo no veo nada mas significativo , salvo que haces unos print en la pantalla muy largos y te los truncara, deberas cortarlos e imprimir en dos tiempos o en dos lineas.
Saludos.

Hola buenas noches, gracias por responder tan rapido lo aprecio.

Intente hacer lo que dijiste de cambiar las librerias y el display begin pero ahora me suelta un nuevo error al compilar

#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
Adafruit_SH1106 display(-1); 

int cont=0;
int tam=0;
void setup(){   
               
  Serial.begin(9600);
  delay(100);  // se da una espera de 100ms para que el display inicie correctamente
  display.begin(SH1106_SWITCHCAPVCC, 0x3C); 
  display.setRotation(0);  // se escoje la orientacion del display puede ser 0, 1, 2 o 3
  display.setTextColor(WHITE);  // se le dice a la pantalla que el texto que se va a desplegar es en color blanco 

  display.dim(true); //dejamos el brillo en minimo 

  //esto solo es visible al iniciar el programa:
  
  display.clearDisplay();  // limpia el buffer del display
  display.setTextSize(2);  // cambia tamaño de letra a 2 
  display.setCursor(0, 0); //(x,y) pone el cursor en el origen del display 
  display.println("Iniciando"); //escribe en buffer del display
  display.display(); // muestra la informacion del buffer en la pantalla 
  delay(2000); //pausa de 2 segundos o 2000 milisegundos 
} 

void loop(){

// primera pantalla de presentacion 
  display.dim(true); // brillo maximo 
  
  display.clearDisplay();  
  display.setTextSize(1); // selecciona el tamaño de la letra puede ser u entre 1 y 10
  display.setCursor(0, 0);  // (x,y) pone el cursor en el origen del display
  display.println("CANAL AQUILES VAESA"); 
  display.setCursor(0, 30);  // (x,y) pone el cursor mas o menos en la mitad horizontal del display
  display.println("youtube.com/aquilesvaesa");
  display.setCursor(30, 50); //(x,y) 
  display.println(">  Suscribete  <");
  display.display(); 
  delay(5000); //pausa de 5 segundos o 5000 milisegundos


// segundo pantallazo, bajamos el brillo del display 
 
  display.dim(true); //dejamos el brillo en minimo 
  
  display.clearDisplay();  
  display.setTextSize(2);  // cambia tamaño de letra a 2 
  display.setCursor(0, 0);  
  display.println("Escala de letra 2.  Probando texto largo y desborde"); //Por defecto el texto largo se desborda y continua en la siguiente linea
  display.display(); 
  delay(5000);

// tercer pantallazo

  display.clearDisplay();  
  display.setTextWrap(false); // desactiva el desborde de texto
  display.setTextSize(2);  
  display.setCursor(0, 0);  
  display.println("Desborde desactivado con la instruccion display.setTextWrap(false) ...");
  display.display(); 
  delay(5000);

// cuarto pantallazo
  
  display.clearDisplay();  
  display.setTextWrap(true); // activa el desborde de texto
  display.setTextSize(1);  
  display.setCursor(0, 30);  
  display.println("Vamos a desplegar una variable entera en diferentes escalas del 1 al 9 ");
  display.display(); 
  delay(7000);

// pantalla final varia con el incremento de las variables de los ciclos "for" 

  for(int tam = 1; tam < 10; tam++){  // creamos un ciclo con la variable tam (tamaño) que va desde 1 hasta 9
    display.setTextSize(tam); // usa la variable tam para cambiar el tamaño del texto en cada ciclo
      for(int cont=0; cont<10; cont++){ //creamos un ciclo con la variable cont (contador) que va de 0 a 9 y se muestra en la pantalla
        display.clearDisplay();
        display.setCursor(0, 0);  
        display.println(cont); // escribe el valor de la variable en el bufer 
        display.display(); 
        delay(100);
      }

  } 
  
}  // Final de la funcion principal, salta al inicio del "void loop"

Quita todas las intrucciones

display.dim( );

Parece ser que esta libreria no la soporta. Aunque con advertencias de memoria compila. pruebalo a ver si imprime algo.`

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Perdona no entiendo a que te refieres con que quite todas las instrucciones me podrias explicar :sweat_smile:

Que esa pantalla no tiene control de brillo, luego las tres instruciones que tienes del tipo

 display.dim(true);  

Que las borres o comentes, no le gustan a la libreria, observalo en las lineas 2, 4 y 5 del mensaje de error.

Hice lo que me dijiste y ahora me dice esto.

¿Has quitado las tres que tiene tu codigo?

Moderador
@arduino_kiddo
Los errores se postean igual que el código. Copias y pegas entre </> oka!!.
Es la segunda advertencia y veo que la primera (del post#3) no la has corregido.
Próxima advertencia no te va a gustar!.

Solamente mando el codigo completo para que lo vea pero estare atento a las advertencias

Si, y me da ese error

Lo siento, me equivoque desde el principio, como tengo varias pantallitas de esas de 32 y 64 de alto me lie.
Olvida todo lo dicho sobre los chip que te comente en el post #2, estan bien definidos lo que defines mal es tipo de pantalla ha de ser de 128x64 y en cuanto a las sentencias

display.dim(true);  

Esas si has de quitarlas . Echas esas correcciones tu primer codigo queda asi:

#include <Adafruit_SSD1306.h>  // incluye la libreria de adafruit para el driver del display OLED

Adafruit_SSD1306 display(128, 64);  // declara la resolucion del display

int cont = 0;
int tam = 0;
void setup() {

  Serial.begin(9600);
  delay(100);  // se da una espera de 100ms para que el display inicie correctamente
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // inicia la comunicacion I2C con el display que tiene la direccion 0x3C
  display.setRotation(0);  // se escoje la orientacion del display puede ser 0, 1, 2 o 3
  display.setTextColor(WHITE);  // se le dice a la pantalla que el texto que se va a desplegar es en color blanco

  //  display.dim(true); //dejamos el brillo en minimo

  //esto solo es visible al iniciar el programa:

  display.clearDisplay();  // limpia el buffer del display
  display.setTextSize(2);  // cambia tamaño de letra a 2
  display.setCursor(0, 0); //(x,y) pone el cursor en el origen del display
  display.println("Iniciando"); //escribe en buffer del display
  display.display(); // muestra la informacion del buffer en la pantalla
  delay(2000); //pausa de 2 segundos o 2000 milisegundos
}

void loop() {

  // primera pantalla de presentacion
  int sensorValue = analogRead(A5);
  //  display.dim(true); // brillo maximo

  display.clearDisplay();
  display.setTextSize(1); // selecciona el tamaño de la letra puede ser u entre 1 y 10
  display.setCursor(0, 0);  // (x,y) pone el cursor en el origen del display
  display.println("CANAL AQUILES VAESA");
  display.setCursor(0, 30);  // (x,y) pone el cursor mas o menos en la mitad horizontal del display
  display.println("youtube.com/aquilesvaesa");
  display.setCursor(30, 50); //(x,y)
  display.println(">  Suscribete  <");
  display.display();
  delay(5000); //pausa de 5 segundos o 5000 milisegundos


  // segundo pantallazo, bajamos el brillo del display

  //  display.dim(true); //dejamos el brillo en minimo

  display.clearDisplay();
  display.setTextSize(2);  // cambia tamaño de letra a 2
  display.setCursor(0, 0);
  display.println("Escala de letra 2.  Probando texto largo y desborde"); //Por defecto el texto largo se desborda y continua en la siguiente linea
  display.display();
  delay(5000);

  // tercer pantallazo

  display.clearDisplay();
  display.setTextWrap(false); // desactiva el desborde de texto
  display.setTextSize(2);
  display.setCursor(0, 0);
  display.println("Desborde desactivado con la instruccion display.setTextWrap(false) ...");
  display.display();
  delay(5000);

  // cuarto pantallazo

  display.clearDisplay();
  display.setTextWrap(true); // activa el desborde de texto
  display.setTextSize(1);
  display.setCursor(0, 30);
  display.println("Vamos a desplegar una variable entera en diferentes escalas del 1 al 9 ");
  display.display();
  delay(7000);

  // pantalla final varia con el incremento de las variables de los ciclos "for"

  for (int tam = 1; tam < 10; tam++) { // creamos un ciclo con la variable tam (tamaño) que va desde 1 hasta 9
    display.setTextSize(tam); // usa la variable tam para cambiar el tamaño del texto en cada ciclo
    for (int cont = 0; cont < 10; cont++) { //creamos un ciclo con la variable cont (contador) que va de 0 a 9 y se muestra en la pantalla
      display.clearDisplay();
      display.setCursor(0, 0);
      display.println(cont); // escribe el valor de la variable en el bufer
      display.display();
      delay(100);
    }

  }

}  // Final de la funcion principal, salta al inicio del "void loop"

Y este si me fnciona correctamente.
No obstante el segundo codigo que pusiste en el post#3, (con los chip cambiados) si le quitas las tres lineas de:

display.dim(true);

Tambien funciona pero deforma las letras y enciende la primera columna de pixeles.
Tambien me preocupa lo del calentamiento, eso es debido a que invertiste la alimentación , (me ha ocurrido mediante las pruebas durante unos segundos). Mi pantalla sobrevivió a esos segundos , espero que la tuya tambien.
Prueba este nuevo codigo , revisa las conexiones y me cuentas si funciona y si se sigue calentado la pantalla.
Saludos.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.