Как отображать текст на OLED?
Я пытаюсь распечатать информацию, полученную от другого ESP32 трансивером CAN, на OLED. Шина CAN работает отлично, так как уже получено «HELLO WORLD». Но я не могу распечатать полученное «HELLO WORLD» на OLED (также работает OLED). Код показан ниже,
#include <CAN.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея в пикселях
#define SCREEN_HEIGHT 32 // Высота OLED-дисплея в пикселях
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
Serial.begin(115200);
while (!Serial);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
Serial.println("CAN Receiver");
CAN.setPins(16, 17);
// запускаем CAN-шину на скорости 500 кбит/с
if (!CAN.begin(500E3)) {
Serial.println("Starting CAN failed!");
while (1);
}
}
void loop() {
// пытаемся разобрать пакет
int packetSize = CAN.parsePacket();
if (packetSize) {
// получил пакет
Serial.print("Received ");
if (CAN.packetExtended()) {
Serial.print("extended ");
}
if (CAN.packetRtr()) {
// Запрос удаленной передачи, пакет не содержит данных
Serial.print("RTR ");
}
Serial.print("packet with id 0x");
Serial.print(CAN.packetId(), HEX);
if (CAN.packetRtr()) {
Serial.print(" and requested length ");
Serial.println(CAN.packetDlc());
} else {
Serial.print(" and length ");
Serial.println(packetSize);
// только печатать данные пакета для не-RTR пакетов
while (CAN.available()) {
Serial.print((char)CAN.read());
}
Serial.println();
}
Serial.println();
}
delay(5000);
display.clearDisplay();
display.print((char)CAN.read());
display.display();
}
@noah, 👍1
Обсуждение1 ответ
Просто догадываюсь, но мне кажется, что вы читаете сообщение CAN
и печатаете его посимвольно в консоль Serial, но не сохраняете эти символы в буфере, поскольку получаете их из CAN.read()
.
Поэтому, когда вы затем попытаетесь display.print((char)CAN.read());
в этот момент больше не будет доступных символов для CAN.read()
для чтения, чтобы display.print()
ничего не печатал.
Итак, вам нужно прочитать символы в буфер, чтобы сохранить их после прочтения и использовать текстовую строку для других целей.
- Как отобразить информацию о шине CAN на веб-сервере EPS32?
- Контакты RX и TX на esp32
- Какие правильные контакты для TWAI (CAN) на ESP32?
- Простой ESP32 MCP2515 МОЖЕТ кодировать VP230
- OLED 'SH1106_WHITE' was not declared in this scope
- Как прокручивать текст на OLED-дисплее, используя только библиотеку SSD1306Wire?
- Преобразование строки в const unsigned char
- Управление потоком между устройством ESP32 и RS323
Чтобы отобразить код в вопросе, отредактируйте свой вопрос, выделите весь сегмент кода и нажмите кнопку "{}". Потенциальным участникам будет намного легче прочитать его и ответить на ваш вопрос., @JRobert
пожалуйста, отформатируйте код... используйте кнопку
{}
или поставьте`
до и после кода, @jsotolaПросим ли мы Ноя исправить форматирование своего сообщения, чтобы он научился публиковать вопрос, содержащий отформатированный код, а не редактировать свой вопрос и делать форматирование за него?, @Duncan C
@DuncanC - noah - «Новый участник», поэтому возможно, что один из наших пользователей пытался быть милым и помочь им. Stack Exchange поощряет редактирование и улучшение вопросов и ответов, и за их редактирование присуждается 3 уровня «значков». Пользователи с репутацией менее 1000 получают 2 репутации за редактирование вопроса. Я знаю одного пользователя Arduino SE, который имеет более 500 репутаций и никогда не задавал и не отвечал ни на один вопрос. Я согласен с вами насчет преподавания, но я также должен быть «хорошим», и давайте не будем забывать о тех трудолюбивых волонтерах, которые редактируют вопросы, чтобы сделать наш сайт лучше., @VE7JRO
@ VE7JRO, у меня возник соблазн применить редактирование самостоятельно, но я этого не сделал, потому что мне было интересно, являются ли предложения «пожалуйста, отформатируйте свой вопрос кодом» моментами «научите пользователя публиковать». Я новичок на сайте Arduino, но у меня более 100 тыс. представителей на Stack Overflow, поэтому я хорошо знаком с тем, как работает Stack Exchange., @Duncan C
Просто предположил, но мне кажется, что вы читаете сообщение CAN и печатаете его символ за символом в консоль Serial, но вы не сохраняете эти символы в буфере, поскольку вы получаете их из
CAN.read()
. Поэтому, когда вы затем пытаетесьdisplay.print((char)CAN.read());
в этот момент больше нет доступных символов дляCAN.read()
для чтения, поэтому ничего не печатаетсядисплей.печать()
. Хотя я только предполагаю., @Richard Chambers@RichardChambers Спасибо, приятель! ты спасаешь мою жизнь., @noah
@RichardChambers Попробуйте вставить свой ответ в качестве ответа ниже, чтобы Ной мог выбрать его как правильный ответ. Для тех сладких, сладких интернет-точек;) (и потому, что тогда этот вопрос не будет отображаться в списке «без ответа»), @Ken Van Hoeylandt
@KenVanHoeylandt Спасибо за заметку. Я просто не подумал об этом., @Richard Chambers