Microbit as a BLE gamepad

Dependents:   microbit-dal

Fork of mbed-dev-bin by Lancaster University

Committer:
rengro01
Date:
Mon Jan 30 08:23:23 2017 +0000
Revision:
4:bb4b3734941b
Parent:
0:e1a608bb55e8
Microbit as a BLE gamepad

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jamesadevine 0:e1a608bb55e8 1 /* mbed Microcontroller Library
jamesadevine 0:e1a608bb55e8 2 * Copyright (c) 2006-2013 ARM Limited
jamesadevine 0:e1a608bb55e8 3 *
jamesadevine 0:e1a608bb55e8 4 * Licensed under the Apache License, Version 2.0 (the "License");
jamesadevine 0:e1a608bb55e8 5 * you may not use this file except in compliance with the License.
jamesadevine 0:e1a608bb55e8 6 * You may obtain a copy of the License at
jamesadevine 0:e1a608bb55e8 7 *
jamesadevine 0:e1a608bb55e8 8 * http://www.apache.org/licenses/LICENSE-2.0
jamesadevine 0:e1a608bb55e8 9 *
jamesadevine 0:e1a608bb55e8 10 * Unless required by applicable law or agreed to in writing, software
jamesadevine 0:e1a608bb55e8 11 * distributed under the License is distributed on an "AS IS" BASIS,
jamesadevine 0:e1a608bb55e8 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
jamesadevine 0:e1a608bb55e8 13 * See the License for the specific language governing permissions and
jamesadevine 0:e1a608bb55e8 14 * limitations under the License.
jamesadevine 0:e1a608bb55e8 15 */
jamesadevine 0:e1a608bb55e8 16 #ifndef MBED_TICKER_H
jamesadevine 0:e1a608bb55e8 17 #define MBED_TICKER_H
jamesadevine 0:e1a608bb55e8 18
jamesadevine 0:e1a608bb55e8 19 #include "TimerEvent.h"
jamesadevine 0:e1a608bb55e8 20 #include "FunctionPointer.h"
jamesadevine 0:e1a608bb55e8 21
jamesadevine 0:e1a608bb55e8 22 namespace mbed {
jamesadevine 0:e1a608bb55e8 23
jamesadevine 0:e1a608bb55e8 24 /** A Ticker is used to call a function at a recurring interval
jamesadevine 0:e1a608bb55e8 25 *
jamesadevine 0:e1a608bb55e8 26 * You can use as many seperate Ticker objects as you require.
jamesadevine 0:e1a608bb55e8 27 *
jamesadevine 0:e1a608bb55e8 28 * Example:
jamesadevine 0:e1a608bb55e8 29 * @code
jamesadevine 0:e1a608bb55e8 30 * // Toggle the blinking led after 5 seconds
jamesadevine 0:e1a608bb55e8 31 *
jamesadevine 0:e1a608bb55e8 32 * #include "mbed.h"
jamesadevine 0:e1a608bb55e8 33 *
jamesadevine 0:e1a608bb55e8 34 * Ticker timer;
jamesadevine 0:e1a608bb55e8 35 * DigitalOut led1(LED1);
jamesadevine 0:e1a608bb55e8 36 * DigitalOut led2(LED2);
jamesadevine 0:e1a608bb55e8 37 *
jamesadevine 0:e1a608bb55e8 38 * int flip = 0;
jamesadevine 0:e1a608bb55e8 39 *
jamesadevine 0:e1a608bb55e8 40 * void attime() {
jamesadevine 0:e1a608bb55e8 41 * flip = !flip;
jamesadevine 0:e1a608bb55e8 42 * }
jamesadevine 0:e1a608bb55e8 43 *
jamesadevine 0:e1a608bb55e8 44 * int main() {
jamesadevine 0:e1a608bb55e8 45 * timer.attach(&attime, 5);
jamesadevine 0:e1a608bb55e8 46 * while(1) {
jamesadevine 0:e1a608bb55e8 47 * if(flip == 0) {
jamesadevine 0:e1a608bb55e8 48 * led1 = !led1;
jamesadevine 0:e1a608bb55e8 49 * } else {
jamesadevine 0:e1a608bb55e8 50 * led2 = !led2;
jamesadevine 0:e1a608bb55e8 51 * }
jamesadevine 0:e1a608bb55e8 52 * wait(0.2);
jamesadevine 0:e1a608bb55e8 53 * }
jamesadevine 0:e1a608bb55e8 54 * }
jamesadevine 0:e1a608bb55e8 55 * @endcode
jamesadevine 0:e1a608bb55e8 56 */
jamesadevine 0:e1a608bb55e8 57 class Ticker : public TimerEvent {
jamesadevine 0:e1a608bb55e8 58
jamesadevine 0:e1a608bb55e8 59 public:
jamesadevine 0:e1a608bb55e8 60 Ticker() : TimerEvent() {
jamesadevine 0:e1a608bb55e8 61 }
jamesadevine 0:e1a608bb55e8 62
jamesadevine 0:e1a608bb55e8 63 Ticker(const ticker_data_t *data) : TimerEvent(data) {
jamesadevine 0:e1a608bb55e8 64 }
jamesadevine 0:e1a608bb55e8 65
jamesadevine 0:e1a608bb55e8 66 /** Attach a function to be called by the Ticker, specifiying the interval in seconds
jamesadevine 0:e1a608bb55e8 67 *
jamesadevine 0:e1a608bb55e8 68 * @param fptr pointer to the function to be called
jamesadevine 0:e1a608bb55e8 69 * @param t the time between calls in seconds
jamesadevine 0:e1a608bb55e8 70 */
jamesadevine 0:e1a608bb55e8 71 void attach(void (*fptr)(void), float t) {
jamesadevine 0:e1a608bb55e8 72 attach_us(fptr, t * 1000000.0f);
jamesadevine 0:e1a608bb55e8 73 }
jamesadevine 0:e1a608bb55e8 74
jamesadevine 0:e1a608bb55e8 75 /** Attach a member function to be called by the Ticker, specifiying the interval in seconds
jamesadevine 0:e1a608bb55e8 76 *
jamesadevine 0:e1a608bb55e8 77 * @param tptr pointer to the object to call the member function on
jamesadevine 0:e1a608bb55e8 78 * @param mptr pointer to the member function to be called
jamesadevine 0:e1a608bb55e8 79 * @param t the time between calls in seconds
jamesadevine 0:e1a608bb55e8 80 */
jamesadevine 0:e1a608bb55e8 81 template<typename T>
jamesadevine 0:e1a608bb55e8 82 void attach(T* tptr, void (T::*mptr)(void), float t) {
jamesadevine 0:e1a608bb55e8 83 attach_us(tptr, mptr, t * 1000000.0f);
jamesadevine 0:e1a608bb55e8 84 }
jamesadevine 0:e1a608bb55e8 85
jamesadevine 0:e1a608bb55e8 86 /** Attach a function to be called by the Ticker, specifiying the interval in micro-seconds
jamesadevine 0:e1a608bb55e8 87 *
jamesadevine 0:e1a608bb55e8 88 * @param fptr pointer to the function to be called
jamesadevine 0:e1a608bb55e8 89 * @param t the time between calls in micro-seconds
jamesadevine 0:e1a608bb55e8 90 */
jamesadevine 0:e1a608bb55e8 91 void attach_us(void (*fptr)(void), timestamp_t t) {
jamesadevine 0:e1a608bb55e8 92 _function.attach(fptr);
jamesadevine 0:e1a608bb55e8 93 setup(t);
jamesadevine 0:e1a608bb55e8 94 }
jamesadevine 0:e1a608bb55e8 95
jamesadevine 0:e1a608bb55e8 96 /** Attach a member function to be called by the Ticker, specifiying the interval in micro-seconds
jamesadevine 0:e1a608bb55e8 97 *
jamesadevine 0:e1a608bb55e8 98 * @param tptr pointer to the object to call the member function on
jamesadevine 0:e1a608bb55e8 99 * @param mptr pointer to the member function to be called
jamesadevine 0:e1a608bb55e8 100 * @param t the time between calls in micro-seconds
jamesadevine 0:e1a608bb55e8 101 */
jamesadevine 0:e1a608bb55e8 102 template<typename T>
jamesadevine 0:e1a608bb55e8 103 void attach_us(T* tptr, void (T::*mptr)(void), timestamp_t t) {
jamesadevine 0:e1a608bb55e8 104 _function.attach(tptr, mptr);
jamesadevine 0:e1a608bb55e8 105 setup(t);
jamesadevine 0:e1a608bb55e8 106 }
jamesadevine 0:e1a608bb55e8 107
jamesadevine 0:e1a608bb55e8 108 virtual ~Ticker() {
jamesadevine 0:e1a608bb55e8 109 detach();
jamesadevine 0:e1a608bb55e8 110 }
jamesadevine 0:e1a608bb55e8 111
jamesadevine 0:e1a608bb55e8 112 /** Detach the function
jamesadevine 0:e1a608bb55e8 113 */
jamesadevine 0:e1a608bb55e8 114 void detach();
jamesadevine 0:e1a608bb55e8 115
jamesadevine 0:e1a608bb55e8 116 protected:
jamesadevine 0:e1a608bb55e8 117 void setup(timestamp_t t);
jamesadevine 0:e1a608bb55e8 118 virtual void handler();
jamesadevine 0:e1a608bb55e8 119
jamesadevine 0:e1a608bb55e8 120 protected:
jamesadevine 0:e1a608bb55e8 121 timestamp_t _delay; /**< Time delay (in microseconds) for re-setting the multi-shot callback. */
jamesadevine 0:e1a608bb55e8 122 FunctionPointer _function; /**< Callback. */
jamesadevine 0:e1a608bb55e8 123 };
jamesadevine 0:e1a608bb55e8 124
jamesadevine 0:e1a608bb55e8 125 } // namespace mbed
jamesadevine 0:e1a608bb55e8 126
jamesadevine 0:e1a608bb55e8 127 #endif