Sorry, I know the issue im having probably lies within one of the most basic beginner solutions, using mills (), but Ive exhausted all possible resources ive found (and have used 3-4 different, but comparable methods), and I still cant get this program working.
At this point, the error Im getting is an 'invalid use of non static member function, u8g2.sendBuffer()', which from what Ive gathered is a pretty general error regarding user/library defined functions and syntax, but Ive tried to use the library reference manual's suggested setup, and a modifed setup using millis(), and havent had any luck with either.
So, what Im trying to do is use a temperature/humidity sensor to display to an OLED screen. The screen library setup is here, and the reference manual itself can be found in the tabs on the right: setup_tutorial · olikraus/u8g2 Wiki · GitHub
The most successful code either used both delays or eliminated the screen's delay, but made the screen blink intermittently (both confusing the sensor delay) which is here:
// DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.
// Depends on the following Arduino libraries:
// - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define DHTPIN 2 // Pin which is connected to the DHT sensor.
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// See guide for details on sensor wiring and usage:
// https://learn.adafruit.com/dht/overview
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
void setup() {
u8g2.begin();
u8g2.enableUTF8Print();
dht.begin();
u8g2.println("DHTxx Unified Sensor Example");
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
u8g2.println("------------------------------------");
u8g2.println("Temperature");
u8g2.print ("Sensor: "); u8g2.println(sensor.name);
u8g2.print ("Driver Ver: "); u8g2.println(sensor.version);
u8g2.print ("Unique ID: "); u8g2.println(sensor.sensor_id);
u8g2.print ("Max Value: "); u8g2.print(sensor.max_value); u8g2.println(" *C");
u8g2.print ("Min Value: "); u8g2.print(sensor.min_value); u8g2.println(" *C");
u8g2.print ("Resolution: "); u8g2.print(sensor.resolution); u8g2.println(" *C");
u8g2.println("------------------------------------");
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
u8g2.println("------------------------------------");
u8g2.println("Humidity");
u8g2.print ("Sensor: "); u8g2.println(sensor.name);
u8g2.print ("Driver Ver: "); u8g2.println(sensor.version);
u8g2.print ("Unique ID: "); u8g2.println(sensor.sensor_id);
u8g2.print ("Max Value: "); u8g2.print(sensor.max_value); u8g2.println("%");
u8g2.print ("Min Value: "); u8g2.print(sensor.min_value); u8g2.println("%");
u8g2.print ("Resolution: "); u8g2.print(sensor.resolution); u8g2.println("%");
u8g2.println("------------------------------------");
// Set delay between sensor readings based on sensor details.
delayMS = sensor.min_delay / 1000;
}
void loop() {
// Delay between measurements.
delay(delayMS);
u8g2.clearBuffer();
u8g2.clearDisplay();
u8g2.home();
u8g2.setFont(u8g2_font_u8glib_4_hr);
u8g2.setCursor(0,15);
{// Get temperature event and print its value.
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
u8g2.println("Error reading temperature!");
}
else {
u8g2.print("Temperature: ");
u8g2.print(event.temperature);
u8g2.println(" *C");
}
// Get humidity event and print its value.
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
u8g2.println("Error reading humidity!");
}
else {
u8g2.print("Humidity: ");
u8g2.print(event.relative_humidity);
u8g2.println("%");
}
}
u8g2.sendBuffer(); // transfer internal memory to the display
}
But when I try to use the millis() check, i get an 'invalid use of non-static member function' on the line 'u8g2.sendBuffer':
// DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.
// Depends on the following Arduino libraries:
// - Adafruit Unified Sensor Library: https://github.com/adafruit/Adafruit_Sensor
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define DHTPIN 2 // Pin which is connected to the DHT sensor.
// Uncomment the type of sensor in use:
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// See guide for details on sensor wiring and usage:
// https://learn.adafruit.com/dht/overview
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
DHT_Unified dht(DHTPIN, DHTTYPE);
unsigned long delayMS;
// constants won't change:
const long interval = 1000; // interval at which to buffer (milliseconds)
bool Buffer=false;
unsigned long currentMillis = millis();
unsigned long previousMillis = millis();
void setup() {
u8g2.begin();
dht.begin();
u8g2.enableUTF8Print();
u8g2.println("DHTxx Unified Sensor Example");
// Print temperature sensor details.
sensor_t sensor;
dht.temperature().getSensor(&sensor);
u8g2.println("------------------------------------");
u8g2.println("Temperature");
u8g2.print ("Sensor: "); u8g2.println(sensor.name);
u8g2.print ("Driver Ver: "); u8g2.println(sensor.version);
u8g2.print ("Unique ID: "); u8g2.println(sensor.sensor_id);
u8g2.print ("Max Value: "); u8g2.print(sensor.max_value); u8g2.println(" *C");
u8g2.print ("Min Value: "); u8g2.print(sensor.min_value); u8g2.println(" *C");
u8g2.print ("Resolution: "); u8g2.print(sensor.resolution); u8g2.println(" *C");
u8g2.println("------------------------------------");
// Print humidity sensor details.
dht.humidity().getSensor(&sensor);
u8g2.println("------------------------------------");
u8g2.println("Humidity");
u8g2.print ("Sensor: "); u8g2.println(sensor.name);
u8g2.print ("Driver Ver: "); u8g2.println(sensor.version);
u8g2.print ("Unique ID: "); u8g2.println(sensor.sensor_id);
u8g2.print ("Max Value: "); u8g2.print(sensor.max_value); u8g2.println("%");
u8g2.print ("Min Value: "); u8g2.print(sensor.min_value); u8g2.println("%");
u8g2.print ("Resolution: "); u8g2.print(sensor.resolution); u8g2.println("%");
u8g2.println("------------------------------------");
// Set delay between sensor readings based on sensor details.
delayMS = sensor.min_delay / 1000;
}
void loop(){
u8g2.clearBuffer();
u8g2.home();
u8g2.setFont(u8g2_font_u8glib_4_hr);
u8g2.setCursor(0,15);
if (currentMillis - previousMillis >= interval){
// save the last time
previousMillis = currentMillis;
delay(delayMS);
// Get temperature event and print its value.
sensors_event_t event;
dht.temperature().getEvent(&event);
if(isnan(event.temperature)) {
u8g2.println("Error reading temperature!");
}
else {
u8g2.print("Temperature: ");
u8g2.print(event.temperature);
u8g2.println(" *C");
}
// Get humidity event and print its value.
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
u8g2.println("Error reading humidity!");
}
else {
u8g2.print("Humidity: ");
u8g2.print(event.relative_humidity);
u8g2.println("%");
}
}
u8g2.sendBuffer;
}