Arduino Mega 2560, HC-SR04 Датчик расстояния и OLED дисплей 128x64

Zaur.

✩✩✩✩✩✩✩
15 Апр 2020
17
1
Всем привет! Я хочу вывести на дисплей расстояние с датчика. Но получилось так что он выводит какие-то кракозябры и буквы. И в скетче есть "АНИМАЦИЯ" включения.

Скетч:

C++:
#include <Ultrasonic.h> // Библеотека датчика расстояния
#include <OLED_I2C.h> // Библеотека OLED дисплея
Ultrasonic ultrasonic(12, 13); // Куда подключен датчик расстояния
extern uint8_t SmallFont[]; // Английский шрифт
OLED  myOLED(20, 21, 20); // Куда подключен дисплей
int distance = 0; // Изночально расстояние равно 0

void setup() {
  Serial.begin(9600);
  myOLED.begin();

  myOLED.setFont(SmallFont);
  myOLED.update();// Обновление изображения
  myOLED.print("10", CENTER, 50);
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.update();
  myOLED.print("1", CENTER, 20);
  myOLED.print("|", CENTER, 28);
  myOLED.print("9", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("2", CENTER, 20);
  myOLED.print("|", CENTER, 35);
  myOLED.print("8", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("|", CENTER, 40);
  myOLED.print("3", CENTER, 20);
  myOLED.print("7", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("-", 65, 45);
  myOLED.print("-", 55, 45);
  myOLED.print("4", CENTER, 20);
  myOLED.print("6", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("-", 70, 45);
  myOLED.print("-", 50, 45);
  myOLED.print("5", CENTER, 20);
  myOLED.print("5", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("-", 75, 45);
  myOLED.print("-", 45, 45);
  myOLED.print("6", CENTER, 20);
  myOLED.print("4", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("|", 80, 41);
  myOLED.print("|", 40, 41);
  myOLED.print("7", CENTER, 20);
  myOLED.print("3", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("|", 80, 33);
  myOLED.print("|", 40, 33);
  myOLED.print("8", CENTER, 20);
  myOLED.print("2", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("|", 80, 23);
  myOLED.print("|", 40, 23);
  myOLED.print("9", CENTER, 20);
  myOLED.print("1", CENTER, 50);
  delay(1000);
  myOLED.update();
  myOLED.clrScr();
  myOLED.print("START", CENTER, 0);
  myOLED.print("-", 74, 21);
  myOLED.print("-", 49, 21);
  delay(1000);
  myOLED.print("10", CENTER, 20);
  myOLED.print("0", CENTER, 50);
  myOLED.update();
  delay(1000);
  myOLED.clrScr();// Все стереть
  myOLED.update();
  myOLED.print("Starting", CENTER, 0);
  myOLED.update();
  delay(7000);
}

void loop() {
  distance = ultrasonic.read();//Читаем датчик

  myOLED.clrScr();// Все стереть
  myOLED.setFont(SmallFont);// Включить английский шрифт
  myOLED.update();
  myOLED.print(distance, CENTER, 0);
  myOLED.update();

  Serial.print("Distance in CM: ");
  Serial.println(distance);
  delay(500);
}
 
Изменено: