Hello, I want to print the values that I have obtained using the tsl2561 lux sensor on the screen. While I can see the lux values on the serial monitor before connecting the screen, when I connect the screen, it only shows the value once, sometimes it does not show, strange texts appear on the screen. Why is the problem caused and how can I solve it?
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
#include <U8glib.h>
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE)
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
//
/*
Displays some basic information on this sensor from the unified
sensor API sensor_t type (see Adafruit_Sensor for more information)
*/
//
void displaySensorDetails(void)
{
sensor_t sensor;
tsl.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" lux");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" lux");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" lux");
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
//
/*
Configures the gain and integration time for the TSL2561
*/
//
void configureSensor(void)
{
/* You can also manually set the gain or enable auto-gain support /
// tsl.setGain(TSL2561_GAIN_1X); / No gain ... use in bright light to avoid sensor saturation /
// tsl.setGain(TSL2561_GAIN_16X); / 16x gain ... use in low light to boost sensitivity /
tsl.enableAutoRange(true); / Auto-gain ... switches automatically between 1x and 16x */
/* Changing the integration time gives you better sensor resolution (402ms = 16-bit data) /
tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS); / fast but low resolution /
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_101MS); / medium resolution and speed /
// tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_402MS); / 16-bit data but slowest conversions */
/* Update these values depending on what you've set above! */
Serial.println("------------------------------------");
Serial.print ("Gain: "); Serial.println("Auto");
Serial.print ("Timing: "); Serial.println("13 ms");
Serial.println("------------------------------------");
}
//
/*
Arduino setup function (automatically called at startup)
*/
//
void setup(void)
{
Serial.begin(9600);
Serial.println("Light Sensor Test"); Serial.println("");
/* Initialise the sensor /
if(!tsl.begin())
{
/ There was a problem detecting the ADXL345 ... check your connections */
Serial.print("Ooops, no TSL2561 detected ... Check your wiring or I2C ADDR!");
while(1);
}
/* Display some basic information on this sensor */
displaySensorDetails();
/* Setup the sensor gain and integration time */
configureSensor();
/* We're ready to go! */
Serial.println("");
}
//
/*
Arduino loop function, called once 'setup' is complete (your own code
should go here)
*/
//
void loop(void)
{
/* Get a new sensor event */
sensors_event_t event;
tsl.getEvent(&event);
/* Display the results (light is measured in lux) /
if (event.light)
{
Serial.print(event.light); Serial.println(" lux");
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12);
u8g.setPrintPos(15,30);
u8g.print(event.light);
}while (u8g.nextPage() );
}
else
{
/ If event.light = 0 lux the sensor is probably saturated
and no reliable data could be generated! */
Serial.println("Sensor overload");
u8g.firstPage();
do {
u8g.setFont(u8g_font_profont12);
u8g.setPrintPos(15,30);
u8g.print("Sensor overload");
}while (u8g.nextPage() );
}
delay(250);
}