Problema con TinyGPS

Tengo un modulo GPS que esta comprobado y funciona perfectamente.
Si lo pruebo con un ejemplo de la libreria TunyGPSPlus responde al instante y todo es correcto.
El problema viene cuando en el programa ejecuto la inicializacion de una pantalla Oled, En cuanto incluyo en el programa la inicializacion de la Oled ya no recibo datos.
Os paso el codigo que no funciona a ver que podeis decirme.
Solo teneis que quitar las lineas que corresponden al display en el setup y ya funciona. No entiendo donde puede estar el problema.
Supongo que tendra algo que ver con el I2c de la pantalla...pero no consigo que funcione haga lo que haga.

#include <splash.h>
#include <SwitecX25.h>          // Libreria para el control del motor paso a paso
#include <SPI.h>                // Libreria para el uso del i2c de comunicacion del LCD
#include <Wire.h>               // Libreria para el uso del i2c de comunicacion con el LCD
#include <Adafruit_GFX.h>       // Libreria para el uso del LCD OLED
#include <Adafruit_SSD1306.h>   // Libreria para el uso del LCD OLED  
#include <TinyGPS++.h>          // Libreria para el uso del GPS
#include "SoftwareSerial.h"     // LIbreria para el uso de un puerto serie por software para comunicar con el GPS
#include <EEPROM.h>             // Libreria para el uso de la memoria EEPROM del arduino, pata guardar los datos de los parciales
#include <GFButton.h>           // Libreria para el uso del boton de cambio de parcial y puesta a cero


// ***** DEFINICIONES (valores fijos no cambiar) *******

#define hallPin  2              // Pin donde esta conectado el sensor hall
#define pulsadorPin 11          // Pin donde esta conectado en pulsador parcial/total

//******************************************************
//***************  IMPORTANTE **************************
//*** CAMBIAR SI SE CAMBIA LA MEDIDA DEL NEUMATICO *****
//******************************************************

// Datos para una rueda 90/90/18
const float desarollo_rueda = 1.945;   //En mm, hace falta para calcular la velocidad 

// Resto de declaraciones y configuracion

// Declaracion para un display SSD1306 conectado a I2C (SDA, SCL pins)
// Los pins para I2C estan definidos en la libreria Wire-library. 
// En un arduino NANO:       A4(SDA), A5(SCL)
// es donde conectamos el OLED Pines A4 y A5

#define OLED_RESET     4        // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C     // <Direccion de la pantalla OLED; 0x3D para 128x64, 0x3C para 128x32
#define SCREEN_WIDTH 128        // OLED display ancho, en pixels
#define SCREEN_HEIGHT 32        // OLED display alto, en pixels

// Pines para la conexion serie del GPS

static const int RXPin = 4, TXPin = 3;

// *** VARIABLES QUE USA EL PROGRAMA *******

int opcion_pulsador = 3;       //  opcion seleccionada con el pulsador "pulso corto"
boolean bit_GPS = LOW;         // bit bandera de deteccion de que se ha conectado un modulo GPS y esta en funcionamiento
volatile float parcial_1;  // variable con el valor del parcial 1 recorrido
volatile float parcial_2;
volatile float metros;        // variable general
volatile int cuenta_grabacion = 5;     // variable donde se ajusta cuantos cientos de metros srecorridos para guardar en memoria
double velocidad_GPS;          // variable con el valor de velocidad medido por el modulo GPS 
static const uint32_t GPSBaud = 9600;  // velocidad de comunicacion con el GPS
unsigned long start;

// CREA INSTANCIA AL OBJETO BOTON, PARA SU USO


GFButton button = GFButton(pulsadorPin);

// CREA INSTANCIAS A LA PANTALLA OLED, AL GPS Y AL PUERTO SERIE POR SOFTWARE

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

// Objeto GPS se crea por si se va a usar

TinyGPSPlus gps;

// Crea un objeto Puerto Serie por software en los pines RXPin y TXPin

SoftwareSerial ss(RXPin, TXPin);


//**********************************************
//*********** SETUP DE INICIO DEL ARDUINO, SE EJECUTA UNA VEZ AL CONECTARLE ALIMENTACION ****


void setup()
{
    //Inicializacion del sistema

    
    pinMode(hallPin, INPUT_PULLUP);       // prepara el pin de entrada del hall
    pinMode(pulsadorPin, INPUT_PULLUP);   // prepara el pin de entrada del boton

     // Prepara el display

    display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);

    Serial.begin(115200);
    ss.begin(GPSBaud);    //inicializa el puerto serie de comunicacion co
    
    display.dim(true);// poco brillo
    //display.dim(false);//mucho brillo

    display.setTextColor(SSD1306_WHITE); // Texto en blanco
    display.setTextSize(4);              // Escala del texto 4X
 }

void loop()
{
    if (gps.speed.isValid())
    {
        velocidad_GPS = gps.speed.kmph();
        Serial.println(velocidad_GPS,2);
    }
   

    smartDelay(1000);

    if (millis() > 5000 && gps.charsProcessed() < 10)
        Serial.println(F("No GPS data received: check wiring"));
}




// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
    unsigned long start = millis();
    do
    {
        while (ss.available())
            gps.encode(ss.read());
    } while (millis() - start < ms);
}

Muchas gracias por vuestra ayuda.

Disculpadme, despues de dos dias, y justo despues de decidirme a escribir el post., encontre el problema. Como use dos ejemplos de libreria, para el OLED y para el GPS, tenia el pin4 sin usar pero realmente compartido entre ambas cosas.
Ya funciona, solo tuve que usar los pines correctos.

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