Librairie adaptée au laboratoire 2

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_6180XA1 by ST

Committer:
YROY2004
Date:
Fri Feb 02 10:43:07 2018 +0000
Revision:
59:32055c2ddac6
Parent:
57:fa4c622b04a7
Programme qui fait du I2C et de l'interface usager

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 56:37d1736bd896 1 /**
davide.aliprandi@st.com 56:37d1736bd896 2 ******************************************************************************
Davidroid 57:fa4c622b04a7 3 * @file XNucleo6180XA1.h
davide.aliprandi@st.com 56:37d1736bd896 4 * @author AST / EST
davide.aliprandi@st.com 56:37d1736bd896 5 * @version V0.0.1
davide.aliprandi@st.com 56:37d1736bd896 6 * @date 13-April-2015
davide.aliprandi@st.com 56:37d1736bd896 7 * @brief Header file for class X_NUCLEO_6180XA1 representing a X-NUCLEO-6180XA1
davide.aliprandi@st.com 56:37d1736bd896 8 * expansion board
davide.aliprandi@st.com 56:37d1736bd896 9 ******************************************************************************
davide.aliprandi@st.com 56:37d1736bd896 10 * @attention
davide.aliprandi@st.com 56:37d1736bd896 11 *
davide.aliprandi@st.com 56:37d1736bd896 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
davide.aliprandi@st.com 56:37d1736bd896 13 *
davide.aliprandi@st.com 56:37d1736bd896 14 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 56:37d1736bd896 15 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 56:37d1736bd896 16 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 56:37d1736bd896 17 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 56:37d1736bd896 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 56:37d1736bd896 19 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 56:37d1736bd896 20 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 56:37d1736bd896 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 56:37d1736bd896 22 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 56:37d1736bd896 23 * without specific prior written permission.
davide.aliprandi@st.com 56:37d1736bd896 24 *
davide.aliprandi@st.com 56:37d1736bd896 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 56:37d1736bd896 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 56:37d1736bd896 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 56:37d1736bd896 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 56:37d1736bd896 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 56:37d1736bd896 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 56:37d1736bd896 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 56:37d1736bd896 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 56:37d1736bd896 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 56:37d1736bd896 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 56:37d1736bd896 35 *
davide.aliprandi@st.com 56:37d1736bd896 36 ******************************************************************************
davide.aliprandi@st.com 56:37d1736bd896 37 */
davide.aliprandi@st.com 56:37d1736bd896 38
davide.aliprandi@st.com 56:37d1736bd896 39
davide.aliprandi@st.com 56:37d1736bd896 40 /* Define to prevent from recursive inclusion --------------------------------*/
davide.aliprandi@st.com 56:37d1736bd896 41
davide.aliprandi@st.com 56:37d1736bd896 42 #ifndef __X_NUCLEO_6180XA1_H
davide.aliprandi@st.com 56:37d1736bd896 43 #define __X_NUCLEO_6180XA1_H
davide.aliprandi@st.com 56:37d1736bd896 44
davide.aliprandi@st.com 56:37d1736bd896 45
davide.aliprandi@st.com 56:37d1736bd896 46 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 56:37d1736bd896 47
davide.aliprandi@st.com 56:37d1736bd896 48 #include "mbed.h"
Davidroid 57:fa4c622b04a7 49 #include "VL6180X.h"
Davidroid 57:fa4c622b04a7 50 #include "Display.h"
Davidroid 57:fa4c622b04a7 51 #include "STMPE1600.h"
davide.aliprandi@st.com 56:37d1736bd896 52 #include "DevI2C.h"
Davidroid 57:fa4c622b04a7 53 #include "Switch.h"
davide.aliprandi@st.com 56:37d1736bd896 54
davide.aliprandi@st.com 56:37d1736bd896 55 /** New device addresses */
davide.aliprandi@st.com 56:37d1736bd896 56 #define NEW_SENSOR_TOP_ADDRESS 0x10
davide.aliprandi@st.com 56:37d1736bd896 57 #define NEW_SENSOR_BOTTOM_ADDRESS 0x11
davide.aliprandi@st.com 56:37d1736bd896 58 #define NEW_SENSOR_LEFT_ADDRESS 0x12
davide.aliprandi@st.com 56:37d1736bd896 59 #define NEW_SENSOR_RIGHT_ADDRESS 0x13
davide.aliprandi@st.com 56:37d1736bd896 60
davide.aliprandi@st.com 56:37d1736bd896 61
davide.aliprandi@st.com 56:37d1736bd896 62 /* Classes--------------------------------------------------------------------*/
davide.aliprandi@st.com 56:37d1736bd896 63
davide.aliprandi@st.com 56:37d1736bd896 64 /**
davide.aliprandi@st.com 56:37d1736bd896 65 * Class representing the X-NUCLEO-VL6180XA1 expansion board singleton obj
davide.aliprandi@st.com 56:37d1736bd896 66 */
Davidroid 57:fa4c622b04a7 67 class XNucleo6180XA1
davide.aliprandi@st.com 56:37d1736bd896 68 {
davide.aliprandi@st.com 56:37d1736bd896 69 protected:
davide.aliprandi@st.com 56:37d1736bd896 70 /** Constructor 1
davide.aliprandi@st.com 56:37d1736bd896 71 * @brief x_nucleo_6180xa1 board Constructor. Default the INT gpio \
davide.aliprandi@st.com 56:37d1736bd896 72 * configuration as the electrical schematic. Self sensing for optional \
davide.aliprandi@st.com 56:37d1736bd896 73 * expansion sensors (L/B/R).
davide.aliprandi@st.com 56:37d1736bd896 74 * @param[in] &i2c device I2C to be used for communication
davide.aliprandi@st.com 56:37d1736bd896 75 */
Davidroid 57:fa4c622b04a7 76 XNucleo6180XA1(DevI2C *ext_i2c) : dev_i2c(ext_i2c)
davide.aliprandi@st.com 56:37d1736bd896 77 {
davide.aliprandi@st.com 56:37d1736bd896 78 stmpe1600 = new STMPE1600(*ext_i2c);
Davidroid 57:fa4c622b04a7 79 stmpe1600->write_sys_ctrl (SOFT_RESET);
Davidroid 57:fa4c622b04a7 80 the_switch = new Switch (*stmpe1600, GPIO_11);
davide.aliprandi@st.com 56:37d1736bd896 81 display = new Display(*stmpe1600);
davide.aliprandi@st.com 56:37d1736bd896 82
davide.aliprandi@st.com 56:37d1736bd896 83 _gpio0_top=new STMPE1600DigiOut(*dev_i2c, GPIO_12);
davide.aliprandi@st.com 56:37d1736bd896 84 sensor_top=new VL6180X(*dev_i2c, *_gpio0_top, A3);
davide.aliprandi@st.com 56:37d1736bd896 85
davide.aliprandi@st.com 56:37d1736bd896 86 _gpio0_bottom=new STMPE1600DigiOut(*dev_i2c, GPIO_13);
davide.aliprandi@st.com 56:37d1736bd896 87 sensor_bottom=new VL6180X(*dev_i2c, *_gpio0_bottom, A2);
davide.aliprandi@st.com 56:37d1736bd896 88
davide.aliprandi@st.com 56:37d1736bd896 89 _gpio0_left=new STMPE1600DigiOut(*dev_i2c, GPIO_14);
davide.aliprandi@st.com 56:37d1736bd896 90 sensor_left=new VL6180X(*dev_i2c, *_gpio0_left, D13);
davide.aliprandi@st.com 56:37d1736bd896 91
davide.aliprandi@st.com 56:37d1736bd896 92 _gpio0_right=new STMPE1600DigiOut(*dev_i2c, GPIO_15);
davide.aliprandi@st.com 56:37d1736bd896 93 sensor_right=new VL6180X(*dev_i2c, *_gpio0_right, D2);
davide.aliprandi@st.com 56:37d1736bd896 94
davide.aliprandi@st.com 56:37d1736bd896 95 if (init_board()) { // init failed
davide.aliprandi@st.com 56:37d1736bd896 96 printf ("ERROR Init X-NUCLEO-6180XA1 Board\n\r");
davide.aliprandi@st.com 56:37d1736bd896 97 }
davide.aliprandi@st.com 56:37d1736bd896 98 }
davide.aliprandi@st.com 56:37d1736bd896 99
davide.aliprandi@st.com 56:37d1736bd896 100 /** Constructor 2
davide.aliprandi@st.com 56:37d1736bd896 101 * @param[in] &i2c device I2C to be used for communication
davide.aliprandi@st.com 56:37d1736bd896 102 * @param[in] PinName gpio1_top Mbed DigitalOut pin name to be used as a top sensor GPIO_1 INT
davide.aliprandi@st.com 56:37d1736bd896 103 * @param[in] PinName gpio1_bottom Mbed DigitalOut pin name to be used as a bottom sensor GPIO_1 INT
davide.aliprandi@st.com 56:37d1736bd896 104 * @param[in] PinName gpio1_left Mbed DigitalOut pin name to be used as a left sensor GPIO_1 INT
davide.aliprandi@st.com 56:37d1736bd896 105 * @param[in] PinName gpio1_right Mbed DigitalOut pin name to be used as a right sensor GPIO_1 INT
davide.aliprandi@st.com 56:37d1736bd896 106 */
Davidroid 57:fa4c622b04a7 107 XNucleo6180XA1(DevI2C *ext_i2c, PinName gpio1_top, PinName gpio1_bottom,
davide.aliprandi@st.com 56:37d1736bd896 108 PinName gpio1_left, PinName gpio1_right) : dev_i2c(ext_i2c) {
davide.aliprandi@st.com 56:37d1736bd896 109 stmpe1600 = new STMPE1600(*ext_i2c);
Davidroid 57:fa4c622b04a7 110 stmpe1600->write_sys_ctrl (SOFT_RESET);
Davidroid 57:fa4c622b04a7 111 the_switch = new Switch (*stmpe1600, GPIO_11);
davide.aliprandi@st.com 56:37d1736bd896 112 display = new Display(*stmpe1600);
davide.aliprandi@st.com 56:37d1736bd896 113
davide.aliprandi@st.com 56:37d1736bd896 114 _gpio0_top=new STMPE1600DigiOut(*dev_i2c, GPIO_12);
davide.aliprandi@st.com 56:37d1736bd896 115 sensor_top=new VL6180X(*dev_i2c, *_gpio0_top, gpio1_top);
davide.aliprandi@st.com 56:37d1736bd896 116
davide.aliprandi@st.com 56:37d1736bd896 117 _gpio0_bottom=new STMPE1600DigiOut(*dev_i2c, GPIO_13);
davide.aliprandi@st.com 56:37d1736bd896 118 sensor_bottom=new VL6180X(*dev_i2c, *_gpio0_bottom, gpio1_bottom);
davide.aliprandi@st.com 56:37d1736bd896 119
davide.aliprandi@st.com 56:37d1736bd896 120 _gpio0_left=new STMPE1600DigiOut(*dev_i2c, GPIO_14);
davide.aliprandi@st.com 56:37d1736bd896 121 sensor_left=new VL6180X(*dev_i2c, *_gpio0_left, gpio1_left);
davide.aliprandi@st.com 56:37d1736bd896 122
davide.aliprandi@st.com 56:37d1736bd896 123 _gpio0_right=new STMPE1600DigiOut(*dev_i2c, GPIO_15);
davide.aliprandi@st.com 56:37d1736bd896 124 sensor_right=new VL6180X(*dev_i2c, *_gpio0_right, gpio1_right);
davide.aliprandi@st.com 56:37d1736bd896 125 }
davide.aliprandi@st.com 56:37d1736bd896 126
davide.aliprandi@st.com 56:37d1736bd896 127 /**
davide.aliprandi@st.com 56:37d1736bd896 128 * @brief Override default copy constructor as empty
Davidroid 57:fa4c622b04a7 129 * @param[in] &XNucleo6180XA1 singleton object reference
davide.aliprandi@st.com 56:37d1736bd896 130 * @return
davide.aliprandi@st.com 56:37d1736bd896 131 */
Davidroid 57:fa4c622b04a7 132 XNucleo6180XA1() {};
davide.aliprandi@st.com 56:37d1736bd896 133
davide.aliprandi@st.com 56:37d1736bd896 134 /**
davide.aliprandi@st.com 56:37d1736bd896 135 * @brief Override default assignement operator to avoid multiple singletons
Davidroid 57:fa4c622b04a7 136 * @param[in] &XNucleo6180XA1 singleton object reference
davide.aliprandi@st.com 56:37d1736bd896 137 * @return
davide.aliprandi@st.com 56:37d1736bd896 138 */
Davidroid 57:fa4c622b04a7 139 void operator = (const XNucleo6180XA1&);
davide.aliprandi@st.com 56:37d1736bd896 140
davide.aliprandi@st.com 56:37d1736bd896 141 public:
davide.aliprandi@st.com 56:37d1736bd896 142 /**
davide.aliprandi@st.com 56:37d1736bd896 143 * @brief Creates a singleton object instance
davide.aliprandi@st.com 56:37d1736bd896 144 * @param[in] &i2c device I2C to be used for communication
davide.aliprandi@st.com 56:37d1736bd896 145 * @return Pointer to the object instance
davide.aliprandi@st.com 56:37d1736bd896 146 */
Davidroid 57:fa4c622b04a7 147 static XNucleo6180XA1 *instance(DevI2C *ext_i2c);
davide.aliprandi@st.com 56:37d1736bd896 148
davide.aliprandi@st.com 56:37d1736bd896 149 /**
davide.aliprandi@st.com 56:37d1736bd896 150 * @brief Creates a singleton object instance
davide.aliprandi@st.com 56:37d1736bd896 151 * @param[in] &i2c device I2C to be used for communication
davide.aliprandi@st.com 56:37d1736bd896 152 * @param[in] PinName gpio1_top the pin connected to top sensor INT
davide.aliprandi@st.com 56:37d1736bd896 153 * @param[in] PinName gpio1_bottem the pin connected to bottom sensor INT
davide.aliprandi@st.com 56:37d1736bd896 154 * @param[in] PinName gpio1_left the pin connected to left sensor INT
davide.aliprandi@st.com 56:37d1736bd896 155 * @param[in] PinName gpio1_right the pin connected to right sensor INT
davide.aliprandi@st.com 56:37d1736bd896 156 * @return Pointer to the object instance
davide.aliprandi@st.com 56:37d1736bd896 157 */
Davidroid 57:fa4c622b04a7 158 static XNucleo6180XA1 *instance(DevI2C *ext_i2c, PinName gpio1_top, PinName gpio1_bottom,
davide.aliprandi@st.com 56:37d1736bd896 159 PinName gpio1_left, PinName gpio1_right);
davide.aliprandi@st.com 56:37d1736bd896 160
davide.aliprandi@st.com 56:37d1736bd896 161 /**
davide.aliprandi@st.com 56:37d1736bd896 162 * @brief Initialize the board and sensors with deft values
davide.aliprandi@st.com 56:37d1736bd896 163 * @return 0 on success
davide.aliprandi@st.com 56:37d1736bd896 164 */
davide.aliprandi@st.com 56:37d1736bd896 165 int init_board();
davide.aliprandi@st.com 56:37d1736bd896 166
davide.aliprandi@st.com 56:37d1736bd896 167 /**
davide.aliprandi@st.com 56:37d1736bd896 168 * @brief Read the on board red slider switch
davide.aliprandi@st.com 56:37d1736bd896 169 * @return 0 or 1 according to switch position
davide.aliprandi@st.com 56:37d1736bd896 170 */
davide.aliprandi@st.com 56:37d1736bd896 171 bool rd_switch () {
davide.aliprandi@st.com 56:37d1736bd896 172 return the_switch->rd_switch();
davide.aliprandi@st.com 56:37d1736bd896 173 }
davide.aliprandi@st.com 56:37d1736bd896 174
davide.aliprandi@st.com 56:37d1736bd896 175 /**
davide.aliprandi@st.com 56:37d1736bd896 176 * @brief Check the presence of sensor top. To be called after init_board
davide.aliprandi@st.com 56:37d1736bd896 177 * @return true is present, false if absent
davide.aliprandi@st.com 56:37d1736bd896 178 */
davide.aliprandi@st.com 56:37d1736bd896 179 bool is_sensor_top_present() {
davide.aliprandi@st.com 56:37d1736bd896 180 if (sensor_top) {
davide.aliprandi@st.com 56:37d1736bd896 181 return true;
davide.aliprandi@st.com 56:37d1736bd896 182 }
davide.aliprandi@st.com 56:37d1736bd896 183 return false;
davide.aliprandi@st.com 56:37d1736bd896 184 }
davide.aliprandi@st.com 56:37d1736bd896 185
davide.aliprandi@st.com 56:37d1736bd896 186 /**
davide.aliprandi@st.com 56:37d1736bd896 187 * @brief Check the presence of sensor bottom. To be called after init_board
davide.aliprandi@st.com 56:37d1736bd896 188 * @return true is present, false if absent
davide.aliprandi@st.com 56:37d1736bd896 189 */
davide.aliprandi@st.com 56:37d1736bd896 190 bool is_sensor_bottom_present() {
davide.aliprandi@st.com 56:37d1736bd896 191 if (sensor_bottom) {
davide.aliprandi@st.com 56:37d1736bd896 192 return true;
davide.aliprandi@st.com 56:37d1736bd896 193 }
davide.aliprandi@st.com 56:37d1736bd896 194 return false;
davide.aliprandi@st.com 56:37d1736bd896 195 }
davide.aliprandi@st.com 56:37d1736bd896 196
davide.aliprandi@st.com 56:37d1736bd896 197 /**
davide.aliprandi@st.com 56:37d1736bd896 198 * @brief Check the presence of sensor left. To be called after init_board
davide.aliprandi@st.com 56:37d1736bd896 199 * @return true is present, false if absent
davide.aliprandi@st.com 56:37d1736bd896 200 */
davide.aliprandi@st.com 56:37d1736bd896 201 bool is_sensor_left_present() {
davide.aliprandi@st.com 56:37d1736bd896 202 if (sensor_left) {
davide.aliprandi@st.com 56:37d1736bd896 203 return true;
davide.aliprandi@st.com 56:37d1736bd896 204 }
davide.aliprandi@st.com 56:37d1736bd896 205 return false;
davide.aliprandi@st.com 56:37d1736bd896 206 }
davide.aliprandi@st.com 56:37d1736bd896 207
davide.aliprandi@st.com 56:37d1736bd896 208 /**
davide.aliprandi@st.com 56:37d1736bd896 209 * @brief Check the presence of sensor right. To be called after init_board
davide.aliprandi@st.com 56:37d1736bd896 210 * @return true is present, false if absent
davide.aliprandi@st.com 56:37d1736bd896 211 */
davide.aliprandi@st.com 56:37d1736bd896 212 bool is_sensor_right_present() {
davide.aliprandi@st.com 56:37d1736bd896 213 if (sensor_right) {
davide.aliprandi@st.com 56:37d1736bd896 214 return true;
davide.aliprandi@st.com 56:37d1736bd896 215 }
davide.aliprandi@st.com 56:37d1736bd896 216 return false;
davide.aliprandi@st.com 56:37d1736bd896 217 }
davide.aliprandi@st.com 56:37d1736bd896 218
davide.aliprandi@st.com 56:37d1736bd896 219 DevI2C *dev_i2c;
davide.aliprandi@st.com 56:37d1736bd896 220 VL6180X *sensor_top;
davide.aliprandi@st.com 56:37d1736bd896 221 VL6180X *sensor_bottom;
davide.aliprandi@st.com 56:37d1736bd896 222 VL6180X *sensor_left;
davide.aliprandi@st.com 56:37d1736bd896 223 VL6180X *sensor_right;
davide.aliprandi@st.com 56:37d1736bd896 224 STMPE1600 *stmpe1600;
Davidroid 57:fa4c622b04a7 225 Switch *the_switch;
davide.aliprandi@st.com 56:37d1736bd896 226 Display *display;
davide.aliprandi@st.com 56:37d1736bd896 227
davide.aliprandi@st.com 56:37d1736bd896 228 private:
davide.aliprandi@st.com 56:37d1736bd896 229 STMPE1600DigiOut *_gpio0_top;
davide.aliprandi@st.com 56:37d1736bd896 230 STMPE1600DigiOut *_gpio0_bottom;
davide.aliprandi@st.com 56:37d1736bd896 231 STMPE1600DigiOut *_gpio0_left;
davide.aliprandi@st.com 56:37d1736bd896 232 STMPE1600DigiOut *_gpio0_right;
Davidroid 57:fa4c622b04a7 233 static XNucleo6180XA1 *_instance;
davide.aliprandi@st.com 56:37d1736bd896 234 };
davide.aliprandi@st.com 56:37d1736bd896 235
davide.aliprandi@st.com 56:37d1736bd896 236 #endif /* __X_NUCLEO_6180XA1_H */