Anfänger frage ssd1306

Hi,
ich möchte meinen Nano, mit dem SSD1306 i²c verbinden.

Das Display laüft auch schon mit der Adafruit Lib.

Das problem welches ich nun habe ich möchte eine Single line zeichnen, aber das will nicht wirklich funktionieren und ich weiß nicht was ic falls mache.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);


void setup()   {

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x64)

  // draw a single pixel
  display.clearDisplay();
  // write 2 lines below, size = 1
    display.setTextSize(1);
    display.setCursor(0,8*4);
    display.print("Size 1 text");
    display.setCursor(0,8*5);
    display.print("Size 1 text again");
    display.display();

    delay(2000);


}


void loop() {

}

aber leider zeigt das display nichts an.

wie gesagt mit einem Example läuft das display

gruß

Bitte setze Deinen Sketch in Codetags (oben links </> im Foreneditor oder [code] davor und [/code] dahinter - ohne die *).
Das kannst Du auch noch nachträglich durch Editieren tun. Bitte mach das, der Sketch ist besser zu lesen, besonders auf mobilen Geräten.

Wo zeichnest Du eine Linie in dem Code?

Gruß Tommy

Hi,

ich dachte ich Zeichne die Linie in diesem Abschnitt, wie gesagt absoluter Neuling

  // write 2 lines below, size = 1
    display.setTextSize(1);
    display.setCursor(0,8*4);
    display.print("Size 1 text");
    display.setCursor(0,8*5);
    display.print("Size 1 text again");
    display.display();

Da steht, dass er 2 Zeilen Text schreibt. Tut er das?

Dann schau mal in Deine Lib, wo da irgendwas von drawLine oder sowas Ähnliches steht. Wahrscheinlich ist in den Beispielen auch was drin.

Gruß Tommy

Hi,

nein das tut er nicht.

wenn ich in den Examble reinschaue,

ist das für Lines

voipsetup

// draw many lines
  testdrawline();
  display.display();
  delay(2000);
  display.clearDisplay();

und hier dercode was er macht

void testdrawline() {  
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, 0, i, display.height()-1, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(0, 0, display.width()-1, i, WHITE);
    display.display();
    delay(1);
  }
  delay(250);
  
  display.clearDisplay();
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, display.height()-1, i, 0, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=display.height()-1; i>=0; i-=4) {
    display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
    display.display();
    delay(1);
  }
  delay(250);
  
  display.clearDisplay();
  for (int16_t i=display.width()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=display.height()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
    display.display();
    delay(1);
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(display.width()-1, 0, 0, i, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE); 
    display.display();
    delay(1);
  }
  delay(250);

aber bei diesem Code schreibt er ja sehr viele Lines nebeneinander diesen habe ich bis hierhin schonmal gekürzt.

void testdrawline() {  
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, 0, i, display.height()-1, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(0, 0, display.width()-1, i, WHITE);
    display.display();
    delay(1);
  }
  delay(250);

ich muss eigentlich nur noch hinbekommen das er nur eine line zeichnet

Suche in den Ada....h nach drawLine. Dort steht dann, wie das benutzt werden muss.

Gruß Tommy

Danke dir, aber ich stehe da echt auf dem schlauch und komme da nicht weiter

ich habe mal folgenden Code geschrieben,

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DS18B20.h>

//DS18B20 Arduino PIN
const byte ONEWIRE_PIN = 2;

//DS18B20 Wieviele Sensoren vorhanden sind
const byte SENSORS_NUM = 2;

// Sensors address
// EXAMPLE:
// const byte sensorsAddress[SENSORS_NUM][8] PROGMEM = {
//     0x28, 0xB1, 0x6D, 0xA1, 0x3, 0x0, 0x0, 0x11,
//     0x28, 0x87, 0x6A, 0xA1, 0x3, 0x0, 0x0, 0x1F
// };

const byte sensorsAddress[SENSORS_NUM][8] PROGMEM = {
    0X28, 0xB1
};

// 1-Wire object
OneWire onewire(ONEWIRE_PIN);
// DS18B20 sensors object
DS18B20 sensors(&onewire);

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

//#define LOGO16_GLCD_HEIGHT 16
//#define LOGO16_GLCD_WIDTH  16
//static const unsigned char PROGMEM logo16_glcd_bmp[] =
//{ B00000000, B11000000,
//  B00000001, B11000000,
//  B00000001, B11000000,
//  B00000011, B11100000,
//  B11110011, B11100000,
//  B11111110, B11111000,
//  B01111110, B11111111,
//  B00110011, B10011111,
//  B00011111, B11111100,
//  B00001101, B01110000,
//  B00011011, B10100000,
//  B00111111, B11100000,
//  B00111111, B11110000,
//  B01111100, B11110000,
//  B01110000, B01110000,
//  B00000000, B00110000 };


#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//int i=0;
//für Timer nutzung
unsigned long startTime = millis();
unsigned long interval  = 2000; //Ausloesintervall in millis 1 Tag
float temperaturein = 0.0;
float temperatureout = 1.1;

void setup()   {
  while(!Serial);
  Serial.begin(9600);

  // DS18B20 sensors setup
  sensors.begin();

  // The first requests to all sensors for measurement
  sensors.request();

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3C (for the 128x32)
  // init done

  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.
  display.display();
  delay(2000);

  // Clear the buffer.
  display.clearDisplay();



}


  void ausgabe(){

  display.setTextSize(0.5);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("in:");
  display.print(temperaturein);
  display.print("C");
  //display.println(i);
  display.display();

  //i++;
  }

void loop() {
  // If the sesor measurement is ready, prnt the results
  if (sensors.available())
  {
    temperaturein = sensors.readTemperature(FA(sensorsAddress[0]));
    temperatureout = sensors.readTemperature(FA(sensorsAddress[1]));
    //for (byte i=0; i<SENSORS_NUM; i++)
    //{
      // Reads the temperature from sensor
      // *** Indexed address from Flash memory
    //  float temperature = sensors.readTemperature(FA(sensorsAddress[i]));

      // Prints the temperature on Serial Monitor
      //Serial.print(F("#"));
      //Serial.print(i);
      //Serial.print(F(": "));
      //Serial.print(temperature);
      //Serial.println(F(" 'C"));
  //  }

    // Another requests to all sensors for measurement
    sensors.request();
  }
  // text display tests

  if ( millis() - startTime >= interval)
            {
              startTime = millis();
                display.clearDisplay();
                ausgabe();
            }


}

der code sagt eigentlich nur aus bitte Zeige mir die eingangstemp eines der BS18b20 sensoren dieser ist aber gerade über eine int funktion als starrer wert da der sensor noch nicht angekommen ist. Ich wollte eigentlich nur ein Rahmen um das display anzeigen lassen. Und da stehe ich auf dem schlauch,

Ich denke ich werde heute erst mal pause machen habe schon ein dicken Kopf

Vielleiht sehe ich deswegen nicht die lösung

Es bringt überhaupt nichts, allen möglichen Code zusammen zu kopieren, ohne zu verstehen, was man macht.

Teile die Sache auf:

  1. Aufgabe: Gib einen Text auf dem Display aus.
  2. Aufgabe: Lies die Temperatur aus und gib sie auf dem seriellen Monitor aus.

Wirf aus diesen Sketchs alles raus, was Du nicht brauchst.
Wenn Du dann die beiden Sketche verstanden hast, dann verbinde sie.

Gruß Tommy

ludino:
Ich denke ich werde heute erst mal pause machen habe schon ein dicken Kopf

Pause ist eigentlich immer angesagt. Kleine „Störungen“ erhöhen die Aufmerksamkeit. Wenn man ab und zu mal für ein paar Minuten aus dem Fenster und in die Wolken guckt, kann man seine Konzentrationsfähigkeit länger auf hohem Niveau halten.

Wenn ich das richtig verstehe, zeichnet man eine Linie mit

display.drawLine(<x-start>, <y-start>, <x-ende>, <y-ende>, FARBE);

Um einen Rahmen zu zeichnen brauchst Du demnach ungefähr sowas:

display.drawLine(0, 0, display.width()-1, 0, WHITE); // waagerechte Linie oben
display.drawLine(0, display.height()-1, display.width()-1, display.height()-1 , WHITE); // waagerechte Linie unten
display.drawLine(0, 0, 0, display.height()-1, WHITE); // senkrechte Linie links
display.drawLine(display.width()-1, 0, display.width()-1, display.height()-1>, WHITE); // senkrechte Linie rechts

HTH

Gregor

PS: ... und am Ende noch ein display.display()

Jop deswegen hatte ich ja auch erst wegen dem Display gefragt das andere ist schon Step Ende.......

Tommy56:
Es bringt überhaupt nichts, allen möglichen Code zusammen zu kopieren, ohne zu verstehen, was man macht.

Teile die Sache auf:

  1. Aufgabe: Gib einen Text auf dem Display aus.
  2. Aufgabe: Lies die Temperatur aus und gib sie auf dem seriellen Monitor aus.

Gregor danke ich versuche es mal einzubinden.

Du hattest nach einer Linie auf dem Display gefragt und Antworten bekommen, nicht nach einer Werteausgabe.
Deshalb die Trennung.

Gruß Tommy

Tommy,

da hast du recht, und ich bin auch vollkommen dankbar das Ihr, Du mir hilft, Ich wollte damit nur klar machen das ich es aufteile und klar hätte ich nach einen Rahmen fürs display oder für die werteausgabe fragen können.

Aber ich will es ja verstehen so wie du es oben schon geschrieben hast.

Also ich wollte oder will Dich da nicht angreifen, wahrscheinlich ist das Programm was ich schreiben möchte sogal von euch in 5 min runter getippt, ich beiße mir nun schon die Zähne seit 3 Wochen aus. Und das Programm was ich zusammen getippt habe "Step Ende" ist die arbeit der 3 Wochen.

Also ich bin schon Stolz auf mich das was ich da geleistet habe, auch wenn es absulter Schrott ist Wohlmöglich.

Jeder Anfang ist schwer.

Gruß

Luigi

Dann schaue aber auch etwas in die Grundlagen, um zu verstehen, was Dir geantwortet wird.
Hier gibt es eine gute Reference in deutsch. Beitrag #46 ist der derzeit aktuellste.

Gruß Tommy