This fork adds bulk reading for faster transactions. It also removes the I2C construction from the constructor.

Dependents:   ColorDetector ColorDetectorV2 offline_sync_k64f

Fork of GroveColourSensor by Brian Daniels

Committer:
marcuschang
Date:
Wed Jul 15 10:25:43 2015 +0000
Revision:
5:f6a136b99533
Parent:
4:f0e8304db2a3
Fixed bug. uint16_t truncated to uint8_t.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bridadan 2:50cb56828ab9 1 /*
bridadan 2:50cb56828ab9 2 * Copyright (c) 2006-2013 ARM Limited
bridadan 2:50cb56828ab9 3 *
bridadan 2:50cb56828ab9 4 * Licensed under the Apache License, Version 2.0 (the "License");
bridadan 2:50cb56828ab9 5 * you may not use this file except in compliance with the License.
bridadan 2:50cb56828ab9 6 * You may obtain a copy of the License at
bridadan 2:50cb56828ab9 7 *
bridadan 2:50cb56828ab9 8 * http://www.apache.org/licenses/LICENSE-2.0
bridadan 2:50cb56828ab9 9 *
bridadan 2:50cb56828ab9 10 * Unless required by applicable law or agreed to in writing, software
bridadan 2:50cb56828ab9 11 * distributed under the License is distributed on an "AS IS" BASIS,
bridadan 2:50cb56828ab9 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
bridadan 2:50cb56828ab9 13 * See the License for the specific language governing permissions and
bridadan 2:50cb56828ab9 14 * limitations under the License.
bridadan 2:50cb56828ab9 15 */
bridadan 2:50cb56828ab9 16
bridadan 2:50cb56828ab9 17 #ifndef __GROVE_COLOUR_SENSOR_H__
bridadan 2:50cb56828ab9 18 #define __GROVE_COLOUR_SENSOR_H__
bridadan 2:50cb56828ab9 19
bridadan 2:50cb56828ab9 20 #include "mbed.h"
bridadan 2:50cb56828ab9 21
bridadan 3:a401a082d57e 22 /** RGBC sample struct
bridadan 3:a401a082d57e 23 * Used for storing 16 bit values of red, green, blue, and clear light channels from the sensor.
bridadan 3:a401a082d57e 24 */
bridadan 2:50cb56828ab9 25 struct RGBC_Sample {
bridadan 2:50cb56828ab9 26 uint16_t red, green, blue, clear;
bridadan 2:50cb56828ab9 27 };
bridadan 2:50cb56828ab9 28
bridadan 3:a401a082d57e 29 /** RGBC union
bridadan 3:a401a082d57e 30 * This union wraps the RGBC_Sample struct into an iterable data structure.
bridadan 3:a401a082d57e 31 */
bridadan 2:50cb56828ab9 32 union RGBC {
bridadan 2:50cb56828ab9 33 RGBC_Sample ch;
bridadan 2:50cb56828ab9 34 uint16_t data[4];
bridadan 2:50cb56828ab9 35 };
bridadan 2:50cb56828ab9 36
bridadan 3:a401a082d57e 37 /** GroveColourSensor class.
bridadan 4:f0e8304db2a3 38 * Library for using the Grove colour sensor: http://www.seeedstudio.com/depot/Grove-I2C-Color-Sensor-p-854.html
bridadan 3:a401a082d57e 39 */
bridadan 2:50cb56828ab9 40 class GroveColourSensor {
bridadan 2:50cb56828ab9 41 public:
bridadan 3:a401a082d57e 42
bridadan 4:f0e8304db2a3 43 /** Colour enum
bridadan 4:f0e8304db2a3 44 * This enum provides a standard way of enumerating the colour channels. The order they are listed is the order in which the values are read from the sensor.
bridadan 3:a401a082d57e 45 */
bridadan 2:50cb56828ab9 46 enum Colour_t {
bridadan 2:50cb56828ab9 47 GREEN = 0,
bridadan 2:50cb56828ab9 48 RED,
bridadan 2:50cb56828ab9 49 BLUE,
bridadan 2:50cb56828ab9 50 CLEAR,
bridadan 4:f0e8304db2a3 51 NUM_COLOURS
bridadan 2:50cb56828ab9 52 };
bridadan 2:50cb56828ab9 53
bridadan 3:a401a082d57e 54 /**
bridadan 3:a401a082d57e 55 * Constructor, doesn't affect the device at all.
bridadan 3:a401a082d57e 56 *
bridadan 3:a401a082d57e 57 * @param i2c A pointer to the initialized I2C instance.
bridadan 3:a401a082d57e 58 */
bridadan 2:50cb56828ab9 59 GroveColourSensor(I2C *i2c);
bridadan 3:a401a082d57e 60
bridadan 3:a401a082d57e 61 /**
bridadan 4:f0e8304db2a3 62 * Powers up the colour sensor.
bridadan 3:a401a082d57e 63 * Returns true if successful, otherwise returns false.
bridadan 3:a401a082d57e 64 */
bridadan 2:50cb56828ab9 65 bool powerUp(void);
bridadan 3:a401a082d57e 66
bridadan 3:a401a082d57e 67 /**
bridadan 4:f0e8304db2a3 68 * Powers down the colour sensor.
bridadan 3:a401a082d57e 69 * Returns true if successful, otherwise returns false.
bridadan 3:a401a082d57e 70 */
bridadan 3:a401a082d57e 71 bool powerDown(void);
bridadan 3:a401a082d57e 72
bridadan 3:a401a082d57e 73 /**
bridadan 4:f0e8304db2a3 74 * Set the gain of the colour sensor.
bridadan 3:a401a082d57e 75 *
bridadan 3:a401a082d57e 76 * The following are valid gain values:
bridadan 3:a401a082d57e 77 *
bridadan 3:a401a082d57e 78 * - 0 - 1X gain
bridadan 3:a401a082d57e 79 * - 1 - 4X gain
bridadan 3:a401a082d57e 80 * - 2 - 16X gain
bridadan 3:a401a082d57e 81 * - 3 - 64X gain
bridadan 3:a401a082d57e 82 *
bridadan 3:a401a082d57e 83 * @param gain The gain value specified above.
bridadan 3:a401a082d57e 84 */
bridadan 2:50cb56828ab9 85 void setGain(uint8_t gain);
bridadan 3:a401a082d57e 86
bridadan 3:a401a082d57e 87 /**
bridadan 4:f0e8304db2a3 88 * Read a specific colour.
bridadan 3:a401a082d57e 89 *
bridadan 4:f0e8304db2a3 90 * @param colour The colour to read (RED, GREEN, BLUE, or CLEAR).
bridadan 3:a401a082d57e 91 */
bridadan 2:50cb56828ab9 92 uint16_t readColour(Colour_t colour);
bridadan 3:a401a082d57e 93
bridadan 3:a401a082d57e 94 /**
bridadan 3:a401a082d57e 95 * Non enum version of readColour()
bridadan 3:a401a082d57e 96 *
bridadan 4:f0e8304db2a3 97 * @param colour The integer corresponding to the colour you wish to read.
bridadan 3:a401a082d57e 98 */
bridadan 3:a401a082d57e 99 uint16_t readColour(unsigned colour);
bridadan 3:a401a082d57e 100
bridadan 3:a401a082d57e 101 /**
bridadan 4:f0e8304db2a3 102 * Configures the colour sensor to expect block reads. Call this before calling readBlock().
bridadan 3:a401a082d57e 103 */
bridadan 2:50cb56828ab9 104 void setBlockRead();
bridadan 3:a401a082d57e 105
bridadan 3:a401a082d57e 106 /**
bridadan 3:a401a082d57e 107 * Read the red, green, blue, and clear channels in one transaction. You must call setBlockRead() before calling this function.
bridadan 3:a401a082d57e 108 *
bridadan 3:a401a082d57e 109 * @param sample A pointer to the RGBC instance you wish to populate.
bridadan 3:a401a082d57e 110 */
bridadan 2:50cb56828ab9 111 void readBlock(RGBC *sample);
bridadan 3:a401a082d57e 112
bridadan 3:a401a082d57e 113
bridadan 2:50cb56828ab9 114
bridadan 2:50cb56828ab9 115 private:
bridadan 2:50cb56828ab9 116 static const uint8_t SEVEN_BIT_ADDRESS = 0x39;
bridadan 2:50cb56828ab9 117 I2C *i2c;
bridadan 2:50cb56828ab9 118
bridadan 3:a401a082d57e 119 /**
bridadan 3:a401a082d57e 120 * Helper function to convert two bytes into a uint16_t.
bridadan 3:a401a082d57e 121 *
bridadan 3:a401a082d57e 122 * @param lowByte Least signficant byte.
bridadan 3:a401a082d57e 123 * @param highByte Most signficant byte.
bridadan 3:a401a082d57e 124 */
bridadan 2:50cb56828ab9 125 uint16_t bytesTo16bit(char lowByte, char highByte);
bridadan 2:50cb56828ab9 126 };
bridadan 2:50cb56828ab9 127
bridadan 2:50cb56828ab9 128 #endif /* #ifndef __GROVE_COLOUR_SENSOR_H__ */