Задать смещение оси координат на OLED дисплее.
- Войдите на сайт для отправки комментариев
Пт, 09/04/2021 - 12:16
Железо: OLED 128*64 i2c, arduino nano, энкодер с нажатием.
Библиотеки:GyverEncoder, GyverOLED.
Задача: Смеcтить ось по команде.
Проблема: Смещение оси изменением stepY не происходит(строка 45).
// пример с простым шахматным меню // пины энкодера #define CLK 15 #define DT 16 #define SW 17 #include "GyverEncoder.h" Encoder enc1(CLK, DT, SW); // для работы c кнопкой #include <GyverOLED.h> GyverOLED<SSD1306_128x64, OLED_BUFFER> oled; // переменные int val0 = 10, val1 = 20, val2 = 30, val3 = 40, val4 = 50, val5 = 60, val6 = 70, val7 = 80, arrowPos = 90; int stepX = 8; int val0x = stepX, val1x = stepX, val2x = stepX, val3x = stepX, val4x = stepX, val5x = stepX, val6x = stepX, val7x = stepX; int stepY = 2; int val0y = 0, val1y = val0y + stepY, val2y = val1y + stepY , val3y = val2y + stepY, val4y = val3y + stepY, val5y = val4y + stepY, val6y = val5y + stepY, val7y = val6y + stepY; int arrowstepX = 0; int arrowval0x = arrowstepX, arrowval1x = arrowstepX, arrowval2x = arrowstepX, arrowval3x = arrowstepX, arrowval4x = arrowstepX, arrowval5x = arrowstepX, arrowval6x = arrowstepX, arrowval7x = arrowstepX; int arrowval0y = val0y, arrowval1y = val1y, arrowval2y = val2y, arrowval3y = val3y, arrowval4y = val4y, arrowval5y = val5y, arrowval6y = val6y, arrowval7y = val7y; byte x = constrain(x,0,250); void setup() { Serial.begin(9600); enc1.setType(TYPE2); oled.init(); oled.clear(); // printGUI(); // выводим интерфейс } void loop() { enc1.tick(); if (enc1.isTurn()) { // при любом повороте oled.clear(); // очищаем дисплей if (enc1.isRight()) { arrowPos++; if (arrowPos > 7) arrowPos = 0; // ограничиваем позицию курсора if (arrowPos > 2) val0x =- 100, stepY =+ 2; // убирает первый пункт за пределы экрана смещение по оси х, почему-то не смещает ось У для всех пунктов... } if (enc1.isLeft()) { arrowPos--; if (arrowPos < 0) arrowPos = 7; // ограничиваем позицию курсора if (arrowPos < 3) val0x = stepX; // вовзвратщает первый пункт на своё место } // при нажатом повороте меняем переменные ++ if (enc1.isRightH()) { switch (arrowPos) { case 0: x=x+50; break; case 1: val1++; break; case 2: val2++; break; case 3: val3++; break; case 4: val4++; break; case 5: val5++; break; case 6: val6++; break; case 7: val7++; break; } } // при нажатом повороте меняем переменные -- if (enc1.isLeftH()) { switch (arrowPos) { case 0: x=x-50 ; break; case 1: val1--; break; case 2: val2--; break; case 3: val3--; break; case 4: val4--; break; case 5: val5--; break; case 6: val6--; break; case 7: val7--; break; } } oled.setCursor(val0x, val0y); oled.print("Contrast:"); oled.print(x); oled.setCursor(val1x, val1y); oled.print("val1:"); oled.print(val1); oled.setCursor(val2x, val2y); oled.print("val2:"); oled.print(val2); oled.setCursor(val3x, val3y); oled.print("val3:"); oled.print(val3); oled.setCursor(val4x, val4y); oled.print("val4:"); oled.print(val4); oled.setCursor(val5x, val5y); oled.print("val5:"); oled.print(val5); oled.setCursor(val6x, val6y); oled.print("val6:"); oled.print(val6); oled.setCursor(val7x, val7y); oled.print("val7:"); oled.print(val7); // выводим стрелку switch (arrowPos) { case 0: oled.setCursor(arrowval0x, arrowval0y); break; case 1: oled.setCursor(arrowval1x, arrowval1y); break; case 2: oled.setCursor(arrowval2x, arrowval2y); break; case 3: oled.setCursor(arrowval3x, arrowval3y); break; case 4: oled.setCursor(arrowval4x, arrowval4y); break; case 5: oled.setCursor(arrowval5x, arrowval5y); break; case 6: oled.setCursor(arrowval6x, arrowval6y); break; case 7: oled.setCursor(arrowval7x, arrowval7y); break; } oled.write(62); // вывести стрелку oled.setContrast(x); oled.update(); } }
А почему оно должно работать так как вы хотите ?
Где кроме строки 45 используется переменная stepY ?
stepY является элементом координаты Y кажджой строки
stepY является элементом координаты Y кажджой строки
Прелестно :)
Вы правда думаете, что один раз в начале кода написав
у вас при любом изменении stepY значение val2y будет пересчитываться автоматически???
Почему нет, оно же в loop'e?
Почему нет, оно же в loop'e?
где оно в ЛУПе? - укажите номер строки
Та же 45я изменяет его при каждом проходе, нет?
Та же 45я изменяет его при каждом проходе, нет?
45-ая меняет только stepY, на val0y и прочие - не влияет никак
Слушайте. у вас все невероятно запущено. вы логику работы программы не понимаете вовсе. я вижу
Поэтому тему я создал в разделе новичков.
да и сейчас дичь какая-то
Зачем нужно по 7 переменных, если они все одинаковые?
Елисей, крайне неуважительно к собеседнику писать длинные сообщения и тут же удалять, прежде чем другой сможет ответить. Если продолжите так делать - я ухожу из ветки.
Вот это опасный приём, кстати:
Значения не одинаковые, каждое следующее больше предыдущего на величину предыдущего + шаг (stepY).
Это я и наблюдаю на своём дисплее.
В чём опасность?
Значения не одинаковые, каждое следующее больше предыдущего на величину предыдущего + шаг (stepY).
зачем для этого семь отдельных переменных??
Опасность в том, что по забывчивости можно вместо запятой воткнуть точку с запятой. Эффект будет непредсказуем.
Опасность в том, что по забывчивости можно вместо запятой воткнуть точку с запятой. Эффект будет непредсказуем.
да и вообще, писать кучу операторов через запятую на одной строке - это гавнокод
Ребят, не надо устраивать тут суд с линчеванием, я создал тему в разделе новичков, описал проблему, вы же рассуждаете с точики зрения проффесионалов и при этом не даёте ответов а генерируете вопросы.
Раздел для новичков, а не для ленивцев. Открой учебник и читай. Никто его не будет перепечатывать сюда специально для твоей царской особы.
rkit, название учебника, название статьи?
Керниган и Ритчи, "Язык программирования Си"
не даёте ответов
Ответ - пост №3 и №5
Та же 45я изменяет его при каждом проходе, нет?
Нет.
да какой-то крайне странный товарищ... пишет сообщения, тут же удаляет...
Он уже один раз написал, что все исправил, перенеся вычисления смещения в ЛУП. И даже код выложил... через 2 минуты удалил и снова задает те же вопросы...
Чего ему надо - я не пониманию. Подозреваю. что он и сам не особо еще понял.
Там было неверное решение, не цепляйтесь к мелочам.
Там было неверное решение, не цепляйтесь к мелочам.
ну предложите верное тогда. Подсказок вам тут накидали изрядно.
Делайте что-то, предлагайте варианты. это ж ваш проект, а не наш. готовый ответ с кодом вам тут никто не предложит, не рассчитывайте
Меня лично смущают строки
И вопрос к ТС - А чего к Гайверу не обратились?
Дичь какая то. Зачем все эти повторы по 8 раз ? Нафига тут ошибку искать если она везде ? Надо тяпнуть, удалить нахрен скетч, лечь спать и утром написать заново.
Для теста сойдет, но вообще так делать не стоит - очищайте там где надо, а то потом подключите цветной дисплей и с таким подходом очень расстроитесь.