SSD1306 128x64/Arduino Nano

Hi

Ich bin neu im Thema I2C,
Und wollte nun mal ein Drehzahlmesser mit einem Namur Sensor probieren.
Problem nach Hochladen des Programms zeigt dass Display nichts/schwarz an.
Anfangs zeigte es noch Versorgungsspannung und Stop an.
Ich habe bereits mehrere Adressen sowie verschiedene Displays probiert.

Kennt sich damit jemand aus?
Danke im voraus

Mit freundlichen Grüßen bitdschungel

Hallo
dann mal her mit dem Sketch. Im IDE unter Bearbeiten - Für das Forum kopieren - den Sketch in den Forum Editor kopieren und abschicken

Hi,
danke für die schnelle Antwort
hier der Code.

/**************************************************************************
                          -Drehzahlmessgerät-

  Programm:         mit diesem Programm soll ein Drehzahlmessgerät mit 
                    einem Namursensor realisiert werden. Als Anzeige 
                    Einheit wird ein I²C-OLED-Dislpay verwendet
  Autor:            Leon Braun
  Erstellt:         21.12.2020
  letzte Änderung:  21.12.2020
  Hinweis:          -
   
**************************************************************************/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define namur 2

int IMPULSE;
int DREHZAHL;
unsigned long STARTTIME;
unsigned long STOPTIME;

void measure();
void calculate();
void show();

void setup() {
  pinMode(namur,INPUT);
  
  Serial.begin(57600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x7A);
  display.clearDisplay();

  IMPULSE=0;
  DREHZAHL=0;
}
  
void loop() {
 show();
  if(namur==HIGH){
    measure();
  }
  if(IMPULSE=!0){
    calculate();
  }
  display.clearDisplay();
}

void measure(){
  STARTTIME=millis();
   STOPTIME=STARTTIME+1000;
   while(STARTTIME<=STOPTIME){
    if(namur==HIGH){
      IMPULSE++;
    }
  }
}

void calculate(){
  DREHZAHL=IMPULSE*20;
  IMPULSE=0;
}

void show(){
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Drehzahl:");
  display.print(DREHZAHL);
  
}

Hoffe er ist nicht zu Amateurhaft.

bitdschungel:
hier der Code.
.....
Hoffe er ist nicht zu Amateurhaft.

Da der Sketch keine Kommentare enthält, ist der für externe schwer zu lesen.

Du solltest dein Projekt klein anfangen und dein Display es mal mit einem Beispiel aus der Library zum Laufen bringen. Wenn sfunktionier, da weiter machen.
Wenn nicht, nochmal nachfragen.

Danke für den tipp ich habe bereits ein zwei beispiel Programme draufgeladen doch immer dass selbe Problem wenn ich das Display an einen Arduino von einem Kollegen anschließe funktioniert es auch.

kann es sein dass der Reset-Pin ein HIGH Signal braucht um NICHT zu resetten (negative Logik)?

Zeig doch mal ein Schaltbild, wie du es aktuell an deinem Nano angeschlossen hast.
Eine Bleistiftzeichnung reicht. Diese abfotografieren und posten.

Hi,

Hier erstmal noch der überarbeitete Code (mit Kommentaren)

/**************************************************************************
                          -Drehzahlmessgerät-

  Programm:         mit diesem Programm soll ein Drehzahlmessgerät mit 
                    einem Namursensor realisiert werden. Als Anzeige 
                    Einheit wird ein I²C-OLED-Dislpay verwendet
  Autor:            Leon Braun
  Erstellt:         21.12.2020
  letzte Änderung:  21.12.2020
  Hinweis:          -
   
**************************************************************************/
#include <SPI.h>                                              //einbinden der Bibliotheken
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4                                          //display initialisierung???
Adafruit_SSD1306 display(OLED_RESET);

#define namur 2                                               //sensor Pin

int IMPULSE;                                                  //Variable in die die Impulse des Sensors in einer sec geschrieben Werden
int DREHZAHL;                                                 //Variable in der die errechnete Drehzahl aus der IMPULSE Variable gespeichert wird
unsigned long STARTTIME;                                      //Referenzzeit wann mit der Messung begonnen und aufgehört werden Soll
unsigned long STOPTIME;

void measure();                                               //initialisierung der Funktion fürs messen
void calculate();                                             //initialisierung der Funktion fürs errechnen der Drehzahl
void show();                                                  //initialisierung der Funktion fürs anzeigen auf dem Display

void setup() {
  pinMode(namur,INPUT);                                       //Sensorpin = Ausgang
  
  Serial.begin(57600);                                        //display "einstellungen?!?"
  display.begin(SSD1306_SWITCHCAPVCC, 0x7A);
  display.clearDisplay();

  IMPULSE=0;                                                  //Startert der Variablen festlegen
  DREHZAHL=0;
}
  
void loop() {
 show();                                                      //Anzeigefunkion wird aufgerufen
  if(namur==HIGH){                                            //sobald das erste HIGH Signal vom Sensor kommt soll gemessen werden
    measure();                                                //Messfunktion wird aufgerufen
  }
  if(IMPULSE=!0){                                             //sobald der Messwert nichtmehr 0 ist soll gerechnet werden
    calculate();                                              //Rechenfunktion wird aufgerufen
  }
  display.clearDisplay();                                     //Display wird einmal gecleart
}

void measure(){                                               //deklarierung der Messfunktion
  STARTTIME=millis();                                         //Zeitpunkt des Starts der Messung wird gespeichert
   STOPTIME=STARTTIME+1000;                                   //Zeitpunkt wann Messung enden soll wird errechnet(1sek später
   while(millis<=STOPTIME){                                   //solange kleiner als der Stopzeitpunkt ist sollen Impulse gemessen werden
    if(namur==HIGH){                                          //Wenn der Namur Sensor HIGH ist
      IMPULSE++;                                              //soll IMPULSE 1 Hochgezählt werden
    }
  }
}

void calculate(){                                             //deklarierung der Rechenfunktion
  DREHZAHL=IMPULSE*20;                                        //Errechung der Drehzahl in U/min aus 3*1/sek
  IMPULSE=0;                                                  //Messwert wird zurückgesetzt
}

void show(){                                                  //deklarierung der Anzeigefunktion
  display.setTextSize(1);                                     //Textgröße einstellen
  display.setTextColor(WHITE);                                //Textfarbe einstellen
  display.setCursor(0,0);                                     //Startzeile/-Spalte einstllen
  display.println("Drehzahl:");                               //Schreibe"TEXT" im Display
  display.print(DREHZAHL);                                    //Schreibe errechnete Drehzahl ins Display
}

ich hatte vorhin schon meine Schaltung fotografiert und wollte alles Hochladen habe auch extra den Filesize so runtergeschraubt dass ich unter 2Mb war (weit drunter) aber es kommt die ganze zeit ne Fehlermeldung.

ich probiers heut Nachmittag nochmal von daheim aus.

MFG bitdschungel

bitdschungel:
Hi,

Hier erstmal noch der überarbeitete Code (mit Kommentaren)

[code]

/**************************************************************************
                         -Drehzahlmessgerät-

Programm:         mit diesem Programm soll ein Drehzahlmessgerät mit
                   einem Namursensor realisiert werden. Als Anzeige
                   Einheit wird ein I²C-OLED-Dislpay verwendet
 Autor:            Leon Braun
 Erstellt:         21.12.2020
 letzte Änderung:  21.12.2020
 Hinweis:          -
 
**************************************************************************/
#include <SPI.h>                                              //einbinden der Bibliotheken
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4                                          //display initialisierung???
Adafruit_SSD1306 display(OLED_RESET);

#define namur 2                                               //sensor Pin

int IMPULSE;                                                  //Variable in die die Impulse des Sensors in einer sec geschrieben Werden
int DREHZAHL;                                                 //Variable in der die errechnete Drehzahl aus der IMPULSE Variable gespeichert wird
unsigned long STARTTIME;                                      //Referenzzeit wann mit der Messung begonnen und aufgehört werden Soll
unsigned long STOPTIME;

void measure();                                               //initialisierung der Funktion fürs messen
void calculate();                                             //initialisierung der Funktion fürs errechnen der Drehzahl
void show();                                                  //initialisierung der Funktion fürs anzeigen auf dem Display

void setup() {
 pinMode(namur,INPUT);                                       //Sensorpin = Ausgang
 
 Serial.begin(57600);                                        //display “einstellungen?!?”
 display.begin(SSD1306_SWITCHCAPVCC, 0x7A);
 display.clearDisplay();

IMPULSE=0;                                                  //Startert der Variablen festlegen
 DREHZAHL=0;
}
 
void loop() {
show();                                                      //Anzeigefunkion wird aufgerufen
 if(namur==HIGH){                                            //sobald das erste HIGH Signal vom Sensor kommt soll gemessen werden
   measure();                                                //Messfunktion wird aufgerufen
 }
 if(IMPULSE=!0){                                             //sobald der Messwert nichtmehr 0 ist soll gerechnet werden
   calculate();                                              //Rechenfunktion wird aufgerufen
 }
 display.clearDisplay();                                     //Display wird einmal gecleart
}

void measure(){                                               //deklarierung der Messfunktion
 STARTTIME=millis();                                         //Zeitpunkt des Starts der Messung wird gespeichert
  STOPTIME=STARTTIME+1000;                                   //Zeitpunkt wann Messung enden soll wird errechnet(1sek später
  while(millis<=STOPTIME){                                   //solange kleiner als der Stopzeitpunkt ist sollen Impulse gemessen werden
   if(namur==HIGH){                                          //Wenn der Namur Sensor HIGH ist
     IMPULSE++;                                              //soll IMPULSE 1 Hochgezählt werden
   }
 }
}

void calculate(){                                             //deklarierung der Rechenfunktion
 DREHZAHL=IMPULSE20;                                        //Errechung der Drehzahl in U/min aus 31/sek
 IMPULSE=0;                                                  //Messwert wird zurückgesetzt
}

void show(){                                                  //deklarierung der Anzeigefunktion
 display.setTextSize(1);                                     //Textgröße einstellen
 display.setTextColor(WHITE);                                //Textfarbe einstellen
 display.setCursor(0,0);                                     //Startzeile/-Spalte einstllen
 display.println(“Drehzahl:”);                               //Schreibe"TEXT" im Display
 display.print(DREHZAHL);                                    //Schreibe errechnete Drehzahl ins Display
}


[/code]

ich hatte vorhin schon meine Schaltung fotografiert und wollte alles Hochladen habe auch extra den Filesize so runtergeschraubt dass ich unter 2Mb war (weit drunter) aber es kommt die ganze zeit ne Fehlermeldung.

ich probiers heut Nachmittag nochmal von daheim aus.

MFG bitdschungel

Das Bild einfach mit MS-Paint in der Größe “eindampfen” :slight_smile:

Hat zwar nix mit der Displayanzeige zu tun, aber deine Pins für den Sensor musst du auch einlesen (digitalRead) und an die Variable übergeben. Ohne dies kannst du die Daten nicht nutzen.

  1. Adresse 0x7A? Bist Du Dir da sicher? Ist eher untypisch...
  2. fehlt in Deiner show()-Methode das hier: display.display() (hierbei wird der Buffer erst auf das Display geladen und damit angezeigt)