I2C и software serial

Попытка сделать GPS-устройство с экраном. Устройство GPS обменивается данными через последовательный порт (Adafruit Ultimate GPS Breakout), и я могу передавать данные GPS через USB на свой компьютер с помощью серийных примеров программного обеспечения библиотеки GPS Adafruit. Экран обменивается данными через I2C (модуль Sunfounder OLED-SSD1306), и я могу получить отображение с примерами Adafruit SSD1306. Однако я не могу заставить оба события происходить одновременно. Плата Adafruit Metro Mini 5v 16MHZ. GPS использует контакт 8 для TX и контакт 9 для RX. Дисплей использует A4 для SDA и A5 для SCL.

Если "Adafruit_GPS GPS(&mySerial);" не закомментирован, экран не будет ничего отображать. Если он прокомментирован, экран отображается просто отлично. Как заставить оба работать одновременно?

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET     -1
#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); 
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9);
Adafruit_GPS GPS(&mySerial);

void setup() {
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
    for(;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();
  display.drawPixel(10, 10, SSD1306_WHITE);
  display.display();
  delay(2000);
  testdrawchar();
}


void loop() {
}

void testdrawchar(void) {
  display.clearDisplay();

  display.setTextSize(1);  
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(0, 0);    
  display.cp437(true);  

  for(int16_t i=0; i<256; i++) {
    if(i == '\n') display.write(' ');
    else          display.write(i);
  }

  display.display();
  delay(2000);
}

, 👍1

Обсуждение

Я думаю, у вас закончилась память, @Juraj


1 ответ


1

Проблема действительно заключалась в нехватке памяти (как предположил Юрай). После того, как я нашел небольшие библиотеки, я смог заставить их отлично работать вместе.

,

Это неполный ответ. Какие библиотеки были выбраны?, @n1nja

Окончательный список библиотек: #include <AltSoftSerial.h> #include <TinyGPS.h> #include <SoftwareSerial.h> #include "SSD1306Ascii.h" #include "SSD1306AsciiAvrI2c.h" #include <Wire.h> Все библиотеки Adafruit были слишком большими, поэтому все они были заменены на более краткие и компактные библиотеки, которые соответствовали моим целям., @Rob