Скрол в Adafruit

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

Подскожите что я не так делаю, как правильно оформить с милисом?

#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);

unsigned long timing;

void setup() {
 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for (;;);
  }
  display.setTextColor(SSD1306_WHITE);
}

void loop() {
      display.clearDisplay();
      display.setCursor(0, 0);
      display.setTextSize(1);
      display.println("Scroll");
      display.println("some part");
      display.println("of the screen.");
      display.display();
      display.startscrollright(0x00, 0x00);
      delay(4000);

//    if (millis() - timing > 4000){
//      display.clearDisplay();
//      display.setCursor(0, 0);
//      display.setTextSize(1);
//      display.println("Scroll");
//      display.println("some part");
//      display.println("of the screen.");
//      display.display();
//      display.startscrollright(0x00, 0x00);
//      timing = millis();
//    }
}

 

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

Смотря что вы хотите получить.

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

Komandir пишет:

Смотря что вы хотите получить.

Избавится от делай в теле цикла, так как нужно в будущем следить за нажатием кнопки.

Питаюсь сделать так чтобы - попадая в цикл, сразу зускалась надпись с эфектом скрола и при этом следило за нажатием кнопки, и как только нажали кнопку выходим из цикла.

Делай мне мешает, вот поэтому пытаюсь построить на милис, но !!!

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Igoreck пишет:
Избавится от делай в теле цикла, так как нужно в будущем следить за нажатием кнопки.

Питаюсь сделать так чтобы - попадая в цикл, сразу зускалась надпись с эфектом скрола и при этом следило за нажатием кнопки, и как только нажали кнопку выходим из цикла.

Делай мне мешает, вот поэтому пытаюсь построить на милис, но !!!

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

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
#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);

unsigned long timing;

void setup() {
 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    for (;;);
  }
  display.setTextColor(SSD1306_WHITE);
  pinMode(13, OUTPUT);
}

void loop() {
      display.clearDisplay();
      display.setCursor(0, 0);
      display.setTextSize(1);
      display.println("Scroll");
      display.println("some part");
      display.println("of the screen.");
      display.display();
      display.startscrollright(0x00, 0x00);
      timing = millis();
      do {
        //пример
        digitalWrite(13,!digitalRead(13));
        delay(250);
        //пример
      } while ((millis()-timing)<4000);
      display.stopscroll();
      display.startscrollleft(0x00, 0x00);
      timing = millis();
      do {
        //пример
        digitalWrite(13,!digitalRead(13));
        delay(250);
        //пример
      } while ((millis()-timing)<4000);
//    
}

И скроолл и моргание ...

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

Ага-а-а-а!

Ясно. Получается как бы врезаем однотактный цикл с инструкцией, в общий цикл. 

Сбасибо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ты это, если кнопку нужно «слушать», то так не делай, дяди плохому учат.

Лучше почитай это: http://arduino.ru/tutorials/BlinkWithoutDelay

Morroc
Offline
Зарегистрирован: 24.10.2016

Igoreck пишет:

Ага-а-а-а!

Ясно. Получается как бы врезаем однотактный цикл с инструкцией, в общий цикл. 

Сбасибо!


Не ага-а-а-а. Это не избавление от миллис, а извращенная замена delay. Настоящий переход на конечный автомат - это отсутствие блокирующих остальной код циклов и delay. Не надо ничего ждать в отдельных циклах, проверили условие: выполнилось - обработали, не выполнилось - тут же забыли и пошли дальше по loop до следующего раза.

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

Igoreck пишет:

Ага-а-а-а!

Ясно. Получается как бы врезаем однотактный цикл с инструкцией, в общий цикл. 

Сбасибо!


простофиля... Над тобой просто стебутся, а ты и радуешься.