Driver for HC-SR04 connected to a Microbit

Committer:
isaeldiaz@developer.mbed.org
Date:
Mon Aug 29 20:32:40 2016 +0200
Revision:
7:13ba98b16e74
Parent:
6:f3780669258d
Child:
8:12e6c5d3dc5f
changing back name of library to MicrobitUltrasound

Who changed what in which revision?

UserRevisionLine numberNew contents of line
isaeldiaz@developer.mbed.org 1:17a477201275 1 /*
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 2 The MIT License (MIT)
isaeldiaz@developer.mbed.org 1:17a477201275 3
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 4 Copyright (c) 2016 British Broadcasting Corporation.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 5 This software is provided by Lancaster University by arrangement with the BBC.
isaeldiaz@developer.mbed.org 1:17a477201275 6
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 7 Permission is hereby granted, free of charge, to any person obtaining a
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 8 copy of this software and associated documentation files (the "Software"),
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 9 to deal in the Software without restriction, including without limitation
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 10 the rights to use, copy, modify, merge, publish, distribute, sublicense,
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 11 and/or sell copies of the Software, and to permit persons to whom the
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 12 Software is furnished to do so, subject to the following conditions:
isaeldiaz@developer.mbed.org 1:17a477201275 13
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 14 The above copyright notice and this permission notice shall be included in
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 15 all copies or substantial portions of the Software.
isaeldiaz@developer.mbed.org 1:17a477201275 16
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 20 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 21 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 22 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 23 DEALINGS IN THE SOFTWARE.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 24 */
isaeldiaz@developer.mbed.org 1:17a477201275 25
isaeldiaz@developer.mbed.org 1:17a477201275 26 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 27 * Class definition for MicroBitPin.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 28 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 29 * Commonly represents an I/O pin on the edge connector.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 30 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 31 #include "MicrobitUltrasound.h"
isaeldiaz@developer.mbed.org 2:826744569821 32 #include "MicroBitConfig.h"
isaeldiaz@developer.mbed.org 2:826744569821 33 #include "MicroBitSystemTimer.h"
isaeldiaz@developer.mbed.org 2:826744569821 34 #include "MicroBitFiber.h"
isaeldiaz@developer.mbed.org 1:17a477201275 35
isaeldiaz@developer.mbed.org 2:826744569821 36 /**
isaeldiaz@developer.mbed.org 2:826744569821 37 * Constructor.
isaeldiaz@developer.mbed.org 7:13ba98b16e74 38 * Create new MicrobitUltrasound that reports distance to closest object
isaeldiaz@developer.mbed.org 2:826744569821 39 *
isaeldiaz@developer.mbed.org 2:826744569821 40 * @param _trigPinName Name of the MicroBitPin to be used as trigger.
isaeldiaz@developer.mbed.org 2:826744569821 41 *
isaeldiaz@developer.mbed.org 2:826744569821 42 * @param _echoPinName Name of the MicroBitPin to be used as response from sensor.
isaeldiaz@developer.mbed.org 2:826744569821 43 *
isaeldiaz@developer.mbed.org 2:826744569821 44 * @code
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 45 * MicroBitPin P1_TRIGGER = MicroBitPin(MICROBIT_ID_IO_P1, MICROBIT_PIN_P1, PIN_CAPABILITY_DIGITAL);
isaeldiaz@developer.mbed.org 2:826744569821 46 * MicroBitPin P2_ECHO = MicroBitPin(MICROBIT_ID_IO_P2, MICROBIT_PIN_P2, PIN_CAPABILITY_DIGITAL);
isaeldiaz@developer.mbed.org 7:13ba98b16e74 47 * MicrobitUltrasound uSoundSensor(P1_TRIGGER, P2_ECHO);
isaeldiaz@developer.mbed.org 2:826744569821 48 * @endcode
isaeldiaz@developer.mbed.org 2:826744569821 49 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 50 MicrobitUltrasound(PinName triggerPinName, PinName echoPinName, uint16_t id)
isaeldiaz@developer.mbed.org 2:826744569821 51 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 52 this->id = id;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 53 this->status = 0;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 54 this->sampleTime = 0;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 55 this->echoDuration = 0;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 56 this->triggerPeriod = MICROBIT_ULTRASOUND_PERIOD_DEFAULT_MS;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 57 this->triggerDuration = MICROBIT_ULTRASOUND_TRIGGER_DURATION_DEFAULT_US;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 58
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 59 trigger = new DigitalOut(triggerPinName);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 60 echo = new TimedInterruptIn(echoPinName);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 61 echo->mode((PinMode)MICROBIT_ULTRASOUND_PULLMODE_DEFAULT);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 62 echo->rise(this, &MicroBitUlstrasound::onEchoRise);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 63 echo->rise(this, &MicroBitUlstrasound::onEchoFall);
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 64 }
isaeldiaz@developer.mbed.org 2:826744569821 65
isaeldiaz@developer.mbed.org 2:826744569821 66
isaeldiaz@developer.mbed.org 2:826744569821 67 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 68 * This member function manages the calculation of the timestamp of a pulse detected
isaeldiaz@developer.mbed.org 6:f3780669258d 69 * on the echo pin.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 70 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 71 * @param eventValue the event value to distribute onto the message bus.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 72 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 73 void MicrobitUltrasound::pulseWidthEvent(int eventValue)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 74 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 75 MicroBitEvent evt(id, eventValue, CREATE_ONLY);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 76 uint64_t now = evt.timestamp;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 77 uint64_t previous = echo.getTimestamp();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 78
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 79 if (previous != 0)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 80 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 81 evt.timestamp -= previous;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 82 evt.fire();
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 83 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 84
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 85 echo.setTimestamp(now);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 86 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 87
isaeldiaz@developer.mbed.org 4:c67cff7b9733 88
isaeldiaz@developer.mbed.org 4:c67cff7b9733 89 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 90 * Interrupt handler for when an rise interrupt is triggered.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 91 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 92 void MicrobitUltrasound::onEchoRise()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 93 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 94 if(status & ULTRASOUND_STATUS_EVENTON_PULSE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 95 pulseWidthEvent(MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_LO);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 96
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 97 if(status & ULTRASOUND_STATUS_EVENTON_RISE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 98 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_RISE);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 99
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 100 if(status & ULTRASOUND_STATUS_EVENTON_EDGE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 101 MicroBitEvent(id, MICROBIT_PIN_EVT_EDGE);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 102 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 103
isaeldiaz@developer.mbed.org 4:c67cff7b9733 104 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 105 * Interrupt handler for when an fall interrupt is triggered.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 106 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 107 void MicrobitUltrasound::onEchoFall()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 108 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 109 if(status & ULTRASOUND_STATUS_EVENTON_PULSE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 110 pulseWidthEvent(MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_HI);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 111
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 112 if(status & ULTRASOUND_STATUS_EVENTON_FALL)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 113 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_FALL);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 114
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 115 if(status & ULTRASOUND_STATUS_EVENTON_EDGE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 116 MicroBitEvent(id, MICROBIT_PIN_EVT_EDGE);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 117 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 118
isaeldiaz@developer.mbed.org 4:c67cff7b9733 119 /**
isaeldiaz@developer.mbed.org 2:826744569821 120 * Set the sample rate at which the micro:bit triggers sensor (in ms).
isaeldiaz@developer.mbed.org 2:826744569821 121 *
isaeldiaz@developer.mbed.org 2:826744569821 122 * The default sample period is 1 second.
isaeldiaz@developer.mbed.org 2:826744569821 123 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 124 * @param period the requested time between triggers, in milliseconds.
isaeldiaz@developer.mbed.org 2:826744569821 125 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 126 * @note the micro:bit sends triggers in the background.
isaeldiaz@developer.mbed.org 2:826744569821 127 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 128 void MicrobitUltrasound::setPeriod(int period_ms)
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 129 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 130 this->triggerPeriod = period_ms;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 131 }
isaeldiaz@developer.mbed.org 2:826744569821 132
isaeldiaz@developer.mbed.org 2:826744569821 133 /**
isaeldiaz@developer.mbed.org 2:826744569821 134 * Get the sample rate at which the micro:bit triggers sensor (in ms).
isaeldiaz@developer.mbed.org 2:826744569821 135 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 136 * @return period the requested time between triggers, in milliseconds.
isaeldiaz@developer.mbed.org 2:826744569821 137 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 138 void MicrobitUltrasound::getPeriod()
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 139 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 140 return triggerPeriod;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 141 }
isaeldiaz@developer.mbed.org 2:826744569821 142
isaeldiaz@developer.mbed.org 2:826744569821 143 /**
isaeldiaz@developer.mbed.org 2:826744569821 144 * Get the pulse's duration from sensor, last updated sample
isaeldiaz@developer.mbed.org 2:826744569821 145 *
isaeldiaz@developer.mbed.org 2:826744569821 146 * @return the latest updated pulse duration.
isaeldiaz@developer.mbed.org 2:826744569821 147 *
isaeldiaz@developer.mbed.org 2:826744569821 148 */
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 149 int getEchoDuration()
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 150 {
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 151 return echoDuration;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 152 }
isaeldiaz@developer.mbed.org 2:826744569821 153
isaeldiaz@developer.mbed.org 2:826744569821 154 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 155 * Send trigger to start measurement in sensor
isaeldiaz@developer.mbed.org 2:826744569821 156 *
isaeldiaz@developer.mbed.org 2:826744569821 157 * This call also will add the class to fiber components to receive
isaeldiaz@developer.mbed.org 2:826744569821 158 * one callback only.
isaeldiaz@developer.mbed.org 2:826744569821 159 *
isaeldiaz@developer.mbed.org 2:826744569821 160 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 161 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 162 int MicrobitUltrasound::fireTrigger(void)
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 163 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 164 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 165 int actVal, pasVal;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 166 actVal = triggerActiveValue? 1 : 0;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 167 pasVal = triggerActiveValue? 0 : 1;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 168 result = trigger.write(pasVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 169 if (result =! 0)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 170 return result;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 171 wait_us(MICROBIT_ULTRASOUND_IDLE_DURATION_DEFAULT_US);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 172 result = trigger.write(actVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 173 if (result =! 0)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 174 return result;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 175 wait_us(MICROBIT_ULTRASOUND_TRIGGER_DURATION_DEFAULT_US);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 176 result = trigger.write(pasVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 177 return result;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 178 }
isaeldiaz@developer.mbed.org 2:826744569821 179
isaeldiaz@developer.mbed.org 2:826744569821 180 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 181 * Start periodic trigger to sensor. This call also will add the class
isaeldiaz@developer.mbed.org 2:826744569821 182 * to fiber components for periodic callbacks.
isaeldiaz@developer.mbed.org 2:826744569821 183 *
isaeldiaz@developer.mbed.org 2:826744569821 184 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 185 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 186 int MicrobitUltrasound::start(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 187 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 188 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 189 status |= MICROBIT_COMPONENT_RUNNING;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 190 result = updateSample();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 191 return result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 192 }
isaeldiaz@developer.mbed.org 2:826744569821 193
isaeldiaz@developer.mbed.org 2:826744569821 194 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 195 * Stop periodic trigger to sensor.
isaeldiaz@developer.mbed.org 2:826744569821 196 *
isaeldiaz@developer.mbed.org 2:826744569821 197 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 198 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 199 int MicrobitUltrasound::stop(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 200 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 201 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 202 status &= !MICROBIT_COMPONENT_RUNNING;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 203 result = fiber_add_idle_component(this);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 204 return result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 205 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 206
isaeldiaz@developer.mbed.org 4:c67cff7b9733 207
isaeldiaz@developer.mbed.org 4:c67cff7b9733 208
isaeldiaz@developer.mbed.org 4:c67cff7b9733 209 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 210 * Update sample by schedulling new trigger
isaeldiaz@developer.mbed.org 4:c67cff7b9733 211 *
isaeldiaz@developer.mbed.org 4:c67cff7b9733 212 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 4:c67cff7b9733 213 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 214 int MicrobitUltrasound::updateSample(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 215 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 216 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 217 if(!(status & ULTRASOUND_STATUS_ADDED_TO_IDLE))
isaeldiaz@developer.mbed.org 4:c67cff7b9733 218 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 219 // If we're running under a fiber scheduer, register ourselves for a periodic callback to keep our data up to date.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 220 // Otherwise, we do just do this on demand with the trigger function.
isaeldiaz@developer.mbed.org 4:c67cff7b9733 221 result = fiber_add_idle_component(this);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 222 if (result != MICROBIT_OK)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 223 return result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 224 status |= ULTRASOUND_STATUS_ADDED_TO_IDLE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 225 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 226
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 227 // check if we need to update our trigger...
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 228 if (isTriggerNeeded())
isaeldiaz@developer.mbed.org 4:c67cff7b9733 229 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 230 result = fireTrigger();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 231 if (result != MICROBIT_OK)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 232 return result;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 233 // Send an event to indicate that we just sent a new trigger.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 234 if (status & ULTRASOUND_STATUS_EVENTON_TRIGGER)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 235 MicroBitEvent e(id, MICROBIT_ULTRASOUND_EVT_TRIGGER);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 236 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 237
isaeldiaz@developer.mbed.org 4:c67cff7b9733 238
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 239 // Schedule our next trigger.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 240 sampleTime = system_timer_current_time() + triggerPeriod;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 241
isaeldiaz@developer.mbed.org 4:c67cff7b9733 242 return MICROBIT_OK
isaeldiaz@developer.mbed.org 4:c67cff7b9733 243 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 244
isaeldiaz@developer.mbed.org 4:c67cff7b9733 245 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 246 * Periodic callback from MicroBit idle thread.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 247 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 248 void MicrobitUltrasound::idleTick()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 249 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 250 updateSample();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 251 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 252
isaeldiaz@developer.mbed.org 4:c67cff7b9733 253 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 254 * Determines if we're due to take another trigger
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 255 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 256 * @return 1 if we're due to take a new trigger, 0 otherwise.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 257 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 258 int MicrobitUltrasound::isTriggerNeeded()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 259 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 260 return system_timer_current_time() >= sampleTime;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 261 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 262
isaeldiaz@developer.mbed.org 4:c67cff7b9733 263
isaeldiaz@developer.mbed.org 6:f3780669258d 264 /**
isaeldiaz@developer.mbed.org 6:f3780669258d 265 * Enables a particular event for the current module
isaeldiaz@developer.mbed.org 6:f3780669258d 266 *
isaeldiaz@developer.mbed.org 6:f3780669258d 267 * @return 1 if we're due to take a new trigger, 0 otherwise.
isaeldiaz@developer.mbed.org 6:f3780669258d 268 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 269 int MicrobitUltrasound::eventOn(int eventType)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 270 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 271 switch(eventType)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 272 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 273 case MICROBIT_ULTRASOUND_EVT_TRIGGER : status |= ULTRASOUND_STATUS_EVENTON_TRIGGER;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 274 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 275 case MICROBIT_ULTRASOUND_EVT_ECHO_RISE : status |= ULTRASOUND_STATUS_EVENTON_RISE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 276 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 277 case MICROBIT_ULTRASOUND_EVT_ECHO_FALL : status |= ULTRASOUND_STATUS_EVENTON_FALL;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 278 break;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 279 case MICROBIT_ULTRASOUND_EVT_ECHO_EDGE : status |= ULTRASOUND_STATUS_EVENTON_EDGE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 280 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 281 case MICROBIT_ULTRASOUND_EVT_ECHO_PULSE : status |= ULTRASOUND_STATUS_EVENTON_PULSE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 282 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 283 default : return MICROBIT_INVALID_PARAMETER;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 284 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 285 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 286 return MICROBIT_OK;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 287 }