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
RGB-OLED 96x64 0,95" und Laufschrift
10.10.2017, 15:39
Beitrag #9
RE: RGB-OLED 96x64 0,95" und Laufschrift
Hallo
(10.10.2017 12:22)Tommy56 schrieb:  Sowas kommt davon, wenn man Code kopiert, ohne ihn zu verstehen. Wink
Deine Wissensquellen sollten die beiden Adafruit-Libs sein, die Du für das Display eingebunden hast.

Gruß Tommy
Da verweise ich mal auf meinen Eingangsbeitrag.Angel

Ich habe nun erreicht das der Text dargestellt wird und sich auch bewegt.
Störend ist nun die Art und Weise wie er das macht.
Zum einen wird der Bildschirm für jeden Schritt von links gelöscht, zum anderen
bewegt sich der Text jeweils um zwei Zeichen von rechts nach links.
Ich füge mal den geänderten Code ein.
Code:
// definieren der Anschlüsse am Arduino
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8


// Farben festlegen
#define    BLACK           0x0000
#define    BLUE            0x001F
#define    RED             0xF800
#define    GREEN           0x07E0
#define    CYAN            0x07FF
#define    MAGENTA         0xF81F
#define    YELLOW          0xFFE0  
#define    WHITE           0xFFFF

// Bibliotheken festlegen
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>

// Option 1: festlegen welche Anschlüsse genutzt werden, etwas langsamere Komunikation
Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst);  

// Option 2: etwas schnellere Komunikation, nutzt SID
// für UNO sind sclk = 13 und sid = 11
// Pin 10 muss als Output festgelegt werden
// wird für benutzung mit microSD genutzt
// (see the image drawing example)
//Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);

char text[] = " Werte Kunden, wir presentieren ihnen"; // Scrolltext
const uint8_t laenge = 8;  //abhängig von der gewählten TextSize,legt sichtbaren Bereich fest
                           // zu großer Wert erzeugt einen Zeilenumbruch
// Zeitsteuerung
uint32_t aktMillis, lastMillis;
uint32_t lastMillisScroll;
const uint32_t SCROLLINTERVALL = 1 * 50; // Scrollabstand
const uint32_t INTERVALL = 3;

// Berechnen des Scrollstücks
char * scroll() {
static char stueck[laenge+1];
    uint8_t len = strlen(text);  
    char first=text[0];
    uint8_t idx = 0;
    while (text[idx++] = text[idx]);
    text[len-1]=first;
    Serial.print(">");Serial.print(text);Serial.println("<");
    strlcpy(stueck,text,laenge+1);
    return stueck;
}    

void setup() {

    display.begin();
    //Display um 180° gedreht
    display.setRotation(2);
    //Hintergrund schwarz füllen
    display.fillScreen(BLACK);

    Serial.print("Text: >");Serial.print(text);Serial.print("< Laenge: ");Serial.println(laenge);

    randomSeed(analogRead(A0));  // unbenutzter Analogeingang  

}

void loop() {
aktMillis = millis();
    if (aktMillis - lastMillis >= INTERVALL) {
      lastMillis = aktMillis;
    }
    if (aktMillis - lastMillisScroll >= SCROLLINTERVALL) {
      lastMillisScroll = aktMillis;
      Serial.println(scroll());

// Bildschirm löschen und neue Ausgabe

     display.fillScreen(BLACK);

     display.setTextColor(GREEN);
     display.setTextSize(2);
     display.setCursor(0, 15);
     display.print(scroll());

    }
}

Die Geschwindigkeit der Laufschrift ist auch eher behäbig.
Was wohl auch an dem ständigen überschreiben mit Schwarz liegen wird.

Gruß Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2017, 16:03
Beitrag #10
RE: RGB-OLED 96x64 0,95" und Laufschrift
Deshalb habe ich ja auf die Libs als Informationsquelle verwiesen, da dort jeder Autor eine andere Herangehensweise hat.

Nicht "er" macht etwas, sondern Du hast es so programmiert.

Die Funktion scroll() rückt bei jedem Aufruf den Text um 1 Zeichen nach links. Da Du sie 2 mal aufrufst, sind es halt 2 Zeichen. Den Aufruf in Serial.println brauchst Du nicht.

Im Code von Ingo wird nur das Rechteck der Laufschrift mit der Hintergrundfarbe überschrieben. Du löschst dagegen den ganzen Bildschirm. Das ist dann halt langsamer.

Ein SCROLLINTERVALL von 50 Millisekunden halte ich für zu kurz.

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
10.10.2017, 20:35 (Dieser Beitrag wurde zuletzt bearbeitet: 10.10.2017 21:19 von Behagen.)
Beitrag #11
RE: RGB-OLED 96x64 0,95" und Laufschrift
Hallo Tommy

Ich habe nun das Serial.printIn(scroll()); aus kommentiert.
Das hat die Schrittweite auf eins gebracht, wie du gesagt hast.
Desweiteren habe ich display.fillScreen(Black); im Bereich Bildschirm löschen
durch display.fillRect(0, 15, 96, 24, 0); ersetzt.
Das hat zu einem deutlichen Anstieg der Darstellungsgeschwindigkeit geführt.
Allerdings bleibt der unschöne Effekt durch das löschen von Links erhalten.
Außerdem habe ich probiert den Text noch einmal in Schwarz auszugeben, um
ihn so zu überschreiben. Aber das führt zu einem Chaos auf dem Display.
Offensichtlich sind grüner und schwarzer Text versetzt zu einander.

Gruß Bernd

Ergänzung:
Ich habe es nun doch hinbekommen.Rolleyes
Folgende Änderung im Sketch hat den gewünschten Effekt gebracht.
Code:
// Bildschirm löschen und neue Ausgabe

     display.setTextColor(YELLOW, BLACK);
     display.setTextSize(2);
     display.setCursor(0, 15);
     display.print(scroll());
     display.setTextColor(BLACK, BLACK);
     display.setTextSize(2);
     display.setCursor(0, 15);
Vielen Dank an Dich Tommy für Deine Denkanstöße und Tipps.

Gruß Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2017, 21:26 (Dieser Beitrag wurde zuletzt bearbeitet: 10.10.2017 21:55 von Tommy56.)
Beitrag #12
RE: RGB-OLED 96x64 0,95" und Laufschrift
Prima, dass es funktioniert und danke für Deine Rückmeldung.

Gruß Tommy

Edit: Wenn Du den resultierenden Sketch noch mal komplett einstellen würdest, wäre das schön.

Noch ein Edit: Die Ausgabe in Schwarz wäre auch möglich und wahrscheinlich schneller, da müsste man nur scroll() etwas umschreiben.
Wenn Du daran Interesse hast, sage bescheid.

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
10.10.2017, 22:50
Beitrag #13
RE: RGB-OLED 96x64 0,95" und Laufschrift
Hallo Tommy

Natürlich stelle ich den Sketch gern nochmal komplett ein.
Ich bin natürlich an eventuellen Verbesserungen sehr interessiert.
Code:
// definieren der Anschlüsse am Arduino
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8


// Farben festlegen
#define    BLACK           0x0000
#define    BLUE            0x001F
#define    RED             0xF800
#define    GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0  
#define WHITE           0xFFFF

// Bibliotheken festlegen
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>

// Option 1: festlegen welche Anschlüsse genutzt werden, etwas langsamere Komunikation
Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst);  

// Option 2: etwas schnellere Komunikation, nutzt SID
// für UNO sind sclk = 13 und sid = 11
// Pin 10 muss als Output festgelegt werden
// wird für benutzung mit microSD genutzt
// (see the image drawing example)
//Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);

char text[] = " Werte Kunden, wir presentieren ihnen"; // Scrolltext
const uint8_t laenge = 8;  //abhängig von der gewählten TextSize,legt sichtbaren Bereich fest
                           // zu großer Wert erzeugt einen Zeilenumbruch
// Zeitsteuerung
uint32_t aktMillis, lastMillis;
uint32_t lastMillisScroll;
const uint32_t SCROLLINTERVALL = 1 * 1000; // Scrollabstand in Sekunden
const uint32_t INTERVALL = 30000; // das wären 30 Sekunden

// Berechnen des Scrollstücks
char * scroll() {
static char stueck[laenge+1];
    uint8_t len = strlen(text);  
    char first=text[0];
    uint8_t idx = 0;
    while (text[idx++] = text[idx]);
    text[len-1]=first;
    Serial.print(">");Serial.print(text);Serial.println("<");
    strlcpy(stueck,text,laenge+1);
    return stueck;
}    

void setup() {

    display.begin();
    //Display um 180° gedreht
    display.setRotation(2);
    //Hintergrund schwarz füllen
    display.fillScreen(BLACK);

    Serial.print("Text: >");Serial.print(text);Serial.print("< Laenge: ");Serial.println(laenge);

    randomSeed(analogRead(A0));  // unbenutzter Analogeingang  

}

void loop() {
aktMillis = millis();
    if (aktMillis - lastMillis >= INTERVALL) {
      lastMillis = aktMillis;
    }
    if (aktMillis - lastMillisScroll >= SCROLLINTERVALL) {
      lastMillisScroll = aktMillis;
    //  Serial.println(scroll());

// Bildschirm löschen und neue Ausgabe

     display.setTextColor(YELLOW, BLACK);
     display.setTextSize(2);
     display.setCursor(0, 15);
     display.print(scroll());
     display.setTextColor(BLACK, BLACK);
     display.setTextSize(2);
     display.setCursor(0, 15);
    
    }
}

Folgende Anmerkungen habe ich dazu.
Man sieht in dieser Variante immer noch einen gewissen "Blätterreffekt"
Der ist zum einen abhängig vom Parameter SCROLLINTERVAL und zum anderen von der verwendeten Textgröße.
Wobei eine kleinere Textgröße einen schöneren Scrolleffekt ergibt.
Vor diesem Hintergrund wäre ich natürlich sehr daran interessiert wie Du das mit
dem umschreiben von scroll() meinst.

Gruß Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.10.2017, 22:54 (Dieser Beitrag wurde zuletzt bearbeitet: 10.10.2017 22:55 von Tommy56.)
Beitrag #14
RE: RGB-OLED 96x64 0,95" und Laufschrift
Wenn man scroll etwas umschreibt, kann man sich auch den alten Text nochmal geben lassen, den man dann mit der Hintergrundfarbe nochmal ausgeben kann, um ihn zu löschen. Ob das funktioniert, hängt von der Genauigkeit des Displays ab.

Hier der neue Code:
Code:
// Berechnen des Scrollstücks
// stueck() wie bisher liefert das verschobene Stück
// stueck(true) liefert wie bisher das verschobene Stück
// stueck(false) liefert den alten Text, der dann mit der Hintergrundfarbe überschrieben werden kann
char * scroll(boolean neu = true) {
static char stueck[laenge+1];
    if (!neu) return stueck;
    uint8_t len = strlen(text);  
    char first=text[0];
    uint8_t idx = 0;
    while (text[idx++] = text[idx]);
    text[len-1]=first;
    Serial.print(">");Serial.print(text);Serial.println("<");
    strlcpy(stueck,text,laenge+1);
    return stueck;
}
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
11.10.2017, 12:44
Beitrag #15
RE: RGB-OLED 96x64 0,95" und Laufschrift
Hallo Tommy

Leider muss ich mal wieder zugeben das ich nicht wirklich verstehe wie das funktioniert
und ob und was ich im Sketch noch zusätzlich verändern müsste.
Ich habe zwar im Referenzhandbuch nachgesehen um dahinter zu steigen, wie was funktioniert,
aber so wirklich ist mir das nicht gelungen.
Ein Testlauf mit Deinem Code hat keinen Unterschied zum Original gebracht.
Aber trotzdem gibt es eine gute Nachricht.
Ich habe die Kommunikation von Variante 1 auf Variante 2 umgestellt, das hat einen
deutlichen Effekt gebracht. Nun läuft auch Text in der Größe TextSize(2) flüssig.
Als SCROLLINTERVAL nutze ich aktuell 500 Millisekunden, aber da sind auch je nach Geschmack andere Werte möglich.
Jetzt will ich noch probieren was passiert wenn man eine zweite oder gar dritte Zeile mit Laufschrift einbindet.
Der Hit wäre wenn ich in dem laufenden Text die Farbe einzelner Wörter unterschiedlich gestalten könnte.
Umlaute wären auch nicht schlecht werden aber wohl vom aktuellen Zeichensatz nicht so ohne weiteres unterstützt.
Ich habe also noch einiges zu tun.Blush

Gruß Bernd
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2017, 13:05
Beitrag #16
RE: RGB-OLED 96x64 0,95" und Laufschrift
Scroll ist nur für 1 Text geeignet.

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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Grafiken auf OLED-Display darstellen scritch 8 4.292 17.11.2016 13:33
Letzter Beitrag: scritch
  1.8" Serial: UART/I2C/SPI True Color OLED160x128 OLED Module Georg 4 3.282 31.08.2014 19:03
Letzter Beitrag: Georg

Gehe zu:


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