Qué tal gente, soy un nuevo en programar con Arduino y tengo un pequeño problema. Resulta qué mi OLED sólo funciona con SH1106 y tengo un código en SSD1306 y lamentablemente no me la quieren cambiar, alguien sabe cómo podría cambiar el siguiente código para una pantalla OLED SH1106.
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#define ANCHO_PANTALLA 128 // ancho pantalla OLED
#define ALTO_PANTALLA 64 // alto pantalla OLED
Adafruit_SSD1306 display(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, -1);
const int Trigger1 = 2; //Pin digital 2 para el Trigger1 del sensor
const int Echo1 = 3; //Pin digital 3 para el Echo1 del sensor
const int Trigger2 = 7; //Pin digital 7 para el Trigger2 del sensor
const int Echo2 = 8; //Pin digital 8 para el Echo2 del sensor
const int ledPIN_G = 6;
const int ledPIN_Y = 10;
const int ledPIN_R = 9;
const int pinBuzzer = 11;
long t1, t2; //tiempo que tarda en llegar el eco
long d1, d2; //distancia en centimetros
int media = 5;
int alta = 10;
int cont;
int muro;
void mostrar() {
Serial.print("Han pasado: ");
Serial.print(cont);
Serial.println(" personas.");
// Limpiar buffer
display.clearDisplay();
// Tamaño del texto
display.setTextSize(5);
// Color del texto
display.setTextColor(SSD1306_WHITE);
// Posición del texto
display.setCursor(54, 20);
// Escribir texto
display.println(cont);
// Enviar a pantalla
display.display();
if (cont < 5){
digitalWrite(ledPIN_G , HIGH);
digitalWrite(ledPIN_Y , LOW);
digitalWrite(ledPIN_R , LOW);
}
else if (cont >= media && cont < alta){
digitalWrite(ledPIN_G , LOW);
digitalWrite(ledPIN_Y , HIGH);
digitalWrite(ledPIN_R , LOW);
}
else {
digitalWrite(ledPIN_G , LOW);
digitalWrite(ledPIN_Y , LOW);
digitalWrite(ledPIN_R , HIGH);
}
delay(2000);
}
void setup() {
Serial.begin(9600);//iniciailzamos la comunicación
pinMode(Trigger1, OUTPUT); //pin como salida
pinMode(Echo1, INPUT); //pin como entrada
digitalWrite(Trigger1, LOW); //Inicializamos el pin con 0
digitalWrite(Trigger1, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger1, LOW);
t1 = pulseIn(Echo1, HIGH); //obtenemos el ancho del pulso1
pinMode(Trigger2, OUTPUT); //pin como salida
pinMode(Echo2, INPUT); //pin como entrada
digitalWrite(Trigger2, LOW); //Inicializamos el pin con 0
digitalWrite(Trigger2, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger2, LOW);
t2 = pulseIn(Echo2, HIGH); //obtenemos el ancho del pulso2
d1 = t1/59; //escalamos el tiempo a una distancia en cm
d2 = t2/59; //escalamos el tiempo a una distancia en cm
Serial.print("Distancia inicial muro: ");
muro = min(d1,d2);
Serial.println(muro);
cont = 0;
digitalWrite(ledPIN_G , HIGH);
digitalWrite(ledPIN_Y , LOW);
digitalWrite(ledPIN_R , LOW);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("No se encuentra la pantalla OLED");
}
display.clearDisplay();
display.display();
}
void loop()
{
digitalWrite(Trigger1, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger1, LOW);
t1 = pulseIn(Echo1, HIGH); //obtenemos el ancho del pulso
digitalWrite(Trigger2, HIGH);
delayMicroseconds(10); //Enviamos un pulso de 10us
digitalWrite(Trigger2, LOW);
t2 = pulseIn(Echo2, HIGH); //obtenemos el ancho del pulso
d1 = t1/59; //escalamos el tiempo a una distancia en cm
d2 = t2/59; //escalamos el tiempo a una distancia en cm
//Serial.println(d2);
if (d1 < muro-8){
Serial.println("Ha pasado alguien sensor 1.");
cont = cont + 1;
if (cont >= alta){
tone(pinBuzzer, 320, 200);
}
mostrar();
}
else if (d2 < muro-8){
Serial.println("Ha pasado alguien sensor 2.");
cont = cont - 1;
mostrar();
}
delay(100); //Hacemos una pausa de 100ms
}