Hello i starting with arduino and i try to communicate with this sensor but the back informations is not correctly. so i think my software is not correct but i don't know where if you know why the sensor don't function can you explain my please ?
i join my code with datasheet of the sensor.
/* le capteur Veml6040 est une photodiode RGB qui communique en I2C et qui permet de donner les informations de chaque couleurs rouge vert bleu*/
my code
#define VEML6040Adress 16
#include <Wire.h>
void setup()
{
Serial.begin(9600); //initialisation du port série
Wire.begin();
}
void initSensor(int dataByteLow) //initialisation du capteur mise en route ou arret
{
writeVEML6040(0,dataByteLow,0); //envoi les données de configuration
}
void writeVEML6040(int commandOrder, int dataByteLow, int dataByteHigh) //sous programme permettant l'écriture du maitre vers l'esclave
{
Wire.beginTransmission(VEML6040Adress); //début de la communication et transmission de l'adresse esclave
Wire.write(commandOrder); //envoi du code commande
Wire.write(dataByteLow); //envoi du byte de poids faible
Wire.write(dataByteHigh); //envoie du byt de point fort
Wire.endTransmission(); //fin de transmission
}
int readVEML6040(int commandOrder) //sous programme permettant la lecture des donées
{
int data=0; //variable de transfert de l'information
Wire.beginTransmission(VEML6040Adress); //début de la communication
Wire.write(commandOrder); //envoi de l'adresse du registre
Wire.requestFrom(VEML6040Adress,2); //Attente de réponse de l'automate
while(Wire.available()) //lorsque les deux donnée sont disponible
{
data=Wire.read(); //lecture du byte de poid faible
data|=Wire.read()<<8; //lecture du byte de poid fort
}
Wire.endTransmission();
return data; //retour de la valeur
}
void loop()
{ //programme principal
int Red,Green,Blue,White; //variable image des valeurs des couleurs
initSensor(80); //mise en route du capteur
delay(1300); //delays d'acqusition de la valeur
initSensor(81); //arret du capteur
Red=readVEML6040(8); //recherche de la valeur de la coueur rouge
Green=readVEML6040(9); //recherche de la valeur de la coueur verte
Blue=readVEML6040(10); //recherche de la valeur de la coueur bleu
White=readVEML6040(11); //recherche de la valeur de la coueur white
Serial.println(Red); //affichage de la valeur de la couleur rouge
Serial.println(Green); //affichage de la valeur de la couleur bleu
Serial.println(Blue); //affichage de la valeur de la couleur verte
Serial.println(White); //affichage de la valeur de la couleur blanche
}
link datasheet http://www.vishay.com/docs/84276/veml6040.pdf