Pantalla OLED no muestra imagen

Hola, me pueden ayudar a corregir este código, la pantalla no da ningún tipo de imagen

#include <Adafruit_Fingerprint.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#include <Keypad.h>

#define FINGERPRINT_Rx 12  // Cambiar al pin conectado al RX del sensor de huellas dactilares
#define FINGERPRINT_Tx 13  // Cambiar al pin conectado al TX del sensor de huellas dactilares
#define BUZZER_PIN 11 // Cambiar al pin conectado al buzzer
#define SERVO_PIN 10 // Cambiar al pin conectado al servo
#define KEY_NUM 6
#define KEY_ROWS 4
#define KEY_COLS 4
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Servo myservo;
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial);

const byte ROWS = 4; // Definimos el número de filas del keypad
const byte COLS = 4; // Definimos el número de columnas del keypad

// Definimos el array que representa las teclas en el keypad
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Conectar a los pines ROW0, ROW1, ROW2 y ROW3 del keypad
byte colPins[COLS] = {5, 4, 3, 2}; // Conectar a los pines COL0, COL1, COL2 y COL3 del keypad

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

bool fingerAuthenticated = false;

const uint8_t fingerID = 1; // ID de la huella dactilar principal
const uint8_t maxFingerID = 20; // Número máximo de huellas dactilares

void setup() {
  Serial.begin(9600);
  finger.begin(Serial);
  if (finger.verifyPassword()) {
    Serial.println("Sensor de huella dactilar OK!");
  } else {
    Serial.println("Error en el sensor de huella dactilar, revisa la conexión");
    while (1);
  }
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  display.println("Coloque su dedo principal");
  display.display();
  myservo.attach(SERVO_PIN);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  char key = keypad.getKey();
  if (key == '*') {
    if (fingerAuthenticated) {
      myservo.write(0); // Gira el servo a su posición original
      delay(1000);
      fingerAuthenticated = false;
      display.clearDisplay();
      display.setCursor(0,0);
      display.println("Coloque su dedo");
      display.display();
    } else {
      display.clearDisplay();
      display.setCursor(0,0);
      display.println("Confirmar");
      display.display();
      fingerAuthenticated = fingerprintVerification();
    }
  } else if (key == '#') {
    if (fingerAuthenticated) {
      addFinger();
    }
  }

  if (fingerAuthenticated) {
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Abriendo!!");
    display.display();
    myservo.write(90); // Gira el servo a 90 grados
    delay(4000);
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Abierto");
    display.display();
    delay(2000);
    myservo.write(0); // Gira el servo a su posición original
    delay(1000);
    fingerAuthenticated = false;
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Coloque su dedo");
    display.display();
  }
}

bool fingerprintVerification() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK) {
    return false;
  }

  p = finger.image2Tz();
  if (p != FINGERPRINT_OK) {
    return false;
  }

  p = finger.fingerFastSearch();
  if (p != fingerID) {
    digitalWrite(BUZZER_PIN, HIGH);
    delay(5000);
    digitalWrite(BUZZER_PIN, LOW);
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Acceso denegado");
    display.display();
    delay(2000);
    return false;
  }
  
  return true;
}

void addFinger() {
  display.clearDisplay();
  display.setCursor(0,0);
  display.println("Coloque su dedo 3 veces");
  display.display();
  
  uint8_t id;
  bool success = false;
  
  for (int i = 0; i < 3; i++) {
    uint8_t p = finger.getImage();
    if (p == FINGERPRINT_OK) {
      p = finger.image2Tz(1);
      if (p == FINGERPRINT_OK) {
        display.clearDisplay();
        display.setCursor(0,0);
        display.println("Leído correctamente");
        display.display();
        delay(1000);
        success = true;
      } else {
        display.clearDisplay();
        display.setCursor(0,0);
        display.println("Error al leer");
        display.display();
        delay(1000);
        success = false;
        break;
      }
    } else {
      display.clearDisplay();
      display.setCursor(0,0);
      display.println("Por favor, intente de nuevo");
      display.display();
      delay(1000);
      success = false;
      break;
    }
  }
  
  if (success) {
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Dedo agregado");
    display.display();
    delay(1000);
  } else {
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Fallo al agregar dedo");
    display.display();
    delay(1000);
  }
}

Porque no tomas un ejemplo de la librería

#include <Adafruit_SSD1306.h>

y compruebas si se ve el demo por ejemplo.
Luego vuelve a tu código y revisa posibles diferencias.

Mas allá del primer consejo:

  1. Revisa
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Si se corresponden con tu pantalla

  1. Corre I2CScanner y chequea que la dirección de la pantalla es la que has puesto o sea 0x3C

¿Qué pantalla estás usando? ¿Cuál microcontrolador (UNO, Nano, Mega, etc.)?
Agrega una foto (de ambos lado de la placa) y/o un link a una igual a la tuya.
Agrega un esquema con las conexiones de todo tu hardware.
Y tal y como te sugiere @Surbyte, prueba con el ejemplo de la librería para verificar que funciona correctamente.

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