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
GroveColourSensor.h@5:f6a136b99533, 2015-07-15 (annotated)
- 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?
User | Revision | Line number | New 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__ */ |