Go Down

Topic: Sensor Problem using Monochrome OLED I2C with Adafruit Library  (Read 500 times) previous topic - next topic

nervusvagus

Hello,


I have the following code. using 128x64 Oled display and SHT10 temperature humidity sensor on Arduino Mega.

I connected the CLK and DAT pins of both SHT10 and OLED display directly to I2C pins on mega, pins 20 and 21.

I cannot read data from SHT10 sensors when I run it with ADafruit library and oled. The values are all -40 and -4 if I try to display sht10 data on screen or view it with serial monitor.

Seperately things seem fine.

I read on this page https://learn.adafruit.com/2-3-monochrome-128x32-oled-display-module/wiring-and-test that "If using with other I2C devices"... they "....suggest using a 3V-logic arduino or an I2C-safe shifter."

Am I having this sensor problem because I'm not using shifter?








Code: [Select]


#include <SPI.h>
#include <Wire.h> //DS3231 librarysi
#include <SHT1x.h>
#define dataPinSHT  20
#define clockPinSHT 21
SHT1x sht1x(dataPinSHT, clockPinSHT);



#include <RunningAverage.h>
RunningAverage raMinute_OutsideHumiditySensor(10);
RunningAverage raHour_OutsideHumiditySensor(10);
int OutsideHumiditySamples = 0;
int OutsideHumiditySensorValue = 0;

RunningAverage raMinute_OutsideSicaklikSensor(10);
RunningAverage raHour_OutsideSicaklikSensor(10);
int OutsideTempSamples = 0;
int OutsideTempSensorValue = 0;


#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 43
Adafruit_SSD1306 display(OLED_RESET);
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 != 64)
//#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

int Outside_Humidity =0;
int Outside_Temp =0;




void setup()   { ///---------------------------------------------------------------------------------------------------------SETUP
 
  
  
  Serial.begin(9600);
Serial1.begin(4800); //9600bps is default for OpenLog

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



  
  raHour_OutsideHumiditySensor.clear();
  raMinute_OutsideHumiditySensor.clear();
  
  raHour_OutsideTempSensor.clear();
  raMinute_OutsideTempSensor.clear();
  //////////////////////////////////////////////////*20* OUTSIDE HUMIDITY VE TEMP OKUMA ORTALAMALARI////////////////////////////////////




} ///---------------------------------------------------------------------------------------------------------SETUP----------------------------------------------------------------------------


void loop() { //-----------------------------------------------------------------------------------LOOP:

 
OutsideHumidityRead();
Outside_Humidity = OutsideHumidityRead();
  OutsideTempRead();
  Outside_Temp = OutsideTempRead();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.setTextColor(WHITE); display.print("OUTSIDE TEMP:"); display.setTextColor(WHITE);   display.println(Outside_Temp);
    display.setTextColor(WHITE); display.print("OUTSIDE HUMIDITY:"); display.setTextColor(WHITE);   display.println(Outside_Humidity);

  display.display();
  delay(2000);


    MyOpenLog();
 
} // ------------------------------------------------------------------------------------------------LOOP-------------------------------------------- -



int ValueFontColor(int VariableLowValue, int VariableHighValue, int VariableValue)
{
  if (VariableValue <= VariableLowValue || VariableValue >= VariableHighValue)
  { return 0;
  }
  else
  {
    return 1;
  }
}

//Formatting:
int ValueBackGroundColor(int VariableLowValue, int VariableHighValue, int VariableValue)
{
  if (VariableValue <= VariableLowValue || VariableValue >= VariableHighValue)
  { return 1;
  }
  else
  {
    return 0;
  }
}


  
int OutsideHumidityRead() {
  OutsideHumiditySensorValue =  sht1x.readHumidity();
  Serial.print("OutsideHumiditySensorValue: ");  Serial.println(OutsideHumiditySensorValue);

  raMinute_OutsideHumiditySensor.addValue(OutsideHumiditySensorValue);
  OutsideHumiditySamples++;
  if (OutsideHumiditySamples % 10 == 0) raHour_OutsideHumiditySensor.addValue(raMinute_OutsideHumiditySensor.getAverage());
  Serial.print("Veri 1: Outside Humidity Seviyesi Dakikalik Ortalama:");//prints out liquid level sensor reading
  Serial.println(raMinute_OutsideHumiditySensor.getAverage());//prints out liquid level sensor reading
  return raMinute_OutsideHumiditySensor.getAverage();
}

int OutsideTempRead() {
  
  OutsideTempSensorValue = sht1x.readTemperatureC();

 Serial.print("OutsideTempSensorValue: ");  Serial.println(OutsideTempSensorValue);

  raMinute_OutsideTempSensor.addValue(OutsideTempSensorValue);
  OutsideTempSamples++;
  if (OutsideTempSamples % 10 == 0) raHour_OutsideTempSensor.addValue(raMinute_OutsideTempSensor.getAverage());
  Serial.print("Veri 2: Outside Temp Seviyesi Dakikalik Ortalama:");//prints out liquid level sensor reading
  Serial.println(raMinute_OutsideTempSensor.getAverage());//prints out liquid level sensor reading
  return raMinute_OutsideTempSensor.getAverage();
}

void MyOpenLog(){
  

  delay(1000); //Wait a second for OpenLog to init

  Serial1.println();
  Serial1.println("Run OpenLog Test");


  };

ChrisTenone

I got around a similar issue by using William Greiman's library for monochrome oled displays. It doesn't do the graphics the Adafruit library does, but it has a much smaller memory footprint.
Wubba lubba dub dub!

nervusvagus

Hi,

I switched to William Greiman's library for monochrome oled displays and it seems like a much cleaner simpler library. The oled I have is working nicely withit however I have 2 issues

1) I dont know how to display the sensor values on the screen. The example code had the display values shown in SETUP however when I put the values inside loop in doesnt show or flickers beyond control.

2) After I plugged in the RTC realtime clock #include <Sodaq_DS3231.h>  wow I'm having issues again with the SHT10 sensor. So I believe there is something wrong with the library I'm using for the SHT sensor #include <SHT1x.h>

nervusvagus

Sorry I forgot to put   oled.clear();   in code so now the issue #1 above is solved.


nervusvagus

the main issue was the sht10 sensor, I had to plug it to pins other than i2c pins of the arduino. all resolved now.

The SHT1x is not true I2C. Putting it and a real I2C on the same pins means the 2 drivers will conflict with each other.

Go Up