Курсор в меню

Igoreck
Offline
Зарегистрирован: 01.03.2017

Доброго времени суток.

Смена библиотеки с 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(); 
}

b707
Offline
Зарегистрирован: 26.05.2017

У меня дежавю? А вчера вы не об этом спрашивали?
Что нового вы хотите услышать, если ничего в коде со вчерашнего дня не изменилось?

Igoreck
Offline
Зарегистрирован: 01.03.2017

b707 пишет:
У меня дежавю? А вчера вы не об этом спрашивали? Что нового вы хотите услышать, если ничего в коде со вчерашнего дня не изменилось?

Вы когдато мне в этом помогли http://arduino.ru/forum/programmirovanie/pomogite-zamenit-biblioteku-oledi2c-na-u8glib#comment-344573

Ну умоляю. 

Igoreck
Offline
Зарегистрирован: 01.03.2017

компилятор ругается на строки: 

{ if (i == (invertLine - 1)) display.invertText(true);
    display.print((const __FlashStringHelper *) menu_table[i] , 2, i * 10);
    if (i == (invertLine - 1)) display.invertText(false);
  }
b707
Offline
Зарегистрирован: 26.05.2017

Igoreck пишет:

компилятор ругается на строки:

матом ругается? или подробно ошибку описывает?

Igoreck
Offline
Зарегистрирован: 01.03.2017

b707 пишет:

Igoreck пишет:

компилятор ругается на строки:

матом ругается? или подробно ошибку описывает?

exit status 1
'class Adafruit_SSD1306' has no member named 'invertText'
Igoreck
Offline
Зарегистрирован: 01.03.2017

Если я правильно понимаю, то типа под класом "Adafruit_SSD1306" нет  'invertText'

Есть только "display.invertDisplay(true);"

Да мне если чесно, курсор можно любой ">" или даже рамка вокруг строки!

Только помогите, прошу Вас.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Детский сад. Инверсия это обмен цветами фона и текста.
Там где true меняем цвет фона на белый, цвет текста на черный.
Там где false наоборот...

Igoreck
Offline
Зарегистрирован: 01.03.2017

Komandir пишет:
Детский сад. Инверсия это обмен цветами фона и текста.
Там где true меняем цвет фона на белый, цвет текста на черный.
Там где false наоборот...

С этой библиотекой не работает, я уже пробовал!

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Igoreck у меня хрустального шара нет и я не вижу что вы там пробовали. Я про то что раз метода invertText нет - надо его написать самому !!!

Igoreck
Offline
Зарегистрирован: 01.03.2017

Komandir пишет:

Igoreck у меня хрустального шара нет и я не вижу что вы там пробовали. Я про то что раз метода invertText нет - надо его написать самому !!!

Да мне этот метод "invertText" и не нужен. Мне хотя бы курсор в виде ">" или рамки вокруг строки, короче любой курсор который взаимодействовал бы со списком в меню. Подскажите как мне, допустим этот в виде ">", привязать в списке меню?

Вторую неделю мучаю. Помогите, пожалуйста.

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Я на идиотском языке не умею излагать !!!

Igoreck
Offline
Зарегистрирован: 01.03.2017

Komandir пишет:

Я на идиотском языке не умею излагать !!!

Да вы и, по человечески не пробовали! 

Igoreck
Offline
Зарегистрирован: 01.03.2017

Всем спасибо, тема закрыта.