Skip to content

Commit

Permalink
Support for Tcs34725 RGB Color Sensor (letscontrolit#195)
Browse files Browse the repository at this point in the history
  • Loading branch information
krikk authored and psy0rz committed Apr 9, 2017
1 parent 988d0bb commit 268f99c
Show file tree
Hide file tree
Showing 3 changed files with 206 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,6 @@
[submodule "lib/AS_BH1750"]
path = lib/AS_BH1750
url = https://github.com/hexenmeister/AS_BH1750.git
[submodule "lib/Adafruit_TCS34725"]
path = lib/Adafruit_TCS34725
url = https://github.com/adafruit/Adafruit_TCS34725.git
1 change: 1 addition & 0 deletions lib/Adafruit_TCS34725
Submodule Adafruit_TCS34725 added at 12be4c
202 changes: 202 additions & 0 deletions src/_P050_TCS34725.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
//#######################################################################################################
//#################### Plugin 050 I2C TCS34725 RGB Color Sensor with IR filter and White LED ############
//#######################################################################################################
//
// RGB Color Sensor with IR filter and White LED
// like this one: https://www.adafruit.com/products/1334
// based on this library: https://github.com/adafruit/Adafruit_TCS34725
// this code is based on 20170331 date version of the above library
// this code is UNTESTED, because my TCS34725 sensor is still not shipped :(
//
#ifdef PLUGIN_BUILD_DEV

#include "Adafruit_TCS34725.h"

#define PLUGIN_050
#define PLUGIN_ID_050 50
#define PLUGIN_NAME_050 "Luminosity & Color - TCS34725 [DEVELOPMENT]"
#define PLUGIN_VALUENAME1_050 "Red"
#define PLUGIN_VALUENAME2_050 "Green"
#define PLUGIN_VALUENAME3_050 "Blue"
#define PLUGIN_VALUENAME4_050 "Color Temperature"




boolean Plugin_050(byte function, struct EventStruct *event, String& string)
{
boolean success = false;

switch (function)
{
case PLUGIN_DEVICE_ADD:
{
Device[++deviceCount].Number = PLUGIN_ID_050;
Device[deviceCount].Type = DEVICE_TYPE_I2C;
Device[deviceCount].VType = SENSOR_TYPE_QUAD;
Device[deviceCount].Ports = 0;
Device[deviceCount].PullUpOption = false;
Device[deviceCount].InverseLogicOption = false;
Device[deviceCount].FormulaOption = true;
Device[deviceCount].ValueCount = 4;
Device[deviceCount].SendDataOption = true;
Device[deviceCount].TimerOption = true;
Device[deviceCount].GlobalSyncOption = true;
break;
}

case PLUGIN_GET_DEVICENAME:
{
string = F(PLUGIN_NAME_050);
break;
}

case PLUGIN_GET_DEVICEVALUENAMES:
{
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[0], PSTR(PLUGIN_VALUENAME1_050));
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[1], PSTR(PLUGIN_VALUENAME2_050));
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[2], PSTR(PLUGIN_VALUENAME3_050));
strcpy_P(ExtraTaskSettings.TaskDeviceValueNames[3], PSTR(PLUGIN_VALUENAME4_050));
break;
}


case PLUGIN_WEBFORM_LOAD:
{
byte choiceMode = Settings.TaskDevicePluginConfig[event->TaskIndex][0];
String optionsMode[6];
optionsMode[0] = F("TCS34725_INTEGRATIONTIME_2_4MS");
optionsMode[1] = F("TCS34725_INTEGRATIONTIME_24MS");
optionsMode[2] = F("TCS34725_INTEGRATIONTIME_50MS");
optionsMode[3] = F("TCS34725_INTEGRATIONTIME_101MS");
optionsMode[4] = F("TCS34725_INTEGRATIONTIME_154MS");
optionsMode[5] = F("TCS34725_INTEGRATIONTIME_700MS");
int optionValuesMode[6];
optionValuesMode[0] = TCS34725_INTEGRATIONTIME_2_4MS;
optionValuesMode[1] = TCS34725_INTEGRATIONTIME_24MS;
optionValuesMode[2] = TCS34725_INTEGRATIONTIME_50MS;
optionValuesMode[3] = TCS34725_INTEGRATIONTIME_101MS;
optionValuesMode[4] = TCS34725_INTEGRATIONTIME_154MS;
optionValuesMode[5] = TCS34725_INTEGRATIONTIME_700MS;
string += F("<TR><TD>Integration Time:<TD><select name='plugin_050_integrationTime'>");
for (byte x = 0; x < 6; x++)
{
string += F("<option value='");
string += optionValuesMode[x];
string += "'";
if (choiceMode == optionValuesMode[x])
string += F(" selected");
string += ">";
string += optionsMode[x];
string += F("</option>");
}
string += F("</select>");

byte choiceMode2 = Settings.TaskDevicePluginConfig[event->TaskIndex][1];
String optionsMode2[4];
optionsMode2[0] = F("TCS34725_GAIN_1X");
optionsMode2[1] = F("TCS34725_GAIN_4X");
optionsMode2[2] = F("TCS34725_GAIN_16X");
optionsMode2[3] = F("TCS34725_GAIN_60X");
int optionValuesMode2[4];
optionValuesMode2[0] = TCS34725_GAIN_1X;
optionValuesMode2[1] = TCS34725_GAIN_4X;
optionValuesMode2[2] = TCS34725_GAIN_16X;
optionValuesMode2[3] = TCS34725_GAIN_60X;
string += F("<TR><TD>Gain:<TD><select name='plugin_050_gain'>");
for (byte x = 0; x < 4; x++)
{
string += F("<option value='");
string += optionValuesMode2[x];
string += "'";
if (choiceMode2 == optionValuesMode2[x])
string += F(" selected");
string += ">";
string += optionsMode2[x];
string += F("</option>");
}
string += F("</select>");

success = true;
break;
}

case PLUGIN_WEBFORM_SAVE:
{
String plugin1 = WebServer.arg(F("plugin_050_integrationTime"));
Settings.TaskDevicePluginConfig[event->TaskIndex][0] = plugin1.toInt();
String plugin2 = WebServer.arg(F("plugin_050_gain"));
Settings.TaskDevicePluginConfig[event->TaskIndex][1] = plugin2.toInt();

success = true;
break;
}

case PLUGIN_READ:
{
tcs34725IntegrationTime_t integrationTime;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_2_4MS)
integrationTime = TCS34725_INTEGRATIONTIME_2_4MS;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_24MS)
integrationTime = TCS34725_INTEGRATIONTIME_24MS;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_50MS)
integrationTime = TCS34725_INTEGRATIONTIME_50MS;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_101MS)
integrationTime = TCS34725_INTEGRATIONTIME_101MS;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_154MS)
integrationTime = TCS34725_INTEGRATIONTIME_154MS;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][0]==TCS34725_INTEGRATIONTIME_700MS)
integrationTime = TCS34725_INTEGRATIONTIME_700MS;

tcs34725Gain_t gain;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][1]==TCS34725_GAIN_1X)
gain = TCS34725_GAIN_1X;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][1]==TCS34725_GAIN_4X)
gain = TCS34725_GAIN_4X;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][1]==TCS34725_GAIN_16X)
gain = TCS34725_GAIN_16X;
if (Settings.TaskDevicePluginConfig[event->TaskIndex][1]==TCS34725_GAIN_60X)
gain = TCS34725_GAIN_60X;

/* Initialise with specific int time and gain values */
Adafruit_TCS34725 tcs = Adafruit_TCS34725(integrationTime, gain);
if (tcs.begin()) {

addLog(LOG_LEVEL_DEBUG, "Found TCS34725 sensor");

uint16_t r, g, b, c, colorTemp, lux;

tcs.getRawData(&r, &g, &b, &c);
colorTemp = tcs.calculateColorTemperature(r, g, b);
lux = tcs.calculateLux(r, g, b);

UserVar[event->BaseVarIndex] = r;
UserVar[event->BaseVarIndex + 1] = g;
UserVar[event->BaseVarIndex + 2] = b;
UserVar[event->BaseVarIndex + 3] = tcs.calculateColorTemperature(r, g, b);

String log = F("TCS34725: Color Temp (K): ");
log += String(UserVar[event->BaseVarIndex + 3], DEC);
log += F(" R: ");
log += String(UserVar[event->BaseVarIndex], DEC);
log += F(" G: ");
log += String(UserVar[event->BaseVarIndex + 1], DEC);
log += F(" B: ");
log += String(UserVar[event->BaseVarIndex + 2], DEC);
addLog(LOG_LEVEL_INFO, log);
success = true;

} else {
addLog(LOG_LEVEL_DEBUG, "No TCS34725 found");
success = false;
}

break;
}

}
return success;
}


#endif

0 comments on commit 268f99c

Please sign in to comment.