Помогите реализовать scroll строки на дисплее 5110 с Adafruit

Тема в разделе "Arduino & Shields", создана пользователем neyasbltb_88, 20 янв 2017.

  1. neyasbltb_88

    neyasbltb_88 Нуб

    Как новичок в программировании, буду рад любой помощи, или подсказке нужного направления. Обрисую ситуацию. Есть одна строка текста:
    Код (C++):
    String scr1("01234");
    Она отображается на экране. Затем с Serial порта приходит вторая строка текста:
    Код (C++):
    String scr2("56789");
    Я хочу сделать анимацию сдвига, чтобы вторая строка как бы сдвигала первую за экран. После этого, вторая строка должна оставаться на экране до того момента, как будет получена следующая строка. Желаемый результат я изобразил на гифке:
    [​IMG]
    По идее, каждый кадр гифки - это одно прохождение цикла loop.
    По теме сдвига текста мне удалось найти очень мало информации. Возможно, если все получится, эти наработки пригодятся еще кому-нибудь. А пока вот скетч, в котором у меня получилось сделать сдвиг первой строки, но никак не могу прикрутить после нее вторую строку:
    Код (C++):
    #include <SPI.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_PCD8544.h>

    //(CLK, DIN, DC, CE, RST)
    Adafruit_PCD8544 display = Adafruit_PCD8544(8, 9, 10, 11, 12);
    int Vcc = 7;
    int Bl = 6;
    int Gnd = 5;

    String scr1("01234");
    String scr2("56789");
    int scrollPosition = scr1.length();
    //int flag = 0;
    //boolean flag2 = true;

    void setup() {
    pinMode(Vcc, OUTPUT);
    digitalWrite(Vcc, HIGH);
    pinMode(Bl, OUTPUT);
    analogWrite(Bl, 150);
    pinMode(Gnd, OUTPUT);
    digitalWrite(Gnd, LOW);
    Serial.begin(9600);
    display.begin();
    display.cp437(true);
    display.setContrast(50);
    display.setTextColor(BLACK);
    display.clearDisplay();
    display.display();

    }

    void loop() {


    display.clearDisplay();  //Очистка дисплея. Если этого не делать, то когда новый символ прописывается на то место, где был старый, они просто накладываются друг на друга, и становятся не читаемыми
    display.setCursor(0,16);  //Установка координат вывода
    Scroll(scr1, scr2, 5);  //Функция вывода
    display.display();  //Прописывание новых значений в дисплей
    delay(500);

    }

    void Scroll(String message1, String message2, int num)  //Текст1, Текст2, Количество показываемых символов
    {

    for (int i = scrollPosition; i < scrollPosition + num; i++)  //num задает длину поля для вывода, в данном случае 5, надо чтобы оно было динамическим, и соответствовало длине строки(предполагается от 1 до 6)
    {

    if ((i >= message1.length()) || (i < 0))
    {
    display.print(" ");  //Пробел между 1 и 2 строкой
    break;
    }
    else
    {
    display.print(message1.charAt(i));  //Вывод одного символа первой строки
    }
    }
    scrollPosition++;

    if ((scrollPosition >= message1.length()) && (scrollPosition > 0))
    {
    scrollPosition = -5;
    }

    }
    А здесь показано мое подключение:
    [​IMG]
    P.S. Границы "поля" отображения текста должны быть плавающими, и зависеть от длины строки.
    Когда дождусь OLED дисплей, перейду на него. Библиотеки Adafruit, насколько я понял, у них почти идентичные.
     
  2. neyasbltb_88

    neyasbltb_88 Нуб

    Удалось!