POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel

Dependencies:   mbed vt100

Committer:
Rhyme
Date:
Thu Dec 07 10:13:13 2017 +0000
Revision:
8:5590f55bdf41
Parent:
7:aa858d789025
Child:
9:f958fa2cdc74
commit at the end of 7-Dec-2017

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:f0de320e23ac 1 #include "mbed.h"
Rhyme 0:f0de320e23ac 2 #include "edge_mgr.h"
Rhyme 2:778a4d4436ff 3 #include "af_attributes.h"
Rhyme 0:f0de320e23ac 4
Rhyme 0:f0de320e23ac 5 #include "edge_time.h"
Rhyme 0:f0de320e23ac 6 #include "edge_pin.h"
Rhyme 0:f0de320e23ac 7 #include "MMA8451Q.h"
Rhyme 0:f0de320e23ac 8 #include "VEML6040.h"
Rhyme 0:f0de320e23ac 9 #include "LM75B.h"
Rhyme 0:f0de320e23ac 10 #include "SMTC502AT.h"
Rhyme 0:f0de320e23ac 11 #include "PSE530.h"
Rhyme 0:f0de320e23ac 12 #include "SO1602A.h"
Rhyme 0:f0de320e23ac 13
Rhyme 0:f0de320e23ac 14 #include "edge_sensor.h"
Rhyme 0:f0de320e23ac 15 #include "edge_accel.h"
Rhyme 0:f0de320e23ac 16 #include "edge_color.h"
Rhyme 0:f0de320e23ac 17 #include "edge_temp.h"
Rhyme 0:f0de320e23ac 18 #include "edge_pressure.h"
Rhyme 0:f0de320e23ac 19
Rhyme 0:f0de320e23ac 20 #define MMA8451Q_I2C_ADDRESS 0x1C
Rhyme 0:f0de320e23ac 21 #define VEML6040_I2C_ADDRESS 0x10
Rhyme 0:f0de320e23ac 22 #define LM75B_I2C_ADDRESS 0x48
Rhyme 0:f0de320e23ac 23 #define SO1602A_I2C_ADDRESS 0x3C
Rhyme 0:f0de320e23ac 24
Rhyme 0:f0de320e23ac 25 #define NUM_MAX_SENSOR 5
Rhyme 0:f0de320e23ac 26
Rhyme 0:f0de320e23ac 27 edge_sensor *sensor[NUM_MAX_SENSOR] ;
Rhyme 0:f0de320e23ac 28 int num_sensor = 0 ;
Rhyme 0:f0de320e23ac 29 int sensor_index = 0 ;
Rhyme 0:f0de320e23ac 30 edge_accel *accel = 0 ;
Rhyme 0:f0de320e23ac 31 edge_color *color[2] = {0, 0} ;
Rhyme 0:f0de320e23ac 32 edge_temp *temp = 0 ;
Rhyme 0:f0de320e23ac 33 edge_pressure *pressure = 0 ;
Rhyme 0:f0de320e23ac 34 PwmOut *led[3] = {0, 0, 0} ;
Rhyme 0:f0de320e23ac 35 uint16_t pwm[3] = { 0x5FA2, 0xB09B, 0x83DF } ;
Rhyme 0:f0de320e23ac 36
Rhyme 0:f0de320e23ac 37 I2C *edge_i2c0 = 0 ;
Rhyme 0:f0de320e23ac 38 I2C *edge_i2c1 = 0 ;
Rhyme 3:cac964851bb6 39 SO1602A *display = 0 ; /* OLED display on I2C */
Rhyme 0:f0de320e23ac 40 MMA8451Q *mma8451q = 0 ;
Rhyme 0:f0de320e23ac 41 VEML6040 *veml6040[2] = { 0, 0 } ;
Rhyme 0:f0de320e23ac 42 LM75B *lm75b0 = 0 ; /* for temp1 */
Rhyme 0:f0de320e23ac 43 AnalogIn *an0 = 0 ; /* for temp2 */
Rhyme 0:f0de320e23ac 44 SMTC502AT *smtc502at0 = 0 ;
Rhyme 0:f0de320e23ac 45 AnalogIn *an1 = 0 ; /* for temp3 */
Rhyme 0:f0de320e23ac 46 SMTC502AT *smtc502at1 = 0 ;
Rhyme 0:f0de320e23ac 47 LM75B *lm75b1 = 0 ; /* for temp4 */
Rhyme 0:f0de320e23ac 48 AnalogIn *an2 = 0 ; /* for gas pressure */
Rhyme 0:f0de320e23ac 49 PSE530 *pse530 = 0 ;
Rhyme 0:f0de320e23ac 50
Rhyme 0:f0de320e23ac 51 static int loop_interval = 1000 ;
Rhyme 0:f0de320e23ac 52 static int accel_interval = 10 ;
Rhyme 0:f0de320e23ac 53 int first_loop = 1 ;
Rhyme 0:f0de320e23ac 54
Rhyme 0:f0de320e23ac 55 int init_edge_attribute(void)
Rhyme 0:f0de320e23ac 56 {
Rhyme 0:f0de320e23ac 57 static int sensor_index = 0 ;
Rhyme 0:f0de320e23ac 58 if (first_loop) {
Rhyme 0:f0de320e23ac 59 enable_sensors() ;
Rhyme 0:f0de320e23ac 60 first_loop = 0 ;
Rhyme 0:f0de320e23ac 61 printf("Sensor loop started!\n") ;
Rhyme 3:cac964851bb6 62 if (display) {
Rhyme 3:cac964851bb6 63 display->clearDisplay() ;
Rhyme 3:cac964851bb6 64 display->locate(0, 0) ;
Rhyme 3:cac964851bb6 65 display->putStr("Sensor Loop") ;
Rhyme 7:aa858d789025 66 display->locate(2, 1) ;
Rhyme 7:aa858d789025 67 display->putStr("Started!") ;
Rhyme 3:cac964851bb6 68 }
Rhyme 0:f0de320e23ac 69 }
Rhyme 0:f0de320e23ac 70 switch(sensor_index) {
Rhyme 0:f0de320e23ac 71 case 0: /* accel */
Rhyme 0:f0de320e23ac 72 if (sensor[sensor_index]) {
Rhyme 0:f0de320e23ac 73 afero->setAttributeBool(ATTR_ACCEL_PRESENT, true) ;
Rhyme 0:f0de320e23ac 74 afero->setAttributeBool(ATTR_ACCEL_ENABLE, true) ;
Rhyme 0:f0de320e23ac 75 } else {
Rhyme 0:f0de320e23ac 76 afero->setAttributeBool(ATTR_ACCEL_PRESENT, false) ;
Rhyme 0:f0de320e23ac 77 }
Rhyme 0:f0de320e23ac 78 break ;
Rhyme 7:aa858d789025 79 case 1: /* color0 */
Rhyme 0:f0de320e23ac 80 if (sensor[sensor_index]) {
Rhyme 0:f0de320e23ac 81 afero->setAttributeBool(ATTR_COLOR0_PRESENT, true) ;
Rhyme 0:f0de320e23ac 82 afero->setAttributeBool(ATTR_COLOR0_ENABLE, true) ;
Rhyme 8:5590f55bdf41 83 // afero->setAttribute32(ATTR_COLOR0_PWM_R, color0_pwm[0]) ;
Rhyme 8:5590f55bdf41 84 // afero->setAttribute32(ATTR_COLOR0_PWM_G, color0_pwm[1]) ;
Rhyme 8:5590f55bdf41 85 // afero->setAttribute32(ATTR_COLOR0_PWM_B, color0_pwm[2]) ;
Rhyme 8:5590f55bdf41 86 afero->getAttribute(ATTR_COLOR0_PWM_R) ;
Rhyme 8:5590f55bdf41 87 afero->getAttribute(ATTR_COLOR0_PWM_G) ;
Rhyme 8:5590f55bdf41 88 afero->getAttribute(ATTR_COLOR0_PWM_B) ;
Rhyme 0:f0de320e23ac 89 } else {
Rhyme 0:f0de320e23ac 90 afero->setAttributeBool(ATTR_COLOR0_PRESENT, false) ;
Rhyme 0:f0de320e23ac 91 }
Rhyme 0:f0de320e23ac 92 break ;
Rhyme 7:aa858d789025 93 case 2: /* color1 */
Rhyme 0:f0de320e23ac 94 if (sensor[sensor_index]) {
Rhyme 0:f0de320e23ac 95 afero->setAttributeBool(ATTR_COLOR1_PRESENT, true) ;
Rhyme 0:f0de320e23ac 96 afero->setAttributeBool(ATTR_COLOR1_ENABLE, true) ;
Rhyme 8:5590f55bdf41 97 // afero->setAttribute32(ATTR_COLOR1_PWM_R, color1_pwm[0]) ;
Rhyme 8:5590f55bdf41 98 // afero->setAttribute32(ATTR_COLOR1_PWM_G, color1_pwm[1]) ;
Rhyme 8:5590f55bdf41 99 // afero->setAttribute32(ATTR_COLOR1_PWM_B, color1_pwm[2]) ;
Rhyme 8:5590f55bdf41 100 afero->getAttribute(ATTR_COLOR1_PWM_R) ;
Rhyme 8:5590f55bdf41 101 afero->getAttribute(ATTR_COLOR1_PWM_G) ;
Rhyme 8:5590f55bdf41 102 afero->getAttribute(ATTR_COLOR1_PWM_B) ;
Rhyme 0:f0de320e23ac 103 } else {
Rhyme 0:f0de320e23ac 104 afero->setAttributeBool(ATTR_COLOR1_PRESENT, false) ;
Rhyme 0:f0de320e23ac 105 }
Rhyme 0:f0de320e23ac 106 break ;
Rhyme 0:f0de320e23ac 107 case 3: /* temp */
Rhyme 0:f0de320e23ac 108 if (lm75b0) {
Rhyme 0:f0de320e23ac 109 afero->setAttributeBool(ATTR_TEMP0_PRESENT, true) ;
Rhyme 0:f0de320e23ac 110 afero->setAttributeBool(ATTR_TEMP0_ENABLE, true) ;
Rhyme 0:f0de320e23ac 111 } else {
Rhyme 0:f0de320e23ac 112 afero->setAttributeBool(ATTR_TEMP0_PRESENT, false) ;
Rhyme 0:f0de320e23ac 113 }
Rhyme 0:f0de320e23ac 114 afero->setAttributeBool(ATTR_TEMP1_PRESENT, true) ;
Rhyme 0:f0de320e23ac 115 afero->setAttributeBool(ATTR_TEMP2_PRESENT, true) ;
Rhyme 7:aa858d789025 116
Rhyme 0:f0de320e23ac 117 if (lm75b1) {
Rhyme 0:f0de320e23ac 118 afero->setAttributeBool(ATTR_TEMP3_PRESENT, true) ;
Rhyme 0:f0de320e23ac 119 afero->setAttributeBool(ATTR_TEMP3_ENABLE, true) ;
Rhyme 0:f0de320e23ac 120 } else {
Rhyme 0:f0de320e23ac 121 afero->setAttributeBool(ATTR_TEMP3_PRESENT, false) ;
Rhyme 0:f0de320e23ac 122 }
Rhyme 7:aa858d789025 123
Rhyme 0:f0de320e23ac 124 break ;
Rhyme 0:f0de320e23ac 125 case 4: /* pressure */
Rhyme 0:f0de320e23ac 126 if (sensor[sensor_index]) {
Rhyme 0:f0de320e23ac 127 afero->setAttributeBool(ATTR_GAS_PRESENT, true) ;
Rhyme 0:f0de320e23ac 128 afero->setAttributeBool(ATTR_GAS_ENABLE, true) ;
Rhyme 0:f0de320e23ac 129 } else {
Rhyme 0:f0de320e23ac 130 afero->setAttributeBool(ATTR_GAS_PRESENT, false) ;
Rhyme 0:f0de320e23ac 131 }
Rhyme 0:f0de320e23ac 132 break ;
Rhyme 0:f0de320e23ac 133 default:
Rhyme 0:f0de320e23ac 134 break ;
Rhyme 0:f0de320e23ac 135 }
Rhyme 0:f0de320e23ac 136 sensor_index++ ;
Rhyme 0:f0de320e23ac 137 return(sensor_index < NUM_MAX_SENSOR) ;
Rhyme 0:f0de320e23ac 138 }
Rhyme 0:f0de320e23ac 139
Rhyme 0:f0de320e23ac 140 void edge_loop(uint32_t count_robin)
Rhyme 0:f0de320e23ac 141 {
Rhyme 0:f0de320e23ac 142 if ((count_robin % accel_interval) == 0) {
Rhyme 0:f0de320e23ac 143 if (accel) {
Rhyme 0:f0de320e23ac 144 accel->accum() ; /* get and accum accel data */
Rhyme 0:f0de320e23ac 145 }
Rhyme 0:f0de320e23ac 146 }
Rhyme 0:f0de320e23ac 147
Rhyme 0:f0de320e23ac 148 if ((count_robin % loop_interval) == 0) {
Rhyme 0:f0de320e23ac 149 loop_interval = 1 ;
Rhyme 0:f0de320e23ac 150 if ((sensor[sensor_index])&&(sensor[sensor_index]->isEnabled())) {
Rhyme 0:f0de320e23ac 151 sensor[sensor_index]->runStateMachine() ;
Rhyme 0:f0de320e23ac 152 }
Rhyme 0:f0de320e23ac 153 sensor_index = (sensor_index + 1) % NUM_MAX_SENSOR ;
Rhyme 0:f0de320e23ac 154 }
Rhyme 0:f0de320e23ac 155 }
Rhyme 0:f0de320e23ac 156
Rhyme 0:f0de320e23ac 157 int is_present(I2C *i2c, int address)
Rhyme 0:f0de320e23ac 158 {
Rhyme 0:f0de320e23ac 159 char t[1] = { 0 } ;
Rhyme 0:f0de320e23ac 160 char data[2] = { 0, 0 } ;
Rhyme 0:f0de320e23ac 161 int result ;
Rhyme 0:f0de320e23ac 162 address <<= 1 ;
Rhyme 0:f0de320e23ac 163 result = i2c->write(address, t, 1, true) ;
Rhyme 0:f0de320e23ac 164 if (result == 0) {
Rhyme 0:f0de320e23ac 165 result = i2c->read(address, data, 2) ;
Rhyme 0:f0de320e23ac 166 }
Rhyme 0:f0de320e23ac 167 return((result == 0)) ;
Rhyme 0:f0de320e23ac 168 }
Rhyme 0:f0de320e23ac 169
Rhyme 0:f0de320e23ac 170 void init_sensors(void)
Rhyme 0:f0de320e23ac 171 {
Rhyme 0:f0de320e23ac 172 #if 0
Rhyme 0:f0de320e23ac 173 I2C *edge_i2c0 = 0 ;
Rhyme 0:f0de320e23ac 174 I2C *edge_i2c1 = 0 ;
Rhyme 0:f0de320e23ac 175 MMA8451Q *mma8451q = 0 ;
Rhyme 0:f0de320e23ac 176 VEML6040 *veml6040[2] = { 0, 0 } ;
Rhyme 0:f0de320e23ac 177 LM75B *lm75b0 = 0 ; /* for temp1 */
Rhyme 0:f0de320e23ac 178 AnalogIn *an0 = 0 ; /* for temp2 */
Rhyme 0:f0de320e23ac 179 SMTC502AT *smtc502at0 = 0 ;
Rhyme 0:f0de320e23ac 180 AnalogIn *an1 = 0 ; /* for temp3 */
Rhyme 0:f0de320e23ac 181 SMTC502AT *smtc502at1 = 0 ;
Rhyme 0:f0de320e23ac 182 LM75B *lm75b1 = 0 ; /* for temp4 */
Rhyme 0:f0de320e23ac 183 AnalogIn *an2 = 0 ; /* for gas pressure */
Rhyme 0:f0de320e23ac 184 PSE530 *pse530 = 0 ;
Rhyme 0:f0de320e23ac 185 #endif
Rhyme 0:f0de320e23ac 186
Rhyme 0:f0de320e23ac 187 printf("=== Initializing Sensor(s) ===\n") ;
Rhyme 0:f0de320e23ac 188 edge_i2c0 = new I2C(PIN_I2C0_SDA, PIN_I2C0_SCL) ;
Rhyme 0:f0de320e23ac 189 edge_i2c1 = new I2C(PIN_I2C1_SDA, PIN_I2C1_SCL) ;
Rhyme 0:f0de320e23ac 190
Rhyme 0:f0de320e23ac 191 if (is_present(edge_i2c0, SO1602A_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 192 printf("SO1602A on I2C0 is present\n") ;
Rhyme 3:cac964851bb6 193 display = new SO1602A(edge_i2c0, SO1602A_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 194 } else if (is_present(edge_i2c1, SO1602A_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 195 printf("SO1602A on I2C1 is present\n") ;
Rhyme 3:cac964851bb6 196 display = new SO1602A(edge_i2c1, SO1602A_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 197 } else {
Rhyme 0:f0de320e23ac 198 printf("SO1602A is absent\n") ;
Rhyme 0:f0de320e23ac 199 }
Rhyme 3:cac964851bb6 200 if (display) {
Rhyme 3:cac964851bb6 201 display->clearDisplay() ;
Rhyme 3:cac964851bb6 202 display->locate(3, 0) ;
Rhyme 3:cac964851bb6 203 display->putStr("Suntory") ;
Rhyme 3:cac964851bb6 204 display->locate(0, 1) ;
Rhyme 3:cac964851bb6 205 display->putStr("Server Monitor") ;
Rhyme 0:f0de320e23ac 206 }
Rhyme 0:f0de320e23ac 207
Rhyme 0:f0de320e23ac 208 if (is_present(edge_i2c1, MMA8451Q_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 209 printf("MMA8451Q on I2C1 is present\n") ;
Rhyme 0:f0de320e23ac 210 mma8451q = new MMA8451Q(edge_i2c1, MMA8451Q_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 211 accel = new edge_accel(mma8451q) ;
Rhyme 0:f0de320e23ac 212 sensor[0] = accel ;
Rhyme 0:f0de320e23ac 213 num_sensor++ ;
Rhyme 0:f0de320e23ac 214 } else {
Rhyme 0:f0de320e23ac 215 sensor[0] = 0 ;
Rhyme 0:f0de320e23ac 216 printf("MMA8451Q is absent\n") ;
Rhyme 0:f0de320e23ac 217 }
Rhyme 0:f0de320e23ac 218
Rhyme 0:f0de320e23ac 219 if (is_present(edge_i2c1, VEML6040_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 220 printf("VEML6040 on I2C1 is present\n") ;
Rhyme 0:f0de320e23ac 221 veml6040[0] = new VEML6040(edge_i2c1, VEML6040_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 222 led[0] = new PwmOut(PIN_LED_R) ;
Rhyme 0:f0de320e23ac 223 led[1] = new PwmOut(PIN_LED_G) ;
Rhyme 0:f0de320e23ac 224 led[2] = new PwmOut(PIN_LED_B) ;
Rhyme 0:f0de320e23ac 225 color[0] = new edge_color(veml6040[0], led, pwm) ;
Rhyme 0:f0de320e23ac 226 sensor[1] = color[0] ;
Rhyme 0:f0de320e23ac 227 num_sensor++ ;
Rhyme 0:f0de320e23ac 228 } else {
Rhyme 0:f0de320e23ac 229 sensor[1] = 0 ;
Rhyme 0:f0de320e23ac 230 printf("VEML6040 on I2C1 is absent\n") ;
Rhyme 0:f0de320e23ac 231 }
Rhyme 0:f0de320e23ac 232
Rhyme 0:f0de320e23ac 233 if (is_present(edge_i2c0, VEML6040_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 234 printf("VEML6040 on I2C0 is present\n") ;
Rhyme 0:f0de320e23ac 235 veml6040[1] = new VEML6040(edge_i2c0, VEML6040_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 236 if (led[0] == 0) {
Rhyme 0:f0de320e23ac 237 led[0] = new PwmOut(PIN_LED_R) ;
Rhyme 0:f0de320e23ac 238 led[1] = new PwmOut(PIN_LED_G) ;
Rhyme 0:f0de320e23ac 239 led[2] = new PwmOut(PIN_LED_B) ;
Rhyme 0:f0de320e23ac 240 }
Rhyme 0:f0de320e23ac 241 color[1] = new edge_color(veml6040[1], led, pwm) ;
Rhyme 0:f0de320e23ac 242 sensor[2] = color[1] ;
Rhyme 0:f0de320e23ac 243 num_sensor++ ;
Rhyme 0:f0de320e23ac 244 } else {
Rhyme 0:f0de320e23ac 245 sensor[2] = 0 ;
Rhyme 0:f0de320e23ac 246 printf("VEML6040 on I2C0 is absent\n") ;
Rhyme 0:f0de320e23ac 247 }
Rhyme 0:f0de320e23ac 248
Rhyme 0:f0de320e23ac 249 if (is_present(edge_i2c1, LM75B_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 250 printf("LM75B on I2C1 is present\n") ;
Rhyme 0:f0de320e23ac 251 lm75b0 = new LM75B(edge_i2c1, LM75B_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 252 } else {
Rhyme 0:f0de320e23ac 253 printf("LM75B on I2C1 is absent\n") ;
Rhyme 0:f0de320e23ac 254 }
Rhyme 7:aa858d789025 255 #if 0
Rhyme 0:f0de320e23ac 256 if (is_present(edge_i2c0, LM75B_I2C_ADDRESS)) {
Rhyme 0:f0de320e23ac 257 printf("LM75B on I2C0 is present\n") ;
Rhyme 0:f0de320e23ac 258 lm75b1 = new LM75B(edge_i2c0, LM75B_I2C_ADDRESS) ;
Rhyme 0:f0de320e23ac 259 } else {
Rhyme 0:f0de320e23ac 260 printf("LM75B on I2C0 is absent\n") ;
Rhyme 0:f0de320e23ac 261 }
Rhyme 7:aa858d789025 262 #endif
Rhyme 0:f0de320e23ac 263 an0 = new AnalogIn(PIN_AN0) ;
Rhyme 0:f0de320e23ac 264 smtc502at0 = new SMTC502AT(an0) ;
Rhyme 0:f0de320e23ac 265 an1 = new AnalogIn(PIN_AN1) ;
Rhyme 0:f0de320e23ac 266 smtc502at1 = new SMTC502AT(an1) ;
Rhyme 0:f0de320e23ac 267 temp = new edge_temp(lm75b0, smtc502at0, smtc502at1, lm75b1) ;
Rhyme 0:f0de320e23ac 268 sensor[3] = temp ;
Rhyme 0:f0de320e23ac 269 num_sensor++ ;
Rhyme 0:f0de320e23ac 270
Rhyme 0:f0de320e23ac 271 an2 = new AnalogIn(PIN_AN2) ;
Rhyme 0:f0de320e23ac 272 pse530 = new PSE530(an2) ;
Rhyme 0:f0de320e23ac 273 pressure = new edge_pressure(pse530) ;
Rhyme 0:f0de320e23ac 274 sensor[4] = pressure ;
Rhyme 0:f0de320e23ac 275 num_sensor++ ;
Rhyme 0:f0de320e23ac 276
Rhyme 0:f0de320e23ac 277 #if 0
Rhyme 0:f0de320e23ac 278 if (color[0]) {
Rhyme 0:f0de320e23ac 279 color[0]->calibrate(target, color0_pwm, 10) ;
Rhyme 0:f0de320e23ac 280 }
Rhyme 0:f0de320e23ac 281 if (color[1]) {
Rhyme 0:f0de320e23ac 282 color[1]->calibrate(target, color1_pwm, 10) ;
Rhyme 0:f0de320e23ac 283 }
Rhyme 0:f0de320e23ac 284 #endif
Rhyme 0:f0de320e23ac 285 if (num_sensor > 0) {
Rhyme 0:f0de320e23ac 286 printf("%d edge_sensor(s) registered\n", num_sensor) ;
Rhyme 3:cac964851bb6 287 printf("Edge is waiting for ASR to link\n") ;
Rhyme 3:cac964851bb6 288 if (display) {
Rhyme 3:cac964851bb6 289 display->clearDisplay() ;
Rhyme 3:cac964851bb6 290 display->locate(0, 0) ;
Rhyme 3:cac964851bb6 291 display->putStr("Waiting for") ;
Rhyme 3:cac964851bb6 292 display->locate(0, 1) ;
Rhyme 3:cac964851bb6 293 display->putStr("ASR to Link") ;
Rhyme 3:cac964851bb6 294 }
Rhyme 0:f0de320e23ac 295 }
Rhyme 0:f0de320e23ac 296 }
Rhyme 0:f0de320e23ac 297
Rhyme 0:f0de320e23ac 298 void enable_sensors(void)
Rhyme 0:f0de320e23ac 299 {
Rhyme 0:f0de320e23ac 300 int i ;
Rhyme 0:f0de320e23ac 301 for (i = 0 ; i < NUM_MAX_SENSOR ; i++ ) {
Rhyme 0:f0de320e23ac 302 if (sensor[i]) {
Rhyme 0:f0de320e23ac 303 sensor[i]->enable() ;
Rhyme 0:f0de320e23ac 304 }
Rhyme 0:f0de320e23ac 305 }
Rhyme 0:f0de320e23ac 306 }