Polytech Tours - Projet C++ embarqué sur cible mbed
GroveColourSensor.hpp
- Committer:
- LecomteDelys
- Date:
- 2016-04-24
- Revision:
- 0:21e183c9ef81
File content as of revision 0:21e183c9ef81:
/* * Copyright (c) 2006-2013 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __GROVE_COLOUR_SENSOR_HPP__ #define __GROVE_COLOUR_SENSOR_HPP__ #include "mbed.h" /** * This module is based on the color sensor TCS3414CS with digital output over I2C. * http://www.seeedstudio.com/wiki/index.php?title=Twig_-_I2C_Color_Sensor_v0.9b */ #ifndef COLOR_H #define COLOR_H #include "Color.h" #endif class GroveColourSensor { public: // Constructeur qui initialise la connexion I2C GroveColourSensor(PinName sda, PinName scl) : m_i2c(sda, scl) { /* empty*/ } // Méthode pour allumer le capteur void powerUp(void) { static const char powerUpCommand[] = {0x80, 0x03}; if (m_i2c.write((SEVEN_BIT_ADDRESS << 1), powerUpCommand, sizeof(powerUpCommand)) != 0) { std::cerr << "failed to power up the sensor" << std::endl; } } // Méthode pour éteindre le capteur void powerDown(void) { static const char powerDownCommand[] = {0x80, 0x00}; /* turn down the color sensor */ if (m_i2c.write((SEVEN_BIT_ADDRESS << 1), powerDownCommand, sizeof(powerDownCommand)) != 0) { std::cerr << "failed to power down the sensor" << std::endl; } } // Méthode permettant de récupérer la valeur d'une couleur en donnant en paramètre une couleur de l'enum Colour_t uint16_t readColour(Colour_t colour) { char readColorRegistersCommand = 0xb0 + (2 * static_cast<unsigned>(colour)); m_i2c.write((SEVEN_BIT_ADDRESS << 1), &readColorRegistersCommand, 1 /* size */); uint16_t colourValue; m_i2c.read((SEVEN_BIT_ADDRESS << 1), reinterpret_cast<char *>(&colourValue), sizeof(uint16_t)); return colourValue; } // Méthode permettant de récupérer la valeur d'une couleur en donnant en paramètre le numéro de la couleur dans l'énum uint16_t readColour(unsigned colour) { if (colour >= NUM_COLORS) { return 0; } return readColour(static_cast<Colour_t>(colour)); } // Méthode permettant de récupérer les trois couleurs en donnant en paramètre une structure RGB (par référence) void readColours(RGB &rgb) { rgb.red= readColour(RED); rgb.blue= readColour(BLUE); rgb.green= readColour(GREEN); } private: static const uint8_t SEVEN_BIT_ADDRESS = 0x39; I2C m_i2c; }; #endif /* #ifndef __GROVE_COLOUR_SENSOR_HPP__ */