Перелистывание с помощью кнопки на OLED Displey
- Войдите на сайт для отправки комментариев
Здравствуйте, перейду сразу к делу. На днях начал работать с Oled Displey (128x64 SH1106) использую под него библиотеку "MicroLCD" (ссылка на скачивание: https://github.com/stanleyhuangyc/MultiLCD). И мне для скетча понадобилось выводить на экран (при включение) одну переменную с 1-ого потенциометра, а при нажатие кнопки выводить другую переменную со 2-ого потенциометра (уже без первой), вроде бы легко, но я наткнулся в интернете, лишь на меню, которые мне не подходят. Также я пробовал написать скетч, но есть проблемма, на экране появляются помехи из-за "lcd.clear();" - эта функция очищает дисплей, она просто не обходима для скетча, ведь без нее экран просто не будет очищатся, а без очищения при нажатие кнопки будет выводится сразу две переменные (чего не должно быть), но с ней проблема, экран постоянно моргает, как бы очищается, и я не знаю, что мне с этим делать,так же для отображения 2-ой переменной кнопку надо удерживать, а по задумке в скетче ее надо нажать один раз.
Надеюсь тут мне помогут одаренные умы,зарание благодарю за поддержку.
Ниже приведен мой скетч, если кто-то решит его подправить и сказать мне, почему же у меня ничего не получается:
#include <Wire.h> #include <MicroLCD.h> #include <Arduino.h> boolean buttonWasUp = true; // была ли кнопка отпущена? LCD_SH1106 lcd; //настройка моего экрана, есть и второй (он указан в примере этой библиотеке) int y; //1-ая переменная int x; //2-ая переменная int butn1 = 3;//кнопка на входе 3 void setup() { lcd.begin();//запускаем экран lcd.clear();//очищаем его pinMode(butn1, OUTPUT);//кнопку на выход Serial.begin(9600); } void loop() { // определить момент «клика» несколько сложнее, чем факт того, // что кнопка сейчас просто нажата. Для определения клика мы // сначала понимаем, отпущена ли кнопка прямо сейчас... boolean buttonIsUp = digitalRead(butn1); x = map(analogRead(A0),0,1023,0,255); y = map(analogRead(A1),0,1023,0,255); if (buttonWasUp && !buttonIsUp) { // // ...может это «клик», а может и ложный сигнал (дребезг), // возникающий в момент замыкания/размыкания пластин кнопки, // поэтому даём кнопке полностью «успокоиться»... delay(10);// buttonIsUp = digitalRead(butn1); } //считываем сигнал снова if (!buttonIsUp) { // если она всё ещё нажата... lcd.clear(); //очищаем его lcd.setCursor(1, 1); //выбираем место lcd.setFontSize(FONT_SIZE_MEDIUM);//ставим средний шрифт lcd.println("X");//пишем Х lcd.setCursor(25,1); lcd.setFontSize(FONT_SIZE_MEDIUM); lcd.println(x);//пишем 1-ую переменную Serial.print("\t"); Serial.print(x);//и отображаем ее в монитор порта } else { // если нет, то... lcd.clear(); lcd.setCursor(65, 1); lcd.setFontSize(FONT_SIZE_MEDIUM); lcd.println("Y"); lcd.setCursor(85,1); lcd.setFontSize(FONT_SIZE_MEDIUM); lcd.println(y); } // запоминаем последнее состояние кнопки для новой итерации buttonWasUp = buttonIsUp;// }
Valerkaaa, а зачем Вы дергаете дисплей на каждом проходе цикла?
Один раз нарисовали, что нужно, и хватит.
Очищать дисплей и перерисовывать следует только тогда, когда что-то реально изменилось.
Попробуте - не проверял
Попробуте - не проверял
Благодарю, скетч прекрасно работает, примите мою искренную благодарность, за свою проделаную работу!
Valerkaaa, а зачем Вы дергаете дисплей на каждом проходе цикла?
Один раз нарисовали, что нужно, и хватит.
Очищать дисплей и перерисовывать следует только тогда, когда что-то реально изменилось.
Спасибо за совет, хоть он мне сейчас и не пригодится, потому что vosara уже написал мне скетч, но все же в следующий раз, когда я буду писать код, мне поможет ваш совет.