Курсор в меню
- Войдите на сайт для отправки комментариев
Втр, 12/10/2021 - 22:04
Доброго времени суток.
Смена библиотеки с OLED_I2C на Adafruit_SSD1306, привела меня в тупик.
не могу привязать курсор для менюшки.
Пожалуйста прошу всех кто может, помогите.
Рабочий вариант с OLED_I2C
#include <OLED_I2C.h>
const char string_1[] PROGMEM = "setting1";
const char string_2[] PROGMEM = "setting2";
const char string_3[] PROGMEM = "setting3";
const char string_4[] PROGMEM = "setting4";
const char * menu_table[] = {string_1, string_2, string_3, string_4};
OLED myOLED(SDA, SCL, 1);
extern uint8_t SmallFont[];
//+++++++++++++++++++++++++++++++++++++++++++
#define CLK 5
#define DT 6
#define SW 4
#include "GyverEncoder.h"
#define PRECISE_ALGORITHM
Encoder enc1(CLK, DT, SW, TYPE1);
//+++++++++++++++++++++++++++++++++++++++++++
byte menuPos = 1;
byte mode ;
void setup() {
//Serial.begin (9600);
myOLED.begin();
myOLED.clrScr();
myOLED.setFont(SmallFont);
}
void loop() {
enc1.tick();
updatedisplay();
if (enc1.isClick())Menu();
}
void printMenu (byte invertLine) {
byte i;
myOLED.clrScr();
for (i = 0; i < 4; i++ )
{ if (i == (invertLine - 1)) myOLED.invertText(true);
myOLED.print((const __FlashStringHelper *) menu_table[i] , 2, i * 10);
if (i == (invertLine - 1)) myOLED.invertText(false);
}
myOLED.update();
}
void Menu() {
while(1){
enc1.tick();
//***************************** Выбор позиции в меню ***********************
if (enc1.isRight()){menuPos = menuPos + 1;}
if (menuPos > 4){menuPos = 1;}
if (enc1.isLeft()){menuPos = menuPos - 1;}
if (menuPos < 1){menuPos = 4;}
printMenu(menuPos);
if (enc1.isClick()){
switch (menuPos) {
case 1: setting1(); break;
case 2: setting2(); break;
case 3: setting3(); break;
case 4: setting4(); return;
}
}
}
}
void setting1() {
}
void setting2() {
}
void setting3() {
}
void setting4() {
}
void updatedisplay() {
myOLED.clrScr();
myOLED.setFont(SmallFont);
myOLED.print("OLED_Menu", 35, 25);
myOLED.update();
}
Не рабочий вариант с Adafruit_SSD1306
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const char string_1[] PROGMEM = "setting1";
const char string_2[] PROGMEM = "setting2";
const char string_3[] PROGMEM = "setting3";
const char string_4[] PROGMEM = "setting4";
const char * menu_table[] = {string_1, string_2, string_3, string_4};
//==============================================================
#define CLK 5
#define DT 6
#define SW 4
#include "GyverEncoder.h"
#define PRECISE_ALGORITHM
Encoder enc1(CLK, DT, SW, TYPE1);
//+++++++++++++++++++++++++++++++++++++++++++
byte menuPos = 1;
byte mode ;
void setup() {
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for(;;);
}
}
void loop() {
enc1.tick();
updatedisplay();
if (enc1.isClick())Menu();
}
void printMenu (byte * menu_table[]) {
byte i;
display.clearDisplay();
for (i = 0; i < 5; i++ )
// { if (i == (invertLine - 1)) myOLED.invertText(true);
// myOLED.print((const __FlashStringHelper *) menu_table[i] , 2, i * 10);
// if (i == (invertLine - 1)) myOLED.invertText(false);
// }
display.display();
}
void Menu() {
while(1){
enc1.tick();
//***************************** Выбор позиции в меню ***********************
if (enc1.isRight()){menuPos = menuPos + 1;}
if (menuPos > 4){menuPos = 1;}
if (enc1.isLeft()){menuPos = menuPos - 1;}
if (menuPos < 1){menuPos = 4;}
printMenu(menuPos);
if (enc1.isClick()){
switch (menuPos) {
case 1: setting1(); break;
case 2: setting2(); break;
case 3: setting3(); break;
case 4: setting4(); return;
}
}
}
}
void setting1() {
}
void setting2() {
}
void setting3() {
}
void setting4() {
}
void updatedisplay() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(35, 25);
display.print("OLED_Menu");
display.display();
}
У меня дежавю? А вчера вы не об этом спрашивали?
Что нового вы хотите услышать, если ничего в коде со вчерашнего дня не изменилось?
Вы когдато мне в этом помогли http://arduino.ru/forum/programmirovanie/pomogite-zamenit-biblioteku-oledi2c-na-u8glib#comment-344573
Ну умоляю.
компилятор ругается на строки:
компилятор ругается на строки:
матом ругается? или подробно ошибку описывает?
компилятор ругается на строки:
матом ругается? или подробно ошибку описывает?
Если я правильно понимаю, то типа под класом "Adafruit_SSD1306" нет 'invertText'
Есть только "display.invertDisplay(true);"
Да мне если чесно, курсор можно любой ">" или даже рамка вокруг строки!
Только помогите, прошу Вас.
Детский сад. Инверсия это обмен цветами фона и текста.
Там где true меняем цвет фона на белый, цвет текста на черный.
Там где false наоборот...
Там где true меняем цвет фона на белый, цвет текста на черный.
Там где false наоборот...
С этой библиотекой не работает, я уже пробовал!
Igoreck у меня хрустального шара нет и я не вижу что вы там пробовали. Я про то что раз метода invertText нет - надо его написать самому !!!
Igoreck у меня хрустального шара нет и я не вижу что вы там пробовали. Я про то что раз метода invertText нет - надо его написать самому !!!
Да мне этот метод "invertText" и не нужен. Мне хотя бы курсор в виде ">" или рамки вокруг строки, короче любой курсор который взаимодействовал бы со списком в меню. Подскажите как мне, допустим этот в виде ">", привязать в списке меню?
Вторую неделю мучаю. Помогите, пожалуйста.
Я на идиотском языке не умею излагать !!!
Я на идиотском языке не умею излагать !!!
Да вы и, по человечески не пробовали!
Всем спасибо, тема закрыта.