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"
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 </>
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!.
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.