Вывод значения int вместе с масивом списка char

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

Добрый день. Прошу сильно не пинать, новичок я.

Подскажите как правильно выводить и менять значения int-ов на против срок списков "setting1", "setting2", "setting3", "setting4". И возможно ли это вообще?

Планируется оформить меню, при заходе которого отображать не только строки массива списка, но и значения каждой функции. А когда делаешь выбор, то мигающий курсор переходит на значения переменной, и соответственно её меняешь. Короче говоря - меню без-захода в под меню.

 

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
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};
const int buttonPin = 4;
int buttonState = 0;
long val;
long val_old = 0;
volatile int enc;

byte menuPos = 1;
void Menu() {
  while (1) {
    buttonState = !digitalRead(buttonPin);
    val = enc;
    //***************************** Выбор позиции в меню ***********************
    if (val > val_old) {
      menuPos = menuPos + 1;
      val_old = val;
    }
    if (menuPos > 4) {
      menuPos = 1;
    }
    if (val < val_old) {
      menuPos = menuPos - 1;
      val_old = val;
    }
    if (menuPos < 1) {
      menuPos = 4;
    }
    printMenu(menuPos);
    if (buttonState == HIGH) {
      switch  (menuPos) {
        case 1: setting1(); break;
        case 2: setting2(); break;
        case 3: setting3(); break;
        case 4: setting4(); return;
      }
    }
  }
}
void printMenu (byte invertLine) {
  byte i;
  display.clearDisplay();
  display.setTextSize(1);
  for (i = 0; i < 4; i++ ) {
    display.setCursor(4, i * 10);
    if (i == (invertLine - 1))display.print(">");
    else display.print(" ");
    display.print((const __FlashStringHelper *) menu_table[i] );
  }
  display.display();
}
ISR(PCINT2_vect) {
  static char EncPrev = 0;
  static char EncPrevPrev = 0;
  char EncCur = 0;
  if (!(PIND & (1 << PD5))) {
    EncCur  = 1;
  }
  if (!(PIND & (1 << PD6))) {
    EncCur |= 2;
  }
  if (EncCur != EncPrev)
  {
    if (EncPrev == 3 && EncCur != EncPrevPrev )
    {
      if (EncCur == 2)
        enc++;
      else
        enc--;
    }
    EncPrevPrev = EncPrev;
    EncPrev = EncCur;
  }
}
void setup() {
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for (;;);
  }
  display.setTextColor(SSD1306_WHITE);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
  pinMode(6, INPUT_PULLUP);
  PCIFR = PCIFR;
  PCICR = 1 << PCIE2;
  PCMSK2 = 1 << PCINT21 | 1 << PCINT22;
}
void loop() {
  Menu();
}
void setting1() {
  while (1) {
    buttonState = !digitalRead(buttonPin);
    display.clearDisplay();
    display.setTextSize(1);
    display.setCursor(20, 5);
    display.print(F("SETTING"));
    display.setCursor(100, 5);
    display.println(enc);
    display.display();
    if (buttonState == HIGH) return;
  }
}
void setting2() {
}
void setting3() {
}
void setting4() {
}

 

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

и где в этом коде хотя бы попытка выводить какие-то значения напротив меток "setting" ? - писать это за вас никто не будет

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

b707 пишет:

и где в этом коде хотя бы попытка выводить какие-то значения напротив меток "setting" ? - писать это за вас никто не будет

Дык я напишу, Вы только растокуйте чайнику. Это создавать структуру или другим массивом?

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

Igoreck пишет:

Дык я напишу, Вы только растокуйте чайнику. Это создавать структуру или другим массивом?

вы на этом форуме шестой год (дольше меня :) - и все "чайник"?  Может пора уже бросить ардуину и заняться чем-то, что у вас получается лучше? или такого просто нет?

Это я к тому, что не вижу ни малейшего смысла вам что-то растолковывать. Вы ничему не учитесь.. Все ваши темы на форуме - это длинное и нудное выпрашивание готовых решений

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

b707 пишет:

Igoreck пишет:

Дык я напишу, Вы только растокуйте чайнику. Это создавать структуру или другим массивом?

вы на этом форуме четвертый год - и все "чайник"?  Может пора уже бросить ардуину и заняться чем-то. что у вас получается лучше? или такого просто нет?

Это я к тому, что не вижу ни малейшего смысла вам что-то растолковывать. Вы ничему не учитесь.. Все ваши темы на форуме - это длинное и нудное выпрашивание готовых решений

Так где учится то, как не здесь? Я прошу помочь мне.

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

Igoreck пишет:

Так где учится то, как не здесь? Я прошу помочь мне.

книжки читать не пробовал? форум не заменяет учебника и пересказывать тебе курс С/С++ никто не станет.

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

b707 пишет:

Igoreck пишет:

Так где учится то, как не здесь? Я прошу помочь мне.

книжки читать не пробовал? форум не заменяет учебника и пересказывать тебе курс С/С++ никто не станет.

Если помочь нет желания - пройди мимо, работы, да и зароботка, слава богу, хватает, а вот на книги, к сожелению времени не вседа, потому и спрашиваю у тех кто их читает много. Всего доброго, уже разобрался.

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

Igoreck пишет:

Всего доброго, уже разобрался.

ну видишь как - значит помогло, селедка-то действует... заходи еще