//value as uvIntensity (mW/cm^2) #include "sensor_ml8511.h" Sensor_ML8511::Sensor_ML8511(int pin) { ml8511pin=pin; } void Sensor_ML8511::init() //Things to be done during setup() { Serial.println("initializing ml8511"); pinMode(ml8511pin, INPUT); analogRead(ml8511pin); //first read adc. just to avoid problems init_ok=true; } //Also called during setup() void Sensor_ML8511::setSettings(float minchange, unsigned long senddelaymax, unsigned long readdelay) { data.minchange=minchange; data.senddelaymax=senddelaymax; data.readdelay=readdelay; } //Called during setup void Sensor_ML8511::advertise(HomieNode& p_sensorNode) { sensorNode = &p_sensorNode; sensorNode->advertise("uv"); } void Sensor_ML8511::sensorloop() { if (init_ok) { sensordata &d=data; bool _changed=false; if (millis() >= (d.lastreadtime+d.readdelay)) { Serial.print("analogRead="); Serial.println(analogRead(ml8511pin)); d.value = getUV_ML8511(ml8511pin); //uvIntensity (mW/cm^2) if (fabs(d.lastsentvalue-d.value)>=d.minchange){ _changed=true; } d.lastreadtime=millis(); } if (_changed || millis() >= (d.lastsent+d.senddelaymax)) { Serial.print("Sending uv ML8511. reason="); if (_changed) Serial.println("change"); else Serial.println("time"); Homie.getLogger() << "uv " << ": " << d.value << endl; sensorNode->setProperty("uv").send(String(d.value)); d.lastsentvalue=d.value; d.lastsent=millis(); } } } float Sensor_ML8511::getUV_ML8511(int pin) { float uvadc=0; #define UVADCSAMPLES 32 for (uint16_t _s=0;_s