OLED не обновляет дисплей

Я пытаюсь подключить устройство GPS (GY-GPS6MV2) и OLED-экран, как показано на схеме ниже (зеленый разъем — GPS; VCC, RX, TX, GND слева направо ):

Вот код, который я придумал:

#include <Wire.h>
#include <Adafruit_SH1106.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);
static const int RXPin = 5, TXPin = 3;
static const uint32_t GPSBaud = 9600;
float vkph;
float vmps;

TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);

void setup(){
  Serial.begin(9600);
  ss.begin(GPSBaud);
  display.begin(SH1106_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay();
}

void loop(){
  while (ss.available() > 0){
    gps.encode(ss.read());
    vkph = gps.speed.kmph();
    vmps = gps.speed.mps();
    if (gps.location.isUpdated()){
      Serial.print("Position: "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" : "); 
      Serial.println(gps.location.lng(), 6);
      Serial.print("Speed: ");
      Serial.print(vmps); 
      Serial.print(" m/s");
      Serial.print(", ");
      Serial.print(vkph);
      Serial.println( " km/hr"); 
      
      display.clearDisplay();
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello"); // Изменяем это на display.println(vmps);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.println("World"); // Изменяем это на display.println(vkph);
      display.display();
      delay(1000); 

    }
  }
}

GPS выводит на последовательный монитор нормально, и на экране отображается "Hello \n World" как и ожидалось. Но когда я вношу изменения, указанные в комментариях, к отображаемой части кода, на дисплее просто отображается заставка, мигающая при обновлении GPS.

Как заставить дисплей отображать скорость в м/с и км/ч?

, 👍0


1 ответ


-1

Возможно, вам нужно добавить delay() в свой код, я не уверен.

display.clearDisplay();
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello"); // Changing this to display.println(vmps);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.println("World"); // Changing this to display.println(vkph);
      display.display();
      delay(1000);
,

Почему и где?, @Jim421616

Потому что у OLED нет времени, чтобы продолжать показывать., @Memba

Это ответ или вопрос? Также, пожалуйста, уточните подробнее, чтобы ответ был действительно полезным, @chrisl

Я пробовал это еще до того, как вы опубликовали редактирование. Та же проблема, только теперь для мигания заставки требуется 1000 миллисекунд., @Jim421616

Вы также добавили задержку после кода отображения GPS?, @chrisl