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
  Nextion an Arduino und umgekehrt ohne Bibliothek night022 23 327 17.09.2020 04:59
Letzter Beitrag: night022
  Rotary Encoder und I2C Display gleichzeitig verwenden BenGroll 3 436 27.07.2020 10:23
Letzter Beitrag: hotsystems
Wink Arduino TFT Display MEGA 2560 Samsuino 48 14.916 23.07.2020 15:45
Letzter Beitrag: sam_217
  GPS-Logger-OLED-UNO 4711engel 84 3.090 18.07.2020 20:56
Letzter Beitrag: 4711engel
  OLED Display Phänomen Sulawesi 36 2.068 02.06.2020 13:06
Letzter Beitrag: Sulawesi
  7 Segment Display mit Rotary Encoder SA154 2 407 26.05.2020 13:40
Letzter Beitrag: MicroBahner
  4 Zeilen im Display Modul 0.69" IIC I2C, aber wie? Christian_Moba-Arduino 7 636 17.05.2020 13:12
Letzter Beitrag: Christian_Moba-Arduino
  Fehler bei delay über 32767 Kleingärtner 5 594 07.05.2020 18:51
Letzter Beitrag: Kleingärtner
Question Sketch compilieren und testen ohne hochladen? Triax16 18 1.664 02.05.2020 12:48
Letzter Beitrag: Bitklopfer
  temperaturanzeige am oled ist kryptisch kein_plan 5 550 01.05.2020 16:47
Letzter Beitrag: hotsystems

Gehe zu:


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