PES4 / Mbed OS Queue_02
Committer:
demayer
Date:
Sat Mar 28 15:28:19 2020 +0000
Revision:
0:6bf0743ece18
IMU Thread with an event-queue running parallel to handle tasks like a 5 times blinking LED. Button with interrupt detected.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
demayer 0:6bf0743ece18 1 /* mbed Microcontroller Library
demayer 0:6bf0743ece18 2 * Copyright (c) 2006-2013 ARM Limited
demayer 0:6bf0743ece18 3 *
demayer 0:6bf0743ece18 4 * Licensed under the Apache License, Version 2.0 (the "License");
demayer 0:6bf0743ece18 5 * you may not use this file except in compliance with the License.
demayer 0:6bf0743ece18 6 * You may obtain a copy of the License at
demayer 0:6bf0743ece18 7 *
demayer 0:6bf0743ece18 8 * http://www.apache.org/licenses/LICENSE-2.0
demayer 0:6bf0743ece18 9 *
demayer 0:6bf0743ece18 10 * Unless required by applicable law or agreed to in writing, software
demayer 0:6bf0743ece18 11 * distributed under the License is distributed on an "AS IS" BASIS,
demayer 0:6bf0743ece18 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
demayer 0:6bf0743ece18 13 * See the License for the specific language governing permissions and
demayer 0:6bf0743ece18 14 * limitations under the License.
demayer 0:6bf0743ece18 15 */
demayer 0:6bf0743ece18 16 #ifndef MBED_ANALOGOUT_H
demayer 0:6bf0743ece18 17 #define MBED_ANALOGOUT_H
demayer 0:6bf0743ece18 18
demayer 0:6bf0743ece18 19 #include "platform/platform.h"
demayer 0:6bf0743ece18 20
demayer 0:6bf0743ece18 21 #if defined (DEVICE_ANALOGOUT) || defined(DOXYGEN_ONLY)
demayer 0:6bf0743ece18 22
demayer 0:6bf0743ece18 23 #include "hal/analogout_api.h"
demayer 0:6bf0743ece18 24 #include "platform/PlatformMutex.h"
demayer 0:6bf0743ece18 25
demayer 0:6bf0743ece18 26 namespace mbed {
demayer 0:6bf0743ece18 27 /** \addtogroup drivers */
demayer 0:6bf0743ece18 28
demayer 0:6bf0743ece18 29 /** An analog output, used for setting the voltage on a pin
demayer 0:6bf0743ece18 30 *
demayer 0:6bf0743ece18 31 * @note Synchronization level: Thread safe
demayer 0:6bf0743ece18 32 *
demayer 0:6bf0743ece18 33 * Example:
demayer 0:6bf0743ece18 34 * @code
demayer 0:6bf0743ece18 35 * // Make a sawtooth output
demayer 0:6bf0743ece18 36 *
demayer 0:6bf0743ece18 37 * #include "mbed.h"
demayer 0:6bf0743ece18 38 *
demayer 0:6bf0743ece18 39 * AnalogOut tri(p18);
demayer 0:6bf0743ece18 40 * int main() {
demayer 0:6bf0743ece18 41 * while(1) {
demayer 0:6bf0743ece18 42 * tri = tri + 0.01;
demayer 0:6bf0743ece18 43 * wait_us(1);
demayer 0:6bf0743ece18 44 * if(tri == 1) {
demayer 0:6bf0743ece18 45 * tri = 0;
demayer 0:6bf0743ece18 46 * }
demayer 0:6bf0743ece18 47 * }
demayer 0:6bf0743ece18 48 * }
demayer 0:6bf0743ece18 49 * @endcode
demayer 0:6bf0743ece18 50 * @ingroup drivers
demayer 0:6bf0743ece18 51 */
demayer 0:6bf0743ece18 52 class AnalogOut {
demayer 0:6bf0743ece18 53
demayer 0:6bf0743ece18 54 public:
demayer 0:6bf0743ece18 55
demayer 0:6bf0743ece18 56 /** Create an AnalogOut connected to the specified pin
demayer 0:6bf0743ece18 57 *
demayer 0:6bf0743ece18 58 * @param pin AnalogOut pin to connect to
demayer 0:6bf0743ece18 59 */
demayer 0:6bf0743ece18 60 AnalogOut(PinName pin) {
demayer 0:6bf0743ece18 61 analogout_init(&_dac, pin);
demayer 0:6bf0743ece18 62 }
demayer 0:6bf0743ece18 63
demayer 0:6bf0743ece18 64 /** Set the output voltage, specified as a percentage (float)
demayer 0:6bf0743ece18 65 *
demayer 0:6bf0743ece18 66 * @param value A floating-point value representing the output voltage,
demayer 0:6bf0743ece18 67 * specified as a percentage. The value should lie between
demayer 0:6bf0743ece18 68 * 0.0f (representing 0v / 0%) and 1.0f (representing 3.3v / 100%).
demayer 0:6bf0743ece18 69 * Values outside this range will be saturated to 0.0f or 1.0f.
demayer 0:6bf0743ece18 70 */
demayer 0:6bf0743ece18 71 void write(float value) {
demayer 0:6bf0743ece18 72 lock();
demayer 0:6bf0743ece18 73 analogout_write(&_dac, value);
demayer 0:6bf0743ece18 74 unlock();
demayer 0:6bf0743ece18 75 }
demayer 0:6bf0743ece18 76
demayer 0:6bf0743ece18 77 /** Set the output voltage, represented as an unsigned short in the range [0x0, 0xFFFF]
demayer 0:6bf0743ece18 78 *
demayer 0:6bf0743ece18 79 * @param value 16-bit unsigned short representing the output voltage,
demayer 0:6bf0743ece18 80 * normalised to a 16-bit value (0x0000 = 0v, 0xFFFF = 3.3v)
demayer 0:6bf0743ece18 81 */
demayer 0:6bf0743ece18 82 void write_u16(unsigned short value) {
demayer 0:6bf0743ece18 83 lock();
demayer 0:6bf0743ece18 84 analogout_write_u16(&_dac, value);
demayer 0:6bf0743ece18 85 unlock();
demayer 0:6bf0743ece18 86 }
demayer 0:6bf0743ece18 87
demayer 0:6bf0743ece18 88 /** Return the current output voltage setting, measured as a percentage (float)
demayer 0:6bf0743ece18 89 *
demayer 0:6bf0743ece18 90 * @returns
demayer 0:6bf0743ece18 91 * A floating-point value representing the current voltage being output on the pin,
demayer 0:6bf0743ece18 92 * measured as a percentage. The returned value will lie between
demayer 0:6bf0743ece18 93 * 0.0f (representing 0v / 0%) and 1.0f (representing 3.3v / 100%).
demayer 0:6bf0743ece18 94 *
demayer 0:6bf0743ece18 95 * @note
demayer 0:6bf0743ece18 96 * This value may not match exactly the value set by a previous write().
demayer 0:6bf0743ece18 97 */
demayer 0:6bf0743ece18 98 float read() {
demayer 0:6bf0743ece18 99 lock();
demayer 0:6bf0743ece18 100 float ret = analogout_read(&_dac);
demayer 0:6bf0743ece18 101 unlock();
demayer 0:6bf0743ece18 102 return ret;
demayer 0:6bf0743ece18 103 }
demayer 0:6bf0743ece18 104
demayer 0:6bf0743ece18 105 /** An operator shorthand for write()
demayer 0:6bf0743ece18 106 * \sa AnalogOut::write()
demayer 0:6bf0743ece18 107 */
demayer 0:6bf0743ece18 108 AnalogOut& operator= (float percent) {
demayer 0:6bf0743ece18 109 // Underlying write call is thread safe
demayer 0:6bf0743ece18 110 write(percent);
demayer 0:6bf0743ece18 111 return *this;
demayer 0:6bf0743ece18 112 }
demayer 0:6bf0743ece18 113
demayer 0:6bf0743ece18 114 /** An operator shorthand for write()
demayer 0:6bf0743ece18 115 * \sa AnalogOut::write()
demayer 0:6bf0743ece18 116 */
demayer 0:6bf0743ece18 117 AnalogOut& operator= (AnalogOut& rhs) {
demayer 0:6bf0743ece18 118 // Underlying write call is thread safe
demayer 0:6bf0743ece18 119 write(rhs.read());
demayer 0:6bf0743ece18 120 return *this;
demayer 0:6bf0743ece18 121 }
demayer 0:6bf0743ece18 122
demayer 0:6bf0743ece18 123 /** An operator shorthand for read()
demayer 0:6bf0743ece18 124 * \sa AnalogOut::read()
demayer 0:6bf0743ece18 125 */
demayer 0:6bf0743ece18 126 operator float() {
demayer 0:6bf0743ece18 127 // Underlying read call is thread safe
demayer 0:6bf0743ece18 128 return read();
demayer 0:6bf0743ece18 129 }
demayer 0:6bf0743ece18 130
demayer 0:6bf0743ece18 131 virtual ~AnalogOut() {
demayer 0:6bf0743ece18 132 // Do nothing
demayer 0:6bf0743ece18 133 }
demayer 0:6bf0743ece18 134
demayer 0:6bf0743ece18 135 protected:
demayer 0:6bf0743ece18 136
demayer 0:6bf0743ece18 137 virtual void lock() {
demayer 0:6bf0743ece18 138 _mutex.lock();
demayer 0:6bf0743ece18 139 }
demayer 0:6bf0743ece18 140
demayer 0:6bf0743ece18 141 virtual void unlock() {
demayer 0:6bf0743ece18 142 _mutex.unlock();
demayer 0:6bf0743ece18 143 }
demayer 0:6bf0743ece18 144
demayer 0:6bf0743ece18 145 dac_t _dac;
demayer 0:6bf0743ece18 146 PlatformMutex _mutex;
demayer 0:6bf0743ece18 147 };
demayer 0:6bf0743ece18 148
demayer 0:6bf0743ece18 149 } // namespace mbed
demayer 0:6bf0743ece18 150
demayer 0:6bf0743ece18 151 #endif
demayer 0:6bf0743ece18 152
demayer 0:6bf0743ece18 153 #endif