Bij deze een plugin voor deze goedkope, goed werkende lux sensoren.

Je sluit ze aan via i2c. Zijn 5v tolerant. Lux zegt mij meer, dan een ldr analoge waarde.
- Code: Selecteer alles
//#######################################################################################################
//#################################### Plugin-254: LuxRead ############################################
//#######################################################################################################
/*********************************************************************************************\
* Funktionele beschrijving: Deze plugin leest een lux sensor, de BH1750 uit.
*
* Het commando is LuxRead, <var> waarbij de luxwaarde wordt weggeschreven naar par1 uservar.
*
* Auteur : Richard ten Klooster
* Support : http://weblog.tenklooster.net
* Datum : 03-2015
* Versie : 0.1
* Nodo productnummer :
* Compatibiliteit : Vanaf Nodo build nummer 744
* Syntax : "LuxRead <Par1>"
*
***********************************************************************************************
* Technische beschrijving:
*
* De BH1750 is 3v en 5v tolerant. Aangesloten op de I2C Bus en vult één variabele met de huidige lux waarde.
*
* Compiled size : 435 Bytes voor mega
*
*/
#define PLUGIN_ID 254
#define PLUGIN_NAME "luxRead"
#define BH1750_address 0x23
// Declaratie funkties. De Arduino verzorgt die niet buiten de .ino files.
boolean BH1750_ReadLux(void);
int BH1750_Read(int);
byte buff[2];
boolean Plugin_254(byte function, struct NodoEventStruct *event, char *string)
{
boolean success=false;
switch(function)
{
#ifdef PLUGIN_254_CORE
case PLUGIN_INIT:
{
WireNodo.beginTransmission(BH1750_address);
WireNodo.write(0x10); //1lx reolution
WireNodo.endTransmission();
break;
}
case PLUGIN_COMMAND:
{
UserVar[event->Par1 -1] = BH1750_ReadLux();
success=true;
}
#endif // CORE
#if NODO_MEGA
case PLUGIN_MMI_IN:
{
char *TempStr=(char*)malloc(INPUT_COMMAND_SIZE);
if(GetArgv(string,TempStr,1))
{
if(strcasecmp(TempStr,PLUGIN_NAME)==0)
{
if(event->Par1 >0 && event->Par1<=USER_VARIABLES_MAX-1)
{
event->Command = PLUGIN_ID; // Plugin nummer
event->Type = NODO_TYPE_PLUGIN_COMMAND;
success=true;
}
}
}
free(TempStr);
break;
}
case PLUGIN_MMI_OUT:
{
strcpy(string,PLUGIN_NAME); // Eerste argument=het commando deel
strcat(string," ");
strcat(string,int2str(event->Par1));
break;
}
#endif // MMI
}
return success;
}
#ifdef PLUGIN_254_CORE
boolean BH1750_ReadLux()
{
int i;
uint16_t val=0;
if(2==BH1750_Read(BH1750_address))
{
val=((buff[0]<<8)|buff[1])/1.2;
val=val+15;
return val;
}
}
int BH1750_Read(int address)
{
int i=0;
WireNodo.requestFrom(address, 2);
while(WireNodo.available()) //
{
buff[i] = WireNodo.read(); // receive one byte
i++;
}
return i;
}
#endif // CORE