You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Arduino IDE version (found in Arduino -> About Arduino menu): IDE 2.3.3
List the steps to reproduce the problem below (if possible attach a sketch or
copy the sketch code in too): Adafruit_SH110X.h does not work with Adafruit_BME280 and has isues with serial.print
I'm changing disply driver from Adafruit_SSD1306.h to Adafruit_SH110X.h
My code (which is still a wrok in progress) workes just fine with Adafruit_SSD1306.h but changing to Adafruit_SH110X.h I run into multiple problems.
In Adafruit_BME280 there is this sensor conection cheek.
bool status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or sencor I2C addres!"); //If this text to long Adafruit_SH110X.h dies
while (1);
}
If the Serial.println text is short the splash screen from Adafruit_SH110X.h flickers and the program continues but If the Serial.println text is to long the program gets stuck on the splach screen even thoug it's not printing that line.
When trying to read the values from the BME my program chrashes and I get a glitchy screen.
c_vac = (bme.readPressure() / 1000.0F); //If I use this Adafruit_SH110X.h dies
temp = bme.readTemperature(); //If I use this Adafruit_SH110X.h dies
Here's my code:
Sorry for the mess work in progress
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
//#include <Adafruit_SSD1306.h> // OLED Driver
#include <Adafruit_SH110X.h>
#include <EEPROM.h> // EEPROM is a memory whose values are kept when the board is powered off.
#define TIMEOUT 3000 // Set timer for Return to main screen
#define UPDATE_SERIEL 3000 // Set timer for seriel update
/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
//#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's
delay(250); // wait for the OLED to power up
display.setRotation(2); // Rotate disp 180
display.begin(0x3c, true); // Address 0x3C default
display.setContrast (0); // dim display
display.display();
delay(500);
display.clearDisplay(); // Clear the buffer.
bool status;
status = bme.begin();
if (!status) {
// Serial.println("Could not find a valid BME280 sensor, check wiring or sencor I2C addres!"); //If this text to long Adafruit_SH110X.h dies
while (1);
}
timeout = millis() + TIMEOUT; // Return to main screen function
update_seriel = millis() + UPDATE_SERIEL;
}
void main_screen() { // Main status screen. State 0
// c_vac = (bme.readPressure() / 1000.0F); //If i use this Adafruit_SH110X.h dies
// temp = bme.readTemperature(); //If i use this Adafruit_SH110X.h dies
Arduino board: Arduino uno
Arduino IDE version (found in Arduino -> About Arduino menu): IDE 2.3.3
List the steps to reproduce the problem below (if possible attach a sketch or
copy the sketch code in too):
Adafruit_SH110X.h does not work with Adafruit_BME280 and has isues with serial.print
I'm changing disply driver from Adafruit_SSD1306.h to Adafruit_SH110X.h
My code (which is still a wrok in progress) workes just fine with Adafruit_SSD1306.h but changing to Adafruit_SH110X.h I run into multiple problems.
In Adafruit_BME280 there is this sensor conection cheek.
bool status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring or sencor I2C addres!"); //If this text to long Adafruit_SH110X.h dies
while (1);
}
If the Serial.println text is short the splash screen from Adafruit_SH110X.h flickers and the program continues but If the Serial.println text is to long the program gets stuck on the splach screen even thoug it's not printing that line.
I found a hint for one of the problems in a forum: you must not use serial.print within I2C configurations,
because I2c and serial both use interrupts and so get in conflict.
https://forum.arduino.cc/t/uno-with-bme280-and-oled-1106-loop-stops-when-using-bme-readpressure/1035419/5
When trying to read the values from the BME my program chrashes and I get a glitchy screen.
c_vac = (bme.readPressure() / 1000.0F); //If I use this Adafruit_SH110X.h dies
temp = bme.readTemperature(); //If I use this Adafruit_SH110X.h dies
Here's my code:
Sorry for the mess work in progress
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
//#include <Adafruit_SSD1306.h> // OLED Driver
#include <Adafruit_SH110X.h>
#include <EEPROM.h> // EEPROM is a memory whose values are kept when the board is powered off.
#define TIMEOUT 3000 // Set timer for Return to main screen
#define UPDATE_SERIEL 3000 // Set timer for seriel update
/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
//#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // QT-PY / XIAO
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int temp = 0; // Temp
int irset = 0; // IR xx%
int vacset = 0; // Vacuum
int fanset = 0; // Fan temp set
int on_time = 0; // Time
int c_vac = 0; // curent Vacuum
int c_fanset = 0; // curent Fan on Temp
int c_on_time = 0; // curent Time
int hh=0, mm=0, ss=0;
int newinput = 0;
int oldinput = 0;
int state = 0;
uint32_t timeout; // Return to main screen
uint32_t update_seriel;
int on_hh=0, on_mm=0; // On Timer
Adafruit_BME280 bme; // I2C
void setup() {
pinMode(0, INPUT_PULLUP); // Analg A0/D0 TEMP MCP9700
pinMode(3, OUTPUT); // D2/GPIO4 IR PWM
pinMode(5, OUTPUT); // D3/GPIO5 VAC PWM
pinMode(6, OUTPUT); // D6/GPI21 FAN PWM
pinMode(4, INPUT_PULLUP); // + Button
pinMode(8, INPUT_PULLUP); // Select Button
pinMode(12, INPUT_PULLUP); // - Button
Serial.begin(9600);
Serial.println(F("Connecting"));
delay(250); // wait for the OLED to power up
display.setRotation(2); // Rotate disp 180
display.begin(0x3c, true); // Address 0x3C default
display.setContrast (0); // dim display
display.display();
delay(500);
display.clearDisplay(); // Clear the buffer.
display.setTextSize(2);
display.setTextColor(SH110X_WHITE);
bool status;
status = bme.begin();
if (!status) {
// Serial.println("Could not find a valid BME280 sensor, check wiring or sencor I2C addres!"); //If this text to long Adafruit_SH110X.h dies
while (1);
}
timeout = millis() + TIMEOUT; // Return to main screen function
update_seriel = millis() + UPDATE_SERIEL;
}
void main_screen() { // Main status screen. State 0
display.clearDisplay(); // Clear the buffer.
display.setCursor(0, 0);
display.print(irset);
display.println("%");
display.print(c_vac);
display.println(" kPa");
display.print(temp);
display.println("C");
display.print(c_on_time);
display.println("HH:MM");
display.display();
}
void IRset(char* captione, int val) {
display.clearDisplay(); // Clear the buffer.
display.setCursor(0, 0);
display.println("IRset");
display.print(val);
display.println("%");
analogWrite(3, irset); // PMW out
display.display();
}
void VacSet(char* captione, int val, int vacset) {
display.clearDisplay(); // Clear the buffer.
display.setCursor(0, 0);
display.println("VacSet");
display.println(val);
analogWrite(5, vacset); //////////////////////////// Skal reguleres med c_vac
display.display();
}
void FanSet(char* captione, int val, int curent) {
display.clearDisplay(); // Clear the buffer.
display.setCursor(0, 0);
display.println("FanSet");
display.println(val);
display.println(curent);
display.display();
}
void OnTimeSet(char* captione, int val, int curent) {
display.clearDisplay(); // Clear the buffer.
display.setCursor(0, 0);
display.println("OnTimeSet");
display.println(val);
display.println(curent);
display.display();
}
void loop() {
// c_vac = (bme.readPressure() / 1000.0F); //If i use this Adafruit_SH110X.h dies
// temp = bme.readTemperature(); //If i use this Adafruit_SH110X.h dies
int input = 0;
if (digitalRead(4) == LOW) { // Read + Button
input = 1;
} else if (digitalRead(8) == LOW) { // Read Select Button
input = 2;
} else if (digitalRead(12) == LOW) { // Read - Button
input = 3;
}
if (millis() > timeout) {
state = 0;
timeout = millis() + TIMEOUT;
main_screen();
}
if (input != oldinput) {
newinput = input;
delay(10);
timeout = millis() + TIMEOUT;
}
oldinput = input;
if (millis() > update_seriel) {
update_seriel = millis() + UPDATE_SERIEL;
Serial.print("IR Intensity:");
Serial.print(irset);
Serial.print("%, ");
Serial.print("Vacuum:");
Serial.print(c_vac);
Serial.print("mBar, ");
Serial.print("Temp:");
Serial.print(temp);
Serial.print("°C,");
Serial.print("On time:");
Serial.print(c_on_time);
Serial.println("HH:MM");
}
switch (state) {
}
}
The text was updated successfully, but these errors were encountered: