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
Oled 0.91 wechselnde Anzeige . Benötige hilfe
16.03.2019, 07:57 (Dieser Beitrag wurde zuletzt bearbeitet: 16.03.2019 07:58 von MotD.)
Beitrag #1
Oled 0.91 wechselnde Anzeige . Benötige hilfe
Moin

Habe gestern das erste mal mit meinem 0.91 128x32 Oled gearbeitet .

Nutze die u8g lib und habe es mit einem dht22 getestet.

Anzeige klappt soweit .

Ich würde gerne humidity und temp wechselnd anzeigen lassen .
Jeweils ca 4 Sekunden danach wieder von vorne .
Später kommen natürlich noch mehr Sensoren ran die dann eingebunden werden sollen .

Ich weiß nur leider nicht wonach ich googeln kann .

Wer für Tipps dankbar .

Schönes Wochenende
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2019, 10:54
Beitrag #2
RE: Oled 0.91 wechselnde Anzeige . Benötige hilfe
(16.03.2019 07:57)MotD schrieb:  Moin

Habe gestern das erste mal mit meinem 0.91 128x32 Oled gearbeitet .

Nutze die u8g lib und habe es mit einem dht22 getestet.

Anzeige klappt soweit .

Ich würde gerne humidity und temp wechselnd anzeigen lassen .
Jeweils ca 4 Sekunden danach wieder von vorne .
Später kommen natürlich noch mehr Sensoren ran die dann eingebunden werden sollen .

Ich weiß nur leider nicht wonach ich googeln kann .

Wer für Tipps dankbar .

Schönes Wochenende

Moin,
dann poste doch mal deinen Sketch und zwar bitte in Code Tags... oben in der Editorleiste das "#" benutzen.
Ähm bist du dir sicher das dein OLED x32 ist und nicht x64 was diese kleinen Dinger üblicherweise sind ?
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2019, 13:05
Beitrag #3
RE: Oled 0.91 wechselnde Anzeige . Benötige hilfe
hier der sketch

Code:
#include <U8glib.h>
#include "DHT.h"

#define DHTPIN 2     // connect to D2
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);

U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);

void setup()
{
  Serial.begin(9600);
  dht.begin();
  delay(10);
}

void loop(void)
{
  delay(2000); // Wait a few seconds between measurements.
  float h = dht.readHumidity(); // Read humidity
  float t = dht.readTemperature(); //Read temperature
  u8g.firstPage();  
  do {
  u8g.setFont(u8g_font_profont12);
  u8g.setPrintPos(0, 10);
  u8g.print ("Hum");
  u8g.setPrintPos(65, 10);
  u8g.print (h);
  u8g.setPrintPos(100, 10);
  u8g.print ("%");
  u8g.setPrintPos(0, 30);
  u8g.print ("Temp.:");
  u8g.setPrintPos(43, 30);
  u8g.print (t);
  u8g.setPrintPos(75, 30);
  u8g.print ("*C");
      } while( u8g.nextPage() );
  delay(100);

}

habe keine Ahnung wie ich das getrennt mache mit der wechselnden anzeige und ja, es ist definitiv ein 0.91 Oleg mit 128x32

wie hier. display
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2019, 13:28
Beitrag #4
RE: Oled 0.91 wechselnde Anzeige . Benötige hilfe
Baue deinen Sketch mit Funktionen auf.
1. Funktion: Messung ausführen.
2. Funktion: Anzeigen der Daten

In der Anzeige wechselst du per SimpleTimer die entsprechenden Messdaten.
Sieh dir die Library "SimpleTimer" mal an, dies ist sehr simple.
Da kannst du per Zeitvorgabe den entsprechenden Wechsel einstellen.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2019, 15:58
Beitrag #5
RE: Oled 0.91 wechselnde Anzeige . Benötige hilfe
Man kann das aber auch mit switch case aufbauen, also in etwa so:

Code:
byte disp =1; // Display Auswahl beginnt bei 1
unsigned long int lastdisplay, displaytime;
#define maxdisplay 2

setup()
{
..
lastdisplay = millis();  // lastdisplay initialisieren
displaytime = 3000; // erstes Fenster 3 Sec. anzeigen
}


loop(){

if (millis() >= lastdisplay+dsiplaytime){
   lastdisplay = millis();
   disp++;   // das nächste Fenster auswählen
   if(disp > maxdisplay)disp = 1;  // wenn alle Fenster durch wieder von vorne  
   }


switch (disp) {
  case 1:
  displaytime = 3000; // dieses Fenster 3 Sek anzeigen
  float h = dht.readHumidity(); // Read humidity
  float t = dht.readTemperature(); //Read temperature
  u8g.firstPage();  
  do {
  u8g.setFont(u8g_font_profont12);
  u8g.setPrintPos(0, 10);
  u8g.print ("Hum");
  u8g.setPrintPos(65, 10);
  u8g.print (h);
  u8g.setPrintPos(100, 10);
  u8g.print ("%");
  u8g.setPrintPos(0, 30);
  u8g.print ("Temp.:");
  u8g.setPrintPos(43, 30);
  u8g.print (t);
  u8g.setPrintPos(75, 30);
  u8g.print ("*C");
      } while( u8g.nextPage() );
    break;


  case 2:   // Zweiter Display Inhalt
    displaytime = 5000; // dieses Fenster 5 Sec. anzeigen

    //do something when var equals 2
    break;

  default:
    // if nothing else matches, do the default
    // default is optional
    break;
}

} // Loop Ende
Warum bei dir die Displayausgabe in eine do - while Schleife gepackt ist verstehe ich nicht... aber ich vermisse auch ein Clear.Display am Anfang der Ausgabe und ein Aufruf das nun die Ausgabe angezeigt wird am Ende der Ausgabe.

Weil ich habe das ähnliche 0,96" Display mit 128x64 Pixeln im Einsatz und da sieht das so aus:
Code:
display.clear(); // clear the display

  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 0, "Uhrzeit");
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  getLocalTime(&timeinfo);
  sprintf(ausg,"%02d:%02d:%02d",timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);
  display.drawString(128, 0, String(ausg));

  rssi = WiFi.RSSI();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 16, "RSSI");
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(100, 16, String(rssi));
  display.drawString(128, 16, " dB");

//#### Ausgabe IAQ
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 32, "IAQ");
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(96, 32, String(IAQ));
  display.drawString(118, 32, String("G"));
  display.drawString(128, 32, String(IAQ_accuracy));

//###### Ausgage Telegrammcounter
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 48, "GYr");
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
  display.drawString(128, 48, String(gyread));

  display.display(); // write the buffer to the display

Das mit dem switch case werde ich nun auch bei mir einpflegen weil ich bislang Zwei Fenster ausgebe und das noch etwas getürkt geschieht Rolleyes
Btw. den switch case Code habe ich noch nicht geprüft...nur blind geschrieben.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.03.2019, 16:20 (Dieser Beitrag wurde zuletzt bearbeitet: 16.03.2019 16:21 von Tommy56.)
Beitrag #6
RE: Oled 0.91 wechselnde Anzeige . Benötige hilfe
Der Zeile
Code:
if (millis() >= lastdisplay+dsiplaytime){
muss ich widersprechen, da diese nicht ordentlich über den Überlauf von millis kommt.
Ich habe die Problematik als Beispiel mit unsigned char dargestellt (damit es nicht so lange läuft). Die Casts sind notwendig, damit der Kompiler es nicht als int behandelt.

Code:
unsigned char aktuelleMillis = 0, letzteMillis = 0, dauer = 10;
int cnt = 0;
void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  Serial.println("Initialwerte:");
  Serial.print("Dauer = "); Serial.println(dauer);
  Serial.print("letzte = "); Serial.println(letzteMillis);
  Serial.print("aktuell"); Serial.print('\t'); Serial.print("Diff.");
  Serial.print('\t'); Serial.println("letze");
}

void loop() {
  if (cnt <= 300) { // Damit das nicht ewig läuft
    if ((unsigned char)(aktuelleMillis - letzteMillis) >= dauer) {  // richtig
    // if ((unsigned char)aktuelleMillis >= (unsigned char)(dauer + letzteMillis)) {  // falsch
      // tu was
      Serial.print(aktuelleMillis);
      Serial.print('\t'); Serial.print((unsigned char)(aktuelleMillis - letzteMillis));
      Serial.print('\t'); Serial.print(letzteMillis); Serial.println("\tAktion");
      letzteMillis = aktuelleMillis;
    }  
    else {
      Serial.print(aktuelleMillis); Serial.print('\t');
      Serial.println((unsigned char)(aktuelleMillis - letzteMillis));
    
    }
    aktuelleMillis++;
    cnt++;
  }  
}
Durch umkommentieren der beiden Vergleichszeilen kann man beide Verhalten nachvollziehen.
Bei richtig ergibt sich am Überlauf:
Code:
240    10    230    Aktion
241    1
242    2
243    3
244    4
245    5
246    6
247    7
248    8
249    9
250    10    240    Aktion
251    1
252    2
253    3
254    4
255    5
0    6
1    7
2    8
3    9
4    10    250    Aktion

Bei dem falschen Vergleich kommt dagegen:
Code:
240    10    230    Aktion
241    1
242    2
243    3
244    4
245    5
246    6
247    7
248    8
249    9
250    10    240    Aktion
251    1    250    Aktion
252    1    251    Aktion
253    1    252    Aktion
254    1    253    Aktion
255    1    254    Aktion
0    1
1    2
2    3
3    4
4    5
5    6
6    7
7    8
8    9
9    10    255    Aktion


Also immer: if (aktueller Wert - letzter Wert >= Dauer) verwenden.

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
  Simon Says bzw. Senso - Spiel bitte Hilfe Riddle 3 165 15.03.2019 13:46
Letzter Beitrag: Tommy56
  Hilfe benötigt beim Verknüpfen von Klassen Batucada 7 326 02.03.2019 23:47
Letzter Beitrag: georg01
  Hilfe bei Formulierung der Frage Matt 3 221 23.02.2019 12:45
Letzter Beitrag: Tommy56
  Timer Sketch für OLED SSD1331 Talon 20 674 17.02.2019 10:48
Letzter Beitrag: Tommy56
  Hilfe bei Fehlermeldung Badboy89 9 531 13.02.2019 15:23
Letzter Beitrag: Tommy56
Sad Neuling verzweifelt braucht Hilfe delay durch timer ersetzen Lois 1 414 06.02.2019 16:15
Letzter Beitrag: Tommy56
  Kann auf A.Uno nichts hochladen - Anfänger sucht Hilfe ardeche 25 1.237 21.01.2019 22:06
Letzter Beitrag: ardeche
  Neuling sucht Hilfe HeikeF 6 508 16.01.2019 10:07
Letzter Beitrag: hotsystems
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 20 4.750 17.11.2018 18:25
Letzter Beitrag: Bitklopfer
  Messwert auf OLED 0,96" SSD1306 darstellen geht nicht alpenpower 8 1.607 17.09.2018 10:56
Letzter Beitrag: alpenpower

Gehe zu:


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