Advertisement
Makerino

RTC Anzeige Oled Display

Mar 27th, 2019
995
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.17 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SSD1306.h>
  5. #include <Bme280BoschWrapper.h>
  6.  
  7. #define DS3231_ADDRESSE 0x68
  8. #define OLED_RESET 4
  9. Adafruit_SSD1306 display(OLED_RESET);
  10. Bme280BoschWrapper bme280(true);
  11.  
  12. int offsettemp = 0;
  13. int offsethum = 0;
  14. int offsetpress = 0;
  15. int taster = 3;
  16. //int counter = 0;
  17.  
  18. void setup()   {  
  19.   Wire.begin();
  20.   Serial.begin(9600);
  21.   Serial.println("BME280 Bosch test");
  22.  
  23.   while(!bme280.beginI2C(0x76))
  24.   {
  25.     Serial.println("Cannot find sensor.");
  26.     delay(1000);
  27.   }
  28.  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  //////Display mit der Adresse 0x3C initialisieren
  29.  display.clearDisplay();
  30.  
  31. pinMode(taster, INPUT);
  32.  
  33. }
  34.  
  35. void loop() {
  36.   int val = digitalRead(taster);
  37.   if(val == HIGH){
  38.   disptemp();
  39.   }
  40.   if(val==LOW){
  41.   dispzeit();
  42.   }  
  43. }
  44.  
  45.     byte decToBcd(byte val) {
  46.     // Dezimal Zahl zu binary coded decimal (BCD) umwandeln
  47.       return((val/10*16) + (val%10));
  48.     }
  49.    
  50.     byte bcdToDec(byte val) {
  51.     // BCD (binary coded decimal) in Dezimal Zahl umwandeln
  52.       return((val/16*10) + (val%16));
  53.     }
  54.  
  55. void leseDS3231zeit(byte *sekunde, byte *minute,byte *stunde, byte *wochentag, byte *tag, byte *monat, byte *jahr) {
  56.       Wire.beginTransmission(DS3231_ADDRESSE);
  57.       Wire.write(0); // DS3231 Register zu 00h
  58.       Wire.endTransmission();
  59.       Wire.requestFrom(DS3231_ADDRESSE, 7); // 7 Byte Daten vom DS3231 holen
  60.       *sekunde = bcdToDec(Wire.read() & 0x7f);
  61.       *minute = bcdToDec(Wire.read());
  62.       *stunde = bcdToDec(Wire.read() & 0x3f);
  63.       *wochentag = bcdToDec(Wire.read());
  64.       *tag = bcdToDec(Wire.read());
  65.       *monat = bcdToDec(Wire.read());
  66.       *jahr = bcdToDec(Wire.read());
  67.     }
  68.  
  69.  
  70.  
  71. void disptemp(){
  72.  
  73.   bool ok = bme280.measure();
  74.  
  75.  display.setTextColor(WHITE);
  76.  display.setTextSize(1);
  77.  
  78.   display.setCursor(0,1);
  79.   display.println("Temperatur:");
  80.   display.setCursor(75,1);
  81.   display.println((bme280.getTemperature() / 100.0) - offsettemp);
  82.   display.setCursor(110,1);
  83.   display.println("C");
  84.  
  85.   display.setCursor(0,10);
  86.   display.println("Luftfeuchte:");
  87.   display.setCursor(75,10);
  88.   display.println((bme280.getHumidity() / 1024.0) - offsethum);
  89.   display.setCursor(110,10);
  90.   display.println("%");
  91.  
  92.   display.setCursor(0,20);
  93.   display.println("Druck:");
  94.   display.setCursor(75,20);
  95.   display.println((bme280.getPressure()/100) - offsetpress);
  96.   display.setCursor(110,20);
  97.   display.println("hPa");
  98.  
  99.   display.display();
  100.   display.clearDisplay();
  101. }
  102.  
  103. void dispzeit(){
  104.  
  105. byte sekunde, minute, stunde, wochentag, tag, monat, jahr;
  106. leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr);  
  107.  
  108.  display.setTextColor(WHITE);
  109.  display.setTextSize(1);
  110.  
  111.  ////////////////////////////////////Datum////////////////////////////////////
  112.  
  113.   display.setCursor(0,1);
  114.   display.println("Datum:");
  115.     if (tag < 10) {
  116.     display.setCursor(38,1);
  117.     display.println("0");
  118.     display.setCursor(45,1);
  119.     display.println(tag);
  120.     }
  121.     else{
  122.     display.setCursor(40,1);
  123.     display.println(tag);
  124.     }
  125.   display.setCursor(55,1);
  126.   display.println(".");
  127.       if (monat < 10) {
  128.     display.setCursor(63,1);
  129.     display.println("0");
  130.     display.setCursor(70,1);
  131.     display.println(monat);
  132.     }
  133.     else{
  134.     display.setCursor(70,1);
  135.     display.println(monat);
  136.     }
  137.   display.setCursor(80,1);
  138.   display.println(".");
  139.   display.setCursor(90,1);
  140.   display.println(jahr);
  141.  
  142. /////////////////////////////////////Uhrzeit////////////////////////////////////////
  143.  
  144.   display.setCursor(0,12);
  145.   display.println("Zeit:");
  146.  
  147.     display.setCursor(40,12);
  148.     display.println(stunde);
  149.    
  150.   display.setCursor(55,12);
  151.   display.println(":");
  152.  
  153.     if (minute < 10) {
  154.     display.setCursor(63,12);
  155.     display.println("0");
  156.     display.setCursor(70,12);
  157.     display.println(minute);
  158.     }
  159.     else{
  160.     display.setCursor(65,12);
  161.     display.println(minute);
  162.     }
  163.    
  164.   display.setCursor(80,12);
  165.   display.println(":");
  166.  
  167.       if (sekunde < 10) {
  168.     display.setCursor(88,12);
  169.     display.println("0");
  170.     display.setCursor(95,12);
  171.     display.println(sekunde);
  172.     }
  173.     else{
  174.     display.setCursor(90,12);
  175.     display.println(sekunde);
  176.     }
  177.    
  178.   display.setCursor(35,24);
  179.   display.println("maker.ino");
  180.  
  181.   display.display();
  182.   display.clearDisplay();
  183.  }
  184.  
  185. void zeigeZeit(){
  186.      
  187.     byte sekunde, minute, stunde, wochentag, tag, monat, jahr;
  188.       leseDS3231zeit(&sekunde, &minute, &stunde, &wochentag, &tag, &monat, &jahr);   // Daten vom DS3231 holen
  189.       if (tag < 10) { Serial.print("0");}
  190.       Serial.print(tag); // ausgeben T.M.J H:M:S
  191.       Serial.print(".");
  192.       if (monat < 10) { Serial.print("0");}
  193.       Serial.print(monat);
  194.       Serial.print(".20");
  195.       Serial.print(jahr);
  196.       Serial.print(" ");
  197.       if (stunde < 10) { Serial.print("0");}
  198.       Serial.print(stunde, DEC); // byte in Dezimal zur Ausgabe
  199.       Serial.print(":");
  200.       if (minute < 10) { Serial.print("0");}
  201.       Serial.print(minute, DEC);
  202.       Serial.print(":");
  203.       if (sekunde < 10) { Serial.print("0"); }
  204.       Serial.println(sekunde, DEC);
  205.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement