INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Scrollpausen im Oled Display ohne Delay
23.01.2020, 20:21
Beitrag #1
Scrollpausen im Oled Display ohne Delay
Ich möchte Ausgabedaten und Text im Display scrollen, allerdings Pausen zwischen den „Anzeigeseiten“ setzen. Aaaaaber ohne Delays! Big Grin Mit, funktioniert das Super, aber ich lerne hier ja fleißig dazu und weiß inzwischen, dass das mit den Delays so eine Sache ist...! Nach meiner letzten Anfrage dazu, wurde ich ja auch nochmal auf die „Nachtwächterschaltung“ verwiesen; bei der es dann auch klick gemacht hat und ich das theoretisch und praktisch nachvollziehen konnte. Auf Delays möchte ich in Zukunft daher verzichten.

Jetzt möchte ich das allerdings nicht auf einen bestimmten Pin anwenden, sondern in Verbindung mit einem Display. Und da liegt der Hase jetzt im Pfeffer.
Es beginnt mit der Spannungsanzeige und nach drei Sek. beginnt, wie geplant, der vertikale scroll. Soweit kein Problem. Aber wie der Profi auf Anhieb sieht, läuft ab da die Anzeige permanent. Huh
Was nun?
Hier mein Experimentier-Code, bei dem ich es einfach nicht gewuppt kriege:
Code:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4                        //nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);


float v1 = 0.0;
float v2 = 0.0;
int eingang1 = A0;
int eingang2 = A1;

unsigned long Display_Zeitmessung;

void setup () {
  display.begin(SSD1306_SWITCHCAPVCC);
}

void loop () {
  int eingang1 = analogRead(A0);
  v1 = (eingang1 * 5.0) / 1023;

  int eingang2 = analogRead(A1);
  v2 = (eingang2 * 5.03) / 1023;

  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(1);
  display.setCursor(1, 0);
  display.print("V1 = ");
  display.print(v1);
  display.setCursor(1, 16);
  display.print("V2 = ");
  display.print(v2);
  display.display();

  if (millis() - Display_Zeitmessung > 3000 ) {    //Sind 3 Sek. vergangen
    display.startscrolldiagleft(0xA4, 0xA4);      //Anzeige vertikal scrollen!!!
    Display_Zeitmessung = millis();                //Zeit festhalten

    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(1);
    display.setCursor(0, 0);
    display.println("Test");
    display.setTextSize(2);
    display.setTextColor(1);
    display.setCursor(0, 18);
    display.println("Test");
    display.display();
  }
  else {
    if (millis() - Display_Zeitmessung > 3000 ) {   //Sind weitere 3 Sek. vergangen, Anzeige stoppen
      display.stopscroll();                         //Display scrollen anhalten
      Display_Zeitmessung = millis();                //Zeit stoppen
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2020, 20:59
Beitrag #2
RE: Scrollpausen im Oled Display ohne Delay
Millis und die Nachtwächtererklärung haben nichts mit einem Pin zu tun, sondern nur mit zeitlichen Abläufen. Am Besten verpackst Du Deine verschiedenen Anzeigeseiten jeweils in eigene Funktionen.

Pseudocode:
Code:
byte anzeigeStatus = 0;
const uint32_t warten = 3000;

// im loop
uint32_t aktMillis = millis();
if (aktMillis - Display_Zeitmessung >= warten) {
  Display_Zeitmessung = aktMillis;
  switch (anzeigeStatus) {
      case 1: displaySeite1();
               break;
      case 2: displaySeite2();
               break;
      default:
               anzeigeStatus =0;
  }
  anzeigeStatus++;
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.01.2020, 22:25
Beitrag #3
RE: Scrollpausen im Oled Display ohne Delay
Danke, das werde ich ausprobieren!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2020, 21:42
Beitrag #4
RE: Scrollpausen im Oled Display ohne Delay
Hallo Tommy,

vielen Dank nochmal; das funktioniert sehr gut. Vor allen Dingen ist die Anzeige klar und deutlich, was beim scrollen ja nicht so der Fall ist...!

Grüße
Fritz
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.01.2020, 22:04
Beitrag #5
RE: Scrollpausen im Oled Display ohne Delay
Schön, dass es funktioniert und danke für die Rückmeldung.

Es wäre schön, wenn Du einen funktionierenden Code hier noch veröffentlichst.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2020, 11:27
Beitrag #6
RE: Scrollpausen im Oled Display ohne Delay
(24.01.2020 22:04)Tommy56 schrieb:  Schön, dass es funktioniert und danke für die Rückmeldung.

Es wäre schön, wenn Du einen funktionierenden Code hier noch veröffentlichst.

Gruß Tommy

Das will ich hiermit gerne machen:
Code:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4                        //nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);


float v1 = 0.0;
float v2 = 0.0;
int eingang1 = A0;
int eingang2 = A1;
unsigned long Display_Zeitmessung;
byte anzeigeStatus = 0;
const uint32_t warten = 2000;


void setup () {
  display.begin(SSD1306_SWITCHCAPVCC);
  display.display();
}

void loop () {
  int eingang1 = analogRead(A0);
  v1 = (eingang1 * 5.03) / 1023;

  int eingang2 = analogRead(A1);
  v2 = (eingang2 * 5.03) / 1023;

  uint32_t aktMillis = millis();
  if (aktMillis - Display_Zeitmessung >= warten) {
    Display_Zeitmessung = aktMillis;
    anzeigeStatus++;
    anzeigeMenu();
  }
}

void anzeigeMenu () {
  switch (anzeigeStatus) {

    default:
      anzeigeStatus = 0;

    case 1:
      display.clearDisplay();
      display.setTextSize(2);
      display.setTextColor(1);
      display.setCursor(1, 0);
      display.print("V1 = ");
      display.print(v1);
      display.setCursor(1, 16);
      display.print("V2 = ");
      display.print(v2);
      display.display();
      break;

    case 2:
      display.clearDisplay();
      display.setTextSize(2);
      display.setTextColor(1);
      display.setCursor(0, 0);
      display.println("Test");
      display.setTextSize(2);
      display.setTextColor(1);
      display.setCursor(0, 18);
      display.println("Test");
      display.display();
      break;

    case 3:
      display.clearDisplay();
      display.setTextSize(2);
      display.setTextColor(1);
      display.setCursor(0, 0);
      display.println("usw.");
      display.setTextSize(2);
      display.setTextColor(1);
      display.setCursor(0, 18);
      display.println("usw.");
      display.display();
      break;
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2020, 11:32
Beitrag #7
RE: Scrollpausen im Oled Display ohne Delay
(25.01.2020 11:27)Alter Fritz schrieb:  
Code:
default:
      anzeigeStatus = 0;
Diesen Teil setzt man im Normalfall ans Ende des switch/case. Dann kann das Break entfallen. Wenn Du es an den Anfang setzt, sollte ein break mit rein, sonst macht er gleich mit den Anweisungen im case 1 - Bereich weiter.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.01.2020, 13:22
Beitrag #8
RE: Scrollpausen im Oled Display ohne Delay
Ok, verstehe. Das hatte ich auch zuerst, nur dann war die letzte "Case-Anzeige" doppelt so lang. Aber mit dem löschen des breaks, passt das jetzt auch...!

DANKE
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  von delay auf millis umgestellt, klappt nur nicht. Servo Geschwindigkeit einstellen. gutschy 8 229 21.02.2021 15:22
Letzter Beitrag: gutschy
  SH1107 Oled Display und Multiplexer Feuchtigkeitssteuerung Kanka 35 1.518 06.02.2021 22:38
Letzter Beitrag: Kanka
  Werte im Display per Taster wechseln bmxruler 8 426 27.01.2021 11:22
Letzter Beitrag: bmxruler
  Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll. generic_user492 3 268 26.01.2021 14:11
Letzter Beitrag: MicroBahner
  Frage zu Delay-Alternative Holzwurm56 13 729 24.01.2021 21:55
Letzter Beitrag: Franz54
  Oled Wire Frequenz huber5093 3 270 21.01.2021 23:45
Letzter Beitrag: hotsystems
  OLED Bildschirm Problem JoeIsFame 79 2.240 04.01.2021 06:41
Letzter Beitrag: Bitklopfer
  2,3" monochorme 128x32 Display Thor Wallhall 39 1.229 26.12.2020 16:42
Letzter Beitrag: Tommy56
  Weiches Auf- und Abblenden mit delay vs millis() do1xxy 24 1.069 23.12.2020 14:45
Letzter Beitrag: Franz54
  ständiger Programmablauf ohne Funktion AnjinSan 9 790 06.12.2020 14:10
Letzter Beitrag: AnjinSan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste