Driver for HC-SR04 connected to a Microbit

Committer:
isaeldiaz@developer.mbed.org
Date:
Mon Aug 29 22:03:36 2016 +0200
Revision:
8:12e6c5d3dc5f
Parent:
7:13ba98b16e74
Child:
9:d153bcba081c
it hopefully compiles now

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 8:12e6c5d3dc5f 52 this->id = id;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 53 this->status = 0;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 54 this->sampleTime = 0;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 55 this->echoDuration = 0;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 56 this->triggerPeriod_ms = MICROBIT_ULTRASOUND_PERIOD_DEFAULT_MS;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 57 this->triggerDuration_us = MICROBIT_ULTRASOUND_TRIGGER_DURATION_DEFAULT_US;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 58 this->triggerActiveValue = TRIGGER_ACTIVE_VALUE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 59
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 60 trigger = new DigitalOut(triggerPinName);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 61 echo = new TimedInterruptIn(echoPinName);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 62 echo->mode((PinMode)MICROBIT_ULTRASOUND_PULLMODE_DEFAULT);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 63 echo->rise(this, &MicroBitUlstrasound::onEchoRise);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 64 echo->rise(this, &MicroBitUlstrasound::onEchoFall);
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 65 }
isaeldiaz@developer.mbed.org 2:826744569821 66
isaeldiaz@developer.mbed.org 2:826744569821 67
isaeldiaz@developer.mbed.org 2:826744569821 68 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 69 * This member function manages the calculation of the timestamp of a pulse detected
isaeldiaz@developer.mbed.org 6:f3780669258d 70 * on the echo pin.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 71 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 72 * @param eventValue the event value to distribute onto the message bus.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 73 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 74 void MicrobitUltrasound::pulseWidthEvent(int eventValue)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 75 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 76 MicroBitEvent evt(id, eventValue, CREATE_ONLY);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 77 uint64_t now = evt.timestamp;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 78 uint64_t previous = echo.getTimestamp();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 79
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 80 if (previous != 0)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 81 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 82 evt.timestamp -= previous;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 83 evt.fire();
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 84 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 85
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 86 echo.setTimestamp(now);
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 4:c67cff7b9733 90 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 91 * Interrupt handler for when an rise interrupt is triggered.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 92 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 93 void MicrobitUltrasound::onEchoRise()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 94 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 95 if(status & ULTRASOUND_STATUS_EVENTON_PULSE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 96 pulseWidthEvent(MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_LO);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 97
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 98 if(status & ULTRASOUND_STATUS_EVENTON_RISE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 99 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_RISE);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 100
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 101 if(status & ULTRASOUND_STATUS_EVENTON_EDGE)
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 102 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_EDGE);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 103 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 104
isaeldiaz@developer.mbed.org 4:c67cff7b9733 105 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 106 * Interrupt handler for when an fall interrupt is triggered.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 107 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 108 void MicrobitUltrasound::onEchoFall()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 109 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 110 if(status & ULTRASOUND_STATUS_EVENTON_PULSE)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 111 pulseWidthEvent(MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_HI);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 112
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 113 if(status & ULTRASOUND_STATUS_EVENTON_FALL)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 114 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_FALL);
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 115
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 116 if(status & ULTRASOUND_STATUS_EVENTON_EDGE)
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 117 MicroBitEvent(id, MICROBIT_ULTRASOUND_EVT_ECHO_EDGE);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 118 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 119
isaeldiaz@developer.mbed.org 4:c67cff7b9733 120 /**
isaeldiaz@developer.mbed.org 2:826744569821 121 * Set the sample rate at which the micro:bit triggers sensor (in ms).
isaeldiaz@developer.mbed.org 2:826744569821 122 *
isaeldiaz@developer.mbed.org 2:826744569821 123 * The default sample period is 1 second.
isaeldiaz@developer.mbed.org 2:826744569821 124 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 125 * @param period the requested time between triggers, in milliseconds.
isaeldiaz@developer.mbed.org 2:826744569821 126 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 127 * @note the micro:bit sends triggers in the background.
isaeldiaz@developer.mbed.org 2:826744569821 128 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 129 void MicrobitUltrasound::setPeriod(int period_ms)
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 130 {
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 131 this->triggerPeriod_ms = period_ms;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 132 }
isaeldiaz@developer.mbed.org 2:826744569821 133
isaeldiaz@developer.mbed.org 2:826744569821 134 /**
isaeldiaz@developer.mbed.org 2:826744569821 135 * Get the sample rate at which the micro:bit triggers sensor (in ms).
isaeldiaz@developer.mbed.org 2:826744569821 136 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 137 * @return period the requested time between triggers, in milliseconds.
isaeldiaz@developer.mbed.org 2:826744569821 138 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 139 void MicrobitUltrasound::getPeriod()
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 140 {
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 141 return triggerPeriod_ms;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 142 }
isaeldiaz@developer.mbed.org 2:826744569821 143
isaeldiaz@developer.mbed.org 2:826744569821 144 /**
isaeldiaz@developer.mbed.org 2:826744569821 145 * Get the pulse's duration from sensor, last updated sample
isaeldiaz@developer.mbed.org 2:826744569821 146 *
isaeldiaz@developer.mbed.org 2:826744569821 147 * @return the latest updated pulse duration.
isaeldiaz@developer.mbed.org 2:826744569821 148 *
isaeldiaz@developer.mbed.org 2:826744569821 149 */
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 150 int getEchoDuration()
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 151 {
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 152 return echoDuration;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 153 }
isaeldiaz@developer.mbed.org 2:826744569821 154
isaeldiaz@developer.mbed.org 2:826744569821 155 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 156 * Send trigger to start measurement in sensor
isaeldiaz@developer.mbed.org 2:826744569821 157 *
isaeldiaz@developer.mbed.org 2:826744569821 158 * This call also will add the class to fiber components to receive
isaeldiaz@developer.mbed.org 2:826744569821 159 * one callback only.
isaeldiaz@developer.mbed.org 2:826744569821 160 *
isaeldiaz@developer.mbed.org 2:826744569821 161 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 162 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 163 int MicrobitUltrasound::fireTrigger(void)
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 164 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 165 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 166 int actVal, pasVal;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 167 actVal = triggerActiveValue? 1 : 0;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 168 pasVal = triggerActiveValue? 0 : 1;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 169 result = trigger.write(pasVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 170 if (result =! 0)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 171 return result;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 172 wait_us(MICROBIT_ULTRASOUND_IDLE_DURATION_DEFAULT_US);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 173 result = trigger.write(actVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 174 if (result =! 0)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 175 return result;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 176 wait_us(triggerDuration_us);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 177 result = trigger.write(pasVal);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 178 return result;
isaeldiaz@developer.mbed.org 3:8a5d2e5f64fb 179 }
isaeldiaz@developer.mbed.org 2:826744569821 180
isaeldiaz@developer.mbed.org 2:826744569821 181 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 182 * Start periodic trigger to sensor. This call also will add the class
isaeldiaz@developer.mbed.org 2:826744569821 183 * to fiber components for periodic callbacks.
isaeldiaz@developer.mbed.org 2:826744569821 184 *
isaeldiaz@developer.mbed.org 2:826744569821 185 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 186 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 187 int MicrobitUltrasound::start(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 188 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 189 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 190 status |= MICROBIT_COMPONENT_RUNNING;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 191 result = updateSample();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 192 return result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 193 }
isaeldiaz@developer.mbed.org 2:826744569821 194
isaeldiaz@developer.mbed.org 2:826744569821 195 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 196 * Stop periodic trigger to sensor.
isaeldiaz@developer.mbed.org 2:826744569821 197 *
isaeldiaz@developer.mbed.org 2:826744569821 198 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 2:826744569821 199 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 200 int MicrobitUltrasound::stop(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 201 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 202 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 203 status &= !MICROBIT_COMPONENT_RUNNING;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 204 result = fiber_add_idle_component(this);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 205 return result;
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 4:c67cff7b9733 210 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 211 * Update sample by schedulling new trigger
isaeldiaz@developer.mbed.org 4:c67cff7b9733 212 *
isaeldiaz@developer.mbed.org 4:c67cff7b9733 213 * @return MICROBIT_OK on success.
isaeldiaz@developer.mbed.org 4:c67cff7b9733 214 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 215 int MicrobitUltrasound::updateSample(void)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 216 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 217 int result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 218 if(!(status & ULTRASOUND_STATUS_ADDED_TO_IDLE))
isaeldiaz@developer.mbed.org 4:c67cff7b9733 219 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 220 // 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 221 // Otherwise, we do just do this on demand with the trigger function.
isaeldiaz@developer.mbed.org 4:c67cff7b9733 222 result = fiber_add_idle_component(this);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 223 if (result != MICROBIT_OK)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 224 return result;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 225 status |= ULTRASOUND_STATUS_ADDED_TO_IDLE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 226 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 227
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 228 // check if we need to update our trigger...
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 229 if (isTriggerNeeded())
isaeldiaz@developer.mbed.org 4:c67cff7b9733 230 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 231 result = fireTrigger();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 232 if (result != MICROBIT_OK)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 233 return result;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 234 // Send an event to indicate that we just sent a new trigger.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 235 if (status & ULTRASOUND_STATUS_EVENTON_TRIGGER)
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 236 MicroBitEvent e(id, MICROBIT_ULTRASOUND_EVT_TRIGGER);
isaeldiaz@developer.mbed.org 4:c67cff7b9733 237 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 238
isaeldiaz@developer.mbed.org 4:c67cff7b9733 239
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 240 // Schedule our next trigger.
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 241 sampleTime = system_timer_current_time() + triggerPeriod_ms;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 242
isaeldiaz@developer.mbed.org 4:c67cff7b9733 243 return MICROBIT_OK
isaeldiaz@developer.mbed.org 4:c67cff7b9733 244 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 245
isaeldiaz@developer.mbed.org 4:c67cff7b9733 246 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 247 * Periodic callback from MicroBit idle thread.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 248 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 249 void MicrobitUltrasound::idleTick()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 250 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 251 updateSample();
isaeldiaz@developer.mbed.org 4:c67cff7b9733 252 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 253
isaeldiaz@developer.mbed.org 4:c67cff7b9733 254 /**
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 255 * Determines if we're due to take another trigger
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 256 *
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 257 * @return 1 if we're due to take a new trigger, 0 otherwise.
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 258 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 259 int MicrobitUltrasound::isTriggerNeeded()
isaeldiaz@developer.mbed.org 4:c67cff7b9733 260 {
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 261 return system_timer_current_time() >= sampleTime;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 262 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 263
isaeldiaz@developer.mbed.org 4:c67cff7b9733 264
isaeldiaz@developer.mbed.org 6:f3780669258d 265 /**
isaeldiaz@developer.mbed.org 6:f3780669258d 266 * Enables a particular event for the current module
isaeldiaz@developer.mbed.org 6:f3780669258d 267 *
isaeldiaz@developer.mbed.org 6:f3780669258d 268 * @return 1 if we're due to take a new trigger, 0 otherwise.
isaeldiaz@developer.mbed.org 6:f3780669258d 269 */
isaeldiaz@developer.mbed.org 7:13ba98b16e74 270 int MicrobitUltrasound::eventOn(int eventType)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 271 {
isaeldiaz@developer.mbed.org 4:c67cff7b9733 272 switch(eventType)
isaeldiaz@developer.mbed.org 4:c67cff7b9733 273 {
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 274 case MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_HI : status |= ULTRASOUND_STATUS_EVENTON_PULSE;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 275 break;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 276 case MICROBIT_ULTRASOUND_EVT_ECHO_PULSE_LO : status |= ULTRASOUND_STATUS_EVENTON_PULSE;
isaeldiaz@developer.mbed.org 8:12e6c5d3dc5f 277 break;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 278 case MICROBIT_ULTRASOUND_EVT_TRIGGER : status |= ULTRASOUND_STATUS_EVENTON_TRIGGER;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 279 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 280 case MICROBIT_ULTRASOUND_EVT_ECHO_RISE : status |= ULTRASOUND_STATUS_EVENTON_RISE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 281 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 282 case MICROBIT_ULTRASOUND_EVT_ECHO_FALL : status |= ULTRASOUND_STATUS_EVENTON_FALL;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 283 break;
isaeldiaz@developer.mbed.org 5:5667dcf9c45d 284 case MICROBIT_ULTRASOUND_EVT_ECHO_EDGE : status |= ULTRASOUND_STATUS_EVENTON_EDGE;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 285 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 286 default : return MICROBIT_INVALID_PARAMETER;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 287 break;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 288 }
isaeldiaz@developer.mbed.org 4:c67cff7b9733 289 return MICROBIT_OK;
isaeldiaz@developer.mbed.org 4:c67cff7b9733 290 }