This is the vcdMaker demo project. See http://vcdmaker.org for details. vcdMaker is supposed to help engineers to debug their applications and systems. It transforms text log files into the VCD format which can be easily displayed as a waveform. Use the mbed serial logger at 115200 baud rate.
Dependencies: BSP_DISCO_L476VG COMPASS_DISCO_L476VG mbed vcdLogger vcdSignal
main.cpp@2:fcfb6ced9c00, 2016-12-07 (annotated)
- Committer:
- ketjow
- Date:
- Wed Dec 07 09:14:34 2016 +0000
- Revision:
- 2:fcfb6ced9c00
- Parent:
- 1:297d1bcaa432
Sync signal added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ketjow | 0:936379a8793e | 1 | /*! |
ketjow | 0:936379a8793e | 2 | @file main.cpp |
ketjow | 0:936379a8793e | 3 | |
ketjow | 0:936379a8793e | 4 | The main vcdMaker demo file. |
ketjow | 0:936379a8793e | 5 | |
ketjow | 0:936379a8793e | 6 | @par Full Description |
ketjow | 0:936379a8793e | 7 | The vcdMaker demo. See http://vcdmaker.org for details. |
ketjow | 0:936379a8793e | 8 | |
ketjow | 0:936379a8793e | 9 | @if REVISION_HISTORY_INCLUDED |
ketjow | 0:936379a8793e | 10 | @par Edit History |
ketjow | 1:297d1bcaa432 | 11 | @li [0] wojciech.rynczuk@wp.pl 04-MAR-2016 Initial file revision. |
ketjow | 1:297d1bcaa432 | 12 | @li [1] wojciech.rynczuk@wp.pl 22-APR-2016 Sync line added. |
ketjow | 0:936379a8793e | 13 | @endif |
ketjow | 0:936379a8793e | 14 | |
ketjow | 0:936379a8793e | 15 | @ingroup vcdMakerDemo |
ketjow | 0:936379a8793e | 16 | |
ketjow | 0:936379a8793e | 17 | The MIT License (MIT) |
ketjow | 0:936379a8793e | 18 | Copyright (c) 2016 Wojciech Rynczuk |
ketjow | 0:936379a8793e | 19 | |
ketjow | 0:936379a8793e | 20 | */ |
ketjow | 0:936379a8793e | 21 | |
ketjow | 0:936379a8793e | 22 | #include "mbed.h" |
ketjow | 0:936379a8793e | 23 | #include "serialLogger.hpp" |
ketjow | 0:936379a8793e | 24 | #include "magnetometer.hpp" |
ketjow | 0:936379a8793e | 25 | #include "accelerometer.hpp" |
ketjow | 0:936379a8793e | 26 | #include "button.hpp" |
ketjow | 2:fcfb6ced9c00 | 27 | #include "sync.hpp" |
ketjow | 0:936379a8793e | 28 | #include "COMPASS_DISCO_L476VG.h" |
ketjow | 0:936379a8793e | 29 | |
ketjow | 0:936379a8793e | 30 | #define NO_OF_LINES ((uint32_t)75) |
ketjow | 0:936379a8793e | 31 | #define NO_OF_CHARACTERS ((uint32_t)100) |
ketjow | 0:936379a8793e | 32 | |
ketjow | 0:936379a8793e | 33 | // Periodic timers |
ketjow | 0:936379a8793e | 34 | Ticker timer1; |
ketjow | 0:936379a8793e | 35 | Ticker timer2; |
ketjow | 0:936379a8793e | 36 | |
ketjow | 0:936379a8793e | 37 | // Time reference |
ketjow | 0:936379a8793e | 38 | uint32_t time_ref = 0; |
ketjow | 0:936379a8793e | 39 | |
ketjow | 0:936379a8793e | 40 | // Logger |
ketjow | 0:936379a8793e | 41 | SerialLogger slogger(NO_OF_LINES,NO_OF_CHARACTERS); |
ketjow | 0:936379a8793e | 42 | Logger* uniLogger; |
ketjow | 0:936379a8793e | 43 | |
ketjow | 0:936379a8793e | 44 | // Compass |
ketjow | 0:936379a8793e | 45 | COMPASS_DISCO_L476VG compass; |
ketjow | 0:936379a8793e | 46 | |
ketjow | 0:936379a8793e | 47 | // Signals |
ketjow | 0:936379a8793e | 48 | Magnetometer magnetometer("Disco.Sensors.Magnetometer.", compass, slogger); |
ketjow | 0:936379a8793e | 49 | Accelerometer accelerometer("Disco.Sensors.Accelerometer.", compass, slogger); |
ketjow | 0:936379a8793e | 50 | |
ketjow | 0:936379a8793e | 51 | // Buttons |
ketjow | 0:936379a8793e | 52 | Button button_center("Disco.Buttons.Center", slogger); |
ketjow | 0:936379a8793e | 53 | Button button_left("Disco.Buttons.Left", slogger); |
ketjow | 0:936379a8793e | 54 | Button button_up("Disco.Buttons.Up", slogger); |
ketjow | 0:936379a8793e | 55 | Button button_right("Disco.Buttons.Right", slogger); |
ketjow | 0:936379a8793e | 56 | Button button_down("Disco.Buttons.Down", slogger); |
ketjow | 0:936379a8793e | 57 | |
ketjow | 2:fcfb6ced9c00 | 58 | //Synchronization |
ketjow | 2:fcfb6ced9c00 | 59 | Sync sync_signal("Disco.Sync", slogger); |
ketjow | 2:fcfb6ced9c00 | 60 | |
ketjow | 0:936379a8793e | 61 | // Joystick button |
ketjow | 0:936379a8793e | 62 | InterruptIn center(JOYSTICK_CENTER); |
ketjow | 0:936379a8793e | 63 | InterruptIn left(JOYSTICK_LEFT); |
ketjow | 0:936379a8793e | 64 | InterruptIn right(JOYSTICK_RIGHT); |
ketjow | 0:936379a8793e | 65 | InterruptIn up(JOYSTICK_UP); |
ketjow | 0:936379a8793e | 66 | InterruptIn down(JOYSTICK_DOWN); |
ketjow | 1:297d1bcaa432 | 67 | InterruptIn sync(PE_11); |
ketjow | 0:936379a8793e | 68 | |
ketjow | 0:936379a8793e | 69 | // Interrupt handlers |
ketjow | 0:936379a8793e | 70 | void center_released() { |
ketjow | 0:936379a8793e | 71 | button_center = 0; |
ketjow | 0:936379a8793e | 72 | button_center.PrintState(); |
ketjow | 0:936379a8793e | 73 | if ((uniLogger->GetTime() - time_ref) > 3000000) |
ketjow | 0:936379a8793e | 74 | { |
ketjow | 0:936379a8793e | 75 | if (uniLogger->IsRecording()) |
ketjow | 0:936379a8793e | 76 | { |
ketjow | 0:936379a8793e | 77 | uniLogger->StopRecording(); |
ketjow | 0:936379a8793e | 78 | } |
ketjow | 0:936379a8793e | 79 | else |
ketjow | 0:936379a8793e | 80 | { |
ketjow | 0:936379a8793e | 81 | uniLogger->StartRecording(); |
ketjow | 0:936379a8793e | 82 | } |
ketjow | 0:936379a8793e | 83 | } |
ketjow | 0:936379a8793e | 84 | } |
ketjow | 0:936379a8793e | 85 | |
ketjow | 0:936379a8793e | 86 | void center_pressed() { |
ketjow | 0:936379a8793e | 87 | button_center = 1; |
ketjow | 0:936379a8793e | 88 | button_center.PrintState(); |
ketjow | 0:936379a8793e | 89 | time_ref = uniLogger->GetTime(); |
ketjow | 0:936379a8793e | 90 | } |
ketjow | 0:936379a8793e | 91 | |
ketjow | 0:936379a8793e | 92 | void left_released() { |
ketjow | 0:936379a8793e | 93 | button_left = 0; |
ketjow | 0:936379a8793e | 94 | button_left.PrintState(); |
ketjow | 0:936379a8793e | 95 | } |
ketjow | 0:936379a8793e | 96 | |
ketjow | 0:936379a8793e | 97 | void left_pressed() { |
ketjow | 0:936379a8793e | 98 | button_left = 1; |
ketjow | 0:936379a8793e | 99 | button_left.PrintState(); |
ketjow | 0:936379a8793e | 100 | } |
ketjow | 0:936379a8793e | 101 | |
ketjow | 0:936379a8793e | 102 | void right_released() { |
ketjow | 0:936379a8793e | 103 | button_right = 0; |
ketjow | 0:936379a8793e | 104 | button_right.PrintState(); |
ketjow | 0:936379a8793e | 105 | } |
ketjow | 0:936379a8793e | 106 | |
ketjow | 0:936379a8793e | 107 | void right_pressed() { |
ketjow | 0:936379a8793e | 108 | button_right = 1; |
ketjow | 0:936379a8793e | 109 | button_right.PrintState(); |
ketjow | 0:936379a8793e | 110 | } |
ketjow | 0:936379a8793e | 111 | |
ketjow | 0:936379a8793e | 112 | void up_released() { |
ketjow | 0:936379a8793e | 113 | button_up = 0; |
ketjow | 0:936379a8793e | 114 | button_up.PrintState(); |
ketjow | 0:936379a8793e | 115 | } |
ketjow | 0:936379a8793e | 116 | |
ketjow | 0:936379a8793e | 117 | void up_pressed() { |
ketjow | 0:936379a8793e | 118 | button_up = 1; |
ketjow | 0:936379a8793e | 119 | button_up.PrintState(); |
ketjow | 0:936379a8793e | 120 | } |
ketjow | 0:936379a8793e | 121 | |
ketjow | 0:936379a8793e | 122 | void down_released() { |
ketjow | 0:936379a8793e | 123 | button_down = 0; |
ketjow | 0:936379a8793e | 124 | button_down.PrintState(); |
ketjow | 0:936379a8793e | 125 | } |
ketjow | 0:936379a8793e | 126 | |
ketjow | 0:936379a8793e | 127 | void down_pressed() { |
ketjow | 0:936379a8793e | 128 | button_down = 1; |
ketjow | 0:936379a8793e | 129 | button_down.PrintState(); |
ketjow | 0:936379a8793e | 130 | } |
ketjow | 0:936379a8793e | 131 | |
ketjow | 1:297d1bcaa432 | 132 | void sync_released() { |
ketjow | 2:fcfb6ced9c00 | 133 | sync_signal = 0; |
ketjow | 2:fcfb6ced9c00 | 134 | sync_signal.PrintState(); |
ketjow | 1:297d1bcaa432 | 135 | } |
ketjow | 1:297d1bcaa432 | 136 | |
ketjow | 1:297d1bcaa432 | 137 | void sync_pressed() { |
ketjow | 2:fcfb6ced9c00 | 138 | sync_signal = 1; |
ketjow | 2:fcfb6ced9c00 | 139 | sync_signal.PrintState(); |
ketjow | 1:297d1bcaa432 | 140 | } |
ketjow | 1:297d1bcaa432 | 141 | |
ketjow | 0:936379a8793e | 142 | void accelerometer_tick() |
ketjow | 0:936379a8793e | 143 | { |
ketjow | 0:936379a8793e | 144 | accelerometer.PrintState(); |
ketjow | 0:936379a8793e | 145 | } |
ketjow | 0:936379a8793e | 146 | |
ketjow | 0:936379a8793e | 147 | void magnetometer_tick() |
ketjow | 0:936379a8793e | 148 | { |
ketjow | 0:936379a8793e | 149 | magnetometer.PrintState(); |
ketjow | 0:936379a8793e | 150 | } |
ketjow | 0:936379a8793e | 151 | |
ketjow | 0:936379a8793e | 152 | int main() |
ketjow | 0:936379a8793e | 153 | { |
ketjow | 0:936379a8793e | 154 | uniLogger = &slogger; |
ketjow | 0:936379a8793e | 155 | |
ketjow | 0:936379a8793e | 156 | // Both rise and fall edges generate an interrupt |
ketjow | 0:936379a8793e | 157 | center.fall(¢er_released); |
ketjow | 0:936379a8793e | 158 | center.rise(¢er_pressed); |
ketjow | 0:936379a8793e | 159 | left.fall(&left_released); |
ketjow | 0:936379a8793e | 160 | left.rise(&left_pressed); |
ketjow | 0:936379a8793e | 161 | right.fall(&right_released); |
ketjow | 0:936379a8793e | 162 | right.rise(&right_pressed); |
ketjow | 0:936379a8793e | 163 | up.fall(&up_released); |
ketjow | 0:936379a8793e | 164 | up.rise(&up_pressed); |
ketjow | 0:936379a8793e | 165 | down.fall(&down_released); |
ketjow | 0:936379a8793e | 166 | down.rise(&down_pressed); |
ketjow | 1:297d1bcaa432 | 167 | sync.fall(&sync_pressed); |
ketjow | 1:297d1bcaa432 | 168 | sync.rise(&sync_released); |
ketjow | 0:936379a8793e | 169 | |
ketjow | 0:936379a8793e | 170 | // Add pull-down on these pins |
ketjow | 0:936379a8793e | 171 | // Warning: must be done AFTER edges setting |
ketjow | 0:936379a8793e | 172 | left.mode(PullDown); |
ketjow | 0:936379a8793e | 173 | right.mode(PullDown); |
ketjow | 0:936379a8793e | 174 | up.mode(PullDown); |
ketjow | 0:936379a8793e | 175 | down.mode(PullDown); |
ketjow | 1:297d1bcaa432 | 176 | sync.mode(PullUp); |
ketjow | 0:936379a8793e | 177 | |
ketjow | 0:936379a8793e | 178 | timer1.attach_us(&magnetometer_tick, 50000); |
ketjow | 0:936379a8793e | 179 | timer2.attach_us(&accelerometer_tick, 40000); |
ketjow | 0:936379a8793e | 180 | |
ketjow | 0:936379a8793e | 181 | printf("Press joystick pressed for more than 3 seconds to start/stop logging.\n\r"); |
ketjow | 0:936379a8793e | 182 | |
ketjow | 0:936379a8793e | 183 | while(true) { |
ketjow | 0:936379a8793e | 184 | uniLogger->Print(); |
ketjow | 0:936379a8793e | 185 | }; |
ketjow | 0:936379a8793e | 186 | } |