diff --git a/UV Case Source/main.ino b/UV Case Source/main.ino new file mode 100644 index 0000000..eef622f --- /dev/null +++ b/UV Case Source/main.ino @@ -0,0 +1,99 @@ +#include +#include +#include +#include + +// Create an SFE_TSL2561 object +SFE_TSL2561 light; + +// Define the pins for the ML8511 sensor +#define ANALOGPIN A0 +#define ENABLEPIN A1 + +// Create an instance of the ML8511 sensor +ML8511 uvSensor(ANALOGPIN, ENABLEPIN); +SoftwareSerial Bluetooth(2, 3); + +void setup() { + Serial.begin(9600); + Bluetooth.begin(9600); + + // Initialize the TSL2561 sensor + Serial.println("Initializing TSL2561..."); + + if (light.begin()) { + Serial.println("TSL2561 Initialized successfully"); + } else { + Serial.println("Error initializing TSL2561"); + while (1); // halt execution + } + + // Set default timing + boolean gain = 0; // Gain: low (1X) + unsigned char time = 2; // Integration time: 402 ms + unsigned int ms; // Variable to hold integration time in ms + + light.setTiming(gain, time, ms); // Set timing with a reference to ms + light.setPowerUp(); // Power up the sensor + Serial.println("TSL2561 powered up."); + + Serial.println("UV UltraViolet ML8511 Initialized"); +} + +void loop() { + // Wait for the integration time + delay(402); // Delay for the integration time set in setup + + unsigned int data0, data1; + + // Retrieve the data from the TSL2561 + if (light.getData(data0, data1)) { + Serial.print("Data0: "); + Serial.print(data0); + Serial.print(" | Data1: "); + Serial.print(data1); + + double lux; // Resulting lux value + boolean good = light.getLux(0, 402, data0, data1, lux); // Calculate lux + + // Send light level to Bluetooth + Bluetooth.print(lux); + + // Print lux to Serial + Serial.print(" Calculated Lux: "); + Serial.println(lux); + + // Check if the light level is greater than 2 lux + if (data0 > 10) { + // Manually enable the ML8511 sensor + uvSensor.enable(); + // Read UV level from ML8511 + float UV = uvSensor.getUV(); // Default mode, no low power here + uvSensor.disable(); + // Print both light and UV values on the same line + Bluetooth.print(","); + Bluetooth.print(UV, 4); + + + // Print UV level to Serial + Serial.print("UV Level: "); + Serial.print(UV, 4); + + // Manually disable the ML8511 sensor + Serial.println(" ML8511 sensor disabled. "); + } else { + // Print only light level when UV sensor is not enabled + Bluetooth.print(" /t "); + Bluetooth.print("N/A"); + Serial.println("UV measurement skipped (light < 2 lux)."); + } + Bluetooth.println(); // Move to the next line after printing both values + } else { + // Handle communication errors + byte error = light.getError(); + Serial.print("I2C error: "); + Serial.println(error); + } + + delay(1000); // Delay between measurements +}