Hi,

Ik ben voor mijn Reisreferentie bezich met de software die een aantal zaken op een Nokia display moeten plaatsen.
Ik heb voor de Nokia 5110 gekozen i.v.m. het lage stroomverbruik en dat je hem ook kan aflezen zonderdat de verlichting aan staat.

Dit is wat ik in eerste instantie wil weergeven, en ik probeer zoveel mogelijk op één scherm weer te geven.
Temperatuur Oven
Temperatuur kastje
Li-Ion spanning
Opgenomen vermogen uit batterij
Uitgangsstroom 10V aansluiting (ter indicatie, geen precisie meting)
Uitgansspanning 10V anasluiting (ter indicatie, geen precisie meting)
Laadstroom
Lucht vochtigheid

Of dat allemaal gaat passen, we zullen zien :-)

De eerste stappen met de software heb ik al gezet, De Klok module krijg ik op het display.
De INA219 stroom spanning sensor krijg ik ook de waarden uit.
En de HTU21D verteld ook wat hij van de temperatuur vind en de lucht vochtigheid graad.

Het vreemde is nu dat de HTU21D niet wil samenwerken met de INA219.
Ik heb natuurlijk een I2C scan gedaan, en de drie sensoren waar ik nu mee bezich ben hebben ieder een ander adres.
Zo gouw ik de INA219 er bij prik, gaat het mis met de gemeten waarden die op het display worden weergegeven van de HTU21D.

En dan nu de vraag! :-)
Omdat ik de tijd aan de software niet uit de hand wil laten lopen, heb ik een BME280 sensor genomen en de proef sketch van Adafruit gedraaid.
Ik begrijp niet hoe de waarden uit de sensor worden gehaald en het plaatje hieronder maakt het misschien wat duidelijker wat ik bedoel.

Je kan hier zien dat er drie waarden op een rij staan, voor mij gaat het eigenlijk alleen om de waarden die vallen onder het kopje "Best".
Dit stukje uit de code zou de temperatuur in de serial monitor plaatsen.

void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

Als ik nu dit doe om de temperatuur in beeld te brengen, gaat het dan goed?
Ik denk dan dat er drie maal data in de u8g2.print regel wordt gepropt,
hoe ben ik er zeker van dat ik alleen de waarde op mijn display krijg met de hoogste resolutie, Best dus.

    u8g2.setPrintPos(7, 48); 
    u8g2.print(bme.readTemperature());

http://www.bramcam.nl/NA/ReisRef/BME280-01.png

En dit is de testcode van Adafruit voor de BME280

/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BME280 Breakout
  ----> http://www.adafruit.com/products/2650

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface. The device's I2C address is either 0x76 or 0x77.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>


#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

unsigned long delayTime;

void setup() {
    Serial.begin(9600);
    Serial.println(F("BME280 test"));

    if (! bme.begin(&Wire)) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
    }

    Serial.println("-- Default Test --");
    Serial.println("normal mode, 16x oversampling for all, filter off,");
    Serial.println("0.5ms standby period");
    delayTime = 5000;
    
    
    // For more details on the following scenarious, see chapter
    // 3.5 "Recommended modes of operation" in the datasheet
    
/*
    // weather monitoring
    Serial.println("-- Weather Station Scenario --");
    Serial.println("forced mode, 1x temperature / 1x humidity / 1x pressure oversampling,");
    Serial.println("filter off");
    bme.setSampling(Adafruit_BME280::MODE_FORCED,
                    Adafruit_BME280::SAMPLING_X1, // temperature
                    Adafruit_BME280::SAMPLING_X1, // pressure
                    Adafruit_BME280::SAMPLING_X1, // humidity
                    Adafruit_BME280::FILTER_OFF   );
                      
    // suggested rate is 1/60Hz (1m)
    delayTime = 60000; // in milliseconds
*/

/*    
    // humidity sensing
    Serial.println("-- Humidity Sensing Scenario --");
    Serial.println("forced mode, 1x temperature / 1x humidity / 0x pressure oversampling");
    Serial.println("= pressure off, filter off");
    bme.setSampling(Adafruit_BME280::MODE_FORCED,
                    Adafruit_BME280::SAMPLING_X1,   // temperature
                    Adafruit_BME280::SAMPLING_NONE, // pressure
                    Adafruit_BME280::SAMPLING_X1,   // humidity
                    Adafruit_BME280::FILTER_OFF );
                      
    // suggested rate is 1Hz (1s)
    delayTime = 1000;  // in milliseconds
*/

/*    
    // indoor navigation
    Serial.println("-- Indoor Navigation Scenario --");
    Serial.println("normal mode, 16x pressure / 2x temperature / 1x humidity oversampling,");
    Serial.println("0.5ms standby period, filter 16x");
    bme.setSampling(Adafruit_BME280::MODE_NORMAL,
                    Adafruit_BME280::SAMPLING_X2,  // temperature
                    Adafruit_BME280::SAMPLING_X16, // pressure
                    Adafruit_BME280::SAMPLING_X1,  // humidity
                    Adafruit_BME280::FILTER_X16,
                    Adafruit_BME280::STANDBY_MS_0_5 );
    
    // suggested rate is 25Hz
    // 1 + (2 * T_ovs) + (2 * P_ovs + 0.5) + (2 * H_ovs + 0.5)
    // T_ovs = 2
    // P_ovs = 16
    // H_ovs = 1
    // = 40ms (25Hz)
    // with standby time that should really be 24.16913... Hz
    delayTime = 41;
    */
    
    /*
    // gaming
    Serial.println("-- Gaming Scenario --");
    Serial.println("normal mode, 4x pressure / 1x temperature / 0x humidity oversampling,");
    Serial.println("= humidity off, 0.5ms standby period, filter 16x");
    bme.setSampling(Adafruit_BME280::MODE_NORMAL,
                    Adafruit_BME280::SAMPLING_X1,   // temperature
                    Adafruit_BME280::SAMPLING_X4,   // pressure
                    Adafruit_BME280::SAMPLING_NONE, // humidity
                    Adafruit_BME280::FILTER_X16,
                    Adafruit_BME280::STANDBY_MS_0_5 );
                      
    // Suggested rate is 83Hz
    // 1 + (2 * T_ovs) + (2 * P_ovs + 0.5)
    // T_ovs = 1
    // P_ovs = 4
    // = 11.5ms + 0.5ms standby
    delayTime = 12;
*/

    Serial.println();
}


void loop() {
    // Only needed in forced mode! In normal mode, you can remove the next line.
    bme.takeForcedMeasurement(); // has no effect in normal mode
    
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}

Iemand die mij wat meer inzicht kan leveren hierover?

Dank,
Bram

De testcode die je opgeeft toont bij mij het volgende:

Waarschijnlijk gebruik je een andere sketch voor uw output in de seriele monitor.
Het lijkt mij iets om de oversampling verschillen aan te tonen.

Hi Pertinax,

Klopt, was ik ook achter gekomen, stond nog twee stukjes code van een andere library in het stukje wat ik aan het testen was.
My Bad :-)

Ondertussen is het mij gelukt om de drie sensor printjes uit te lezen en de waarden hiervan op een display weer te geven.
De bovenste rij is de INA219 sensor, die trouwens een vrij groffe mW afwijking heeft als ik de 16V 1Ampere configuratie gebruik.
Een na laatste regel is de tijd, lijkt mij wel duidelijk en de laatste regel is de Humidity, Temperatuur en de laatste waarde is de luchtdruk.

De drie sensoren werken nu in ieder geval samen in de code die ik vanmiddag heb gefreubeld.
Ook nog een zeer lastige fout gemaakt om te dedecteren, bij een opdracht om een waarde in beeld te brengen bleef de software hangen maar compileerde wel zonder errors.
De code om de beeldschermbuffer weg te schrijven stond helemaal onderaan,
die had ik natuurlijk steeds een stukje hoger kunen zetten om te zien waar het fout ging, aldoende leert men :-)

Hoe, wie, wat, en waar wat komt te staan op het display en ook het font type, dat wordt later nog bepaald,
maar hier is te zien dat alle drie de sensoren nu samenwerken.

http://www.bramcam.nl/NA/ReisRef/BME280-02.png

Van veel van de hier aangegeven waarden hoeven maar af en toe te worden ververst, dus die moet ik nog gaan "timen"
De klok komt misschien niet eens in beeld, de klok moduul is hoofdzakelijk bedoeld voor de tijd van de in het logbestand op te nemen waarden.

Zeg dat als de Reisreferentie op transport is, dat ik kan registreren wat de temperatuur is geweest zeg iedere 15 minuten en de b.v. luchtvochtigheidsgraad.
Dat schrijf ik dan weg naar een i2c EEPROM of een micro SD kaart, als mij dat natuurlijk allemaal lukt...

Voor nu dus blij dat dit deel al samenwerkt.

Groet,
Bram