qMenuSystem Oled I2C не может заставить его работать
Я пытаюсь заставить qMenuSystem работать с моим монохромным OLED-дисплеем I2C, но безуспешно. Подводя итог, вот что с ним: - qMenuSystem использует библиотеку под названием: DigoleSerial, но в ней установлено соединение SPI. - сама библиотека может работать с I2C, но я получаю странные ошибки вроде этой:
Arduino: 1.8.9 (Mac OS X), плата: «Arduino/Genuino Uno» TestMenu: 25:42: ошибка: ожидаемое основное выражение перед '_disp' DigoleSerialDisp mydisp=DigoleSerialDisp _disp(&Wire,'\x3C'); ^ статус выхода 1 ожидаемое основное выражение перед '_disp'
Вот видео того, что я пытаюсь отобразить:
https://www.youtube.com/watch?v=rjON_enuOGs (я уже попробовал то, что было предложено в комментариях)
Вот код на данный момент:
Arduino: 1.8.9 (Mac OS X), Board: "Arduino/Genuino Uno"
TestMenu:25:42: error: expected primary-expression before '_disp'
DigoleSerialDisp mydisp=DigoleSerialDisp _disp(&Wire,'\x3C');
^
exit status 1
expected primary-expression before '_disp'
и программная часть:
#define _Digole_Serial_I2C_
#include <DigoleSerial.h>
#include <Wire.h>
#include <qMenuDisplay.h>
#include <qMenuSystem.h>
#include "TestMenu.h"
//DigoleSerialDisp mydisp=DigoleSerialDisp(8,9,10);
//DigoleSerialDisp _disp(&Wire,'\x3C');
DigoleSerialDisp mydisp=DigoleSerialDisp _disp(&Wire,'\x3C');
qMenuSystem menu=qMenuSystem(mydisp);
void setup()
{
menu.InitMenu(mnuRoot,cntRoot,1);
Serial.begin(9600);
}
void loop()
{
int keycode=0;
int clickedItem=0;
if (Serial.available()>0)
{
switch(Serial.read())
{
case 97:
menu.ProcessMenu(ACTION_DOWN);
break;
case 113:
menu.ProcessMenu(ACTION_UP);
break;
case 115:
clickedItem=menu.ProcessMenu(ACTION_SELECT);
break;
}
}
if (clickedItem>0)
{
// Logic for Root menu
if (menu.CurrentMenu==mnuRoot)
switch (clickedItem)
{
case 1:
menu.InitMenu(mnuSubmenu1,cntSubmenu1,1);
break;
case 2:
menu.InitMenu(mnuSubmenu2,cntSubmenu2,1);
break;
case 3:
menu.InitMenu(mnuSubmenu3,cntSubmenu3,1);
break;
case 4:
menu.MessageBox("Some message!");
break;
}
// Logic for Submenu 1
else if (menu.CurrentMenu==mnuSubmenu1)
switch (clickedItem)
{
case 1:
case 2:
case 3:
case 4:
case 5:
menu.MessageBox("Item clicked");
break;
case 6:
menu.InitMenu(mnuRoot,cntRoot,1);
break;
}
// Logic for Submenu 2
else if (menu.CurrentMenu==mnuSubmenu2)
switch (clickedItem)
{
case 1:
menu.MessageBox("On");
break;
case 2:
menu.MessageBox("Off");
break;
case 3:
menu.InitMenu(mnuRoot,cntRoot,2);
break;
}
// Logic for Submenu 3
else if (menu.CurrentMenu==mnuSubmenu3)
switch (clickedItem)
{
case 1:
menu.MessageBox("Enabled");
break;
case 2:
menu.MessageBox("Disabled");
break;
case 3:
menu.InitMenu(mnuRoot,cntRoot,3);
break;
}
}
}
Я новичок и понятия не имею, как заставить его работать. Может ли кто-нибудь помочь мне понять, что не так?
Спасибо, что уделили время чтению всего этого.
@h4x7o0r, 👍0
1 ответ
Лучший ответ:
Как указывает компилятор, строка
DigoleSerialDisp mydisp=DigoleSerialDisp _disp(&Wire,'\x3C');
не работает.
Эта часть:
DigoleSerialDisp _disp(&Wire,'\x3C')
объявляет и создает объект с именем _disp
класса DigoleSerialDisp
.
Вы пытаетесь присвоить это другой переменной, mydisp
— это недопустимо в C++ — вы можете присвоить другую переменную, но вам нужно сначала объявить и сконструировать ее, а не в присваивании . Также нет необходимости создавать его, называть его _disp
и затем назначать его другой переменной.
Просто сделайте следующее:
DigoleSerialDisp mydisp(&Wire,'\x3C');
Возможно, вы захотите переписать
qMenuSystem menu=qMenuSystem(mydisp);
как
qMenuSystem menu(mydisp);
тоже.
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- 16/2 arduino I2C ЖК-дисплей не загорается?
- Варианты протокола для обмена данными между Arduino и ESP8266
- ЖКИ питается больше необходимого тока
- ЖК-дисплей с I2C не распознается esp32
- Нет функции сопоставления для вызова 'DS3231 (const uint8_t &, const uint8_t &)
- Отправка буквы за буквой на ЖК-дисплей, однако дисплей знает полную строку?
Большое спасибо за ваше объяснение и за вашу помощь. Теперь компилируется без ошибок. Все хорошо, но на дисплее ничего не видно. Мой OLED работает хорошо, когда я использую библиотеку Adafruit SSD1306 с библиотекой Adafruit GFX, но я не знаю об этой библиотеке DigoleSerial. Вот мой OLED (вроде, он выглядит так же): https://bit.ly/2kgZa6p. Он использует адрес 0x3C, когда я использую библиотеки Adafruit. Это что-то, чего мне еще не хватает? Еще раз спасибо за быструю помощь., @h4x7o0r
Я рад, что это было полезно. Если у вас есть другой вопрос, лучше всего принять его как ответ на вопрос, который вы задали, и задать другой вопрос отдельно. Это поможет другим людям с похожими проблемами найти ответ на свою проблему, а другим людям, которые могут помочь вам с вашей следующей проблемой, найти вопрос и предложить помощь (они не найдут его здесь, в комментариях)., @romkey
Еще раз спасибо. Я новичок здесь, поэтому я действительно не знаю поток, но я понимаю. Задам новый вопрос в новой теме., @h4x7o0r
У тебя отлично получается :) Спасибо!, @romkey