![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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@1:297d1bcaa432, 2016-05-28 (annotated)
- Committer:
- ketjow
- Date:
- Sat May 28 19:25:26 2016 +0000
- Revision:
- 1:297d1bcaa432
- Parent:
- 0:936379a8793e
- Child:
- 2:fcfb6ced9c00
Added Sync signal.; Added libraries.
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 | 0:936379a8793e | 27 | #include "COMPASS_DISCO_L476VG.h" |
ketjow | 0:936379a8793e | 28 | |
ketjow | 0:936379a8793e | 29 | #define NO_OF_LINES ((uint32_t)75) |
ketjow | 0:936379a8793e | 30 | #define NO_OF_CHARACTERS ((uint32_t)100) |
ketjow | 0:936379a8793e | 31 | |
ketjow | 0:936379a8793e | 32 | // Periodic timers |
ketjow | 0:936379a8793e | 33 | Ticker timer1; |
ketjow | 0:936379a8793e | 34 | Ticker timer2; |
ketjow | 0:936379a8793e | 35 | |
ketjow | 0:936379a8793e | 36 | // Time reference |
ketjow | 0:936379a8793e | 37 | uint32_t time_ref = 0; |
ketjow | 0:936379a8793e | 38 | |
ketjow | 0:936379a8793e | 39 | // Logger |
ketjow | 0:936379a8793e | 40 | SerialLogger slogger(NO_OF_LINES,NO_OF_CHARACTERS); |
ketjow | 0:936379a8793e | 41 | Logger* uniLogger; |
ketjow | 0:936379a8793e | 42 | |
ketjow | 0:936379a8793e | 43 | // Compass |
ketjow | 0:936379a8793e | 44 | COMPASS_DISCO_L476VG compass; |
ketjow | 0:936379a8793e | 45 | |
ketjow | 0:936379a8793e | 46 | // Signals |
ketjow | 0:936379a8793e | 47 | Magnetometer magnetometer("Disco.Sensors.Magnetometer.", compass, slogger); |
ketjow | 0:936379a8793e | 48 | Accelerometer accelerometer("Disco.Sensors.Accelerometer.", compass, slogger); |
ketjow | 0:936379a8793e | 49 | |
ketjow | 0:936379a8793e | 50 | // Buttons |
ketjow | 1:297d1bcaa432 | 51 | Button button_sync("Disco.Sync", slogger); |
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 | 0:936379a8793e | 58 | // Joystick button |
ketjow | 0:936379a8793e | 59 | InterruptIn center(JOYSTICK_CENTER); |
ketjow | 0:936379a8793e | 60 | InterruptIn left(JOYSTICK_LEFT); |
ketjow | 0:936379a8793e | 61 | InterruptIn right(JOYSTICK_RIGHT); |
ketjow | 0:936379a8793e | 62 | InterruptIn up(JOYSTICK_UP); |
ketjow | 0:936379a8793e | 63 | InterruptIn down(JOYSTICK_DOWN); |
ketjow | 1:297d1bcaa432 | 64 | InterruptIn sync(PE_11); |
ketjow | 0:936379a8793e | 65 | |
ketjow | 0:936379a8793e | 66 | // Interrupt handlers |
ketjow | 0:936379a8793e | 67 | void center_released() { |
ketjow | 0:936379a8793e | 68 | button_center = 0; |
ketjow | 0:936379a8793e | 69 | button_center.PrintState(); |
ketjow | 0:936379a8793e | 70 | if ((uniLogger->GetTime() - time_ref) > 3000000) |
ketjow | 0:936379a8793e | 71 | { |
ketjow | 0:936379a8793e | 72 | if (uniLogger->IsRecording()) |
ketjow | 0:936379a8793e | 73 | { |
ketjow | 0:936379a8793e | 74 | uniLogger->StopRecording(); |
ketjow | 0:936379a8793e | 75 | } |
ketjow | 0:936379a8793e | 76 | else |
ketjow | 0:936379a8793e | 77 | { |
ketjow | 0:936379a8793e | 78 | uniLogger->StartRecording(); |
ketjow | 0:936379a8793e | 79 | } |
ketjow | 0:936379a8793e | 80 | } |
ketjow | 0:936379a8793e | 81 | } |
ketjow | 0:936379a8793e | 82 | |
ketjow | 0:936379a8793e | 83 | void center_pressed() { |
ketjow | 0:936379a8793e | 84 | button_center = 1; |
ketjow | 0:936379a8793e | 85 | button_center.PrintState(); |
ketjow | 0:936379a8793e | 86 | time_ref = uniLogger->GetTime(); |
ketjow | 0:936379a8793e | 87 | } |
ketjow | 0:936379a8793e | 88 | |
ketjow | 0:936379a8793e | 89 | void left_released() { |
ketjow | 0:936379a8793e | 90 | button_left = 0; |
ketjow | 0:936379a8793e | 91 | button_left.PrintState(); |
ketjow | 0:936379a8793e | 92 | } |
ketjow | 0:936379a8793e | 93 | |
ketjow | 0:936379a8793e | 94 | void left_pressed() { |
ketjow | 0:936379a8793e | 95 | button_left = 1; |
ketjow | 0:936379a8793e | 96 | button_left.PrintState(); |
ketjow | 0:936379a8793e | 97 | } |
ketjow | 0:936379a8793e | 98 | |
ketjow | 0:936379a8793e | 99 | void right_released() { |
ketjow | 0:936379a8793e | 100 | button_right = 0; |
ketjow | 0:936379a8793e | 101 | button_right.PrintState(); |
ketjow | 0:936379a8793e | 102 | } |
ketjow | 0:936379a8793e | 103 | |
ketjow | 0:936379a8793e | 104 | void right_pressed() { |
ketjow | 0:936379a8793e | 105 | button_right = 1; |
ketjow | 0:936379a8793e | 106 | button_right.PrintState(); |
ketjow | 0:936379a8793e | 107 | } |
ketjow | 0:936379a8793e | 108 | |
ketjow | 0:936379a8793e | 109 | void up_released() { |
ketjow | 0:936379a8793e | 110 | button_up = 0; |
ketjow | 0:936379a8793e | 111 | button_up.PrintState(); |
ketjow | 0:936379a8793e | 112 | } |
ketjow | 0:936379a8793e | 113 | |
ketjow | 0:936379a8793e | 114 | void up_pressed() { |
ketjow | 0:936379a8793e | 115 | button_up = 1; |
ketjow | 0:936379a8793e | 116 | button_up.PrintState(); |
ketjow | 0:936379a8793e | 117 | } |
ketjow | 0:936379a8793e | 118 | |
ketjow | 0:936379a8793e | 119 | void down_released() { |
ketjow | 0:936379a8793e | 120 | button_down = 0; |
ketjow | 0:936379a8793e | 121 | button_down.PrintState(); |
ketjow | 0:936379a8793e | 122 | } |
ketjow | 0:936379a8793e | 123 | |
ketjow | 0:936379a8793e | 124 | void down_pressed() { |
ketjow | 0:936379a8793e | 125 | button_down = 1; |
ketjow | 0:936379a8793e | 126 | button_down.PrintState(); |
ketjow | 0:936379a8793e | 127 | } |
ketjow | 0:936379a8793e | 128 | |
ketjow | 1:297d1bcaa432 | 129 | void sync_released() { |
ketjow | 1:297d1bcaa432 | 130 | button_sync = 0; |
ketjow | 1:297d1bcaa432 | 131 | button_sync.PrintState(); |
ketjow | 1:297d1bcaa432 | 132 | } |
ketjow | 1:297d1bcaa432 | 133 | |
ketjow | 1:297d1bcaa432 | 134 | void sync_pressed() { |
ketjow | 1:297d1bcaa432 | 135 | button_sync = 1; |
ketjow | 1:297d1bcaa432 | 136 | button_sync.PrintState(); |
ketjow | 1:297d1bcaa432 | 137 | } |
ketjow | 1:297d1bcaa432 | 138 | |
ketjow | 0:936379a8793e | 139 | void accelerometer_tick() |
ketjow | 0:936379a8793e | 140 | { |
ketjow | 0:936379a8793e | 141 | accelerometer.PrintState(); |
ketjow | 0:936379a8793e | 142 | } |
ketjow | 0:936379a8793e | 143 | |
ketjow | 0:936379a8793e | 144 | void magnetometer_tick() |
ketjow | 0:936379a8793e | 145 | { |
ketjow | 0:936379a8793e | 146 | magnetometer.PrintState(); |
ketjow | 0:936379a8793e | 147 | } |
ketjow | 0:936379a8793e | 148 | |
ketjow | 0:936379a8793e | 149 | int main() |
ketjow | 0:936379a8793e | 150 | { |
ketjow | 0:936379a8793e | 151 | uniLogger = &slogger; |
ketjow | 0:936379a8793e | 152 | |
ketjow | 0:936379a8793e | 153 | // Both rise and fall edges generate an interrupt |
ketjow | 0:936379a8793e | 154 | center.fall(¢er_released); |
ketjow | 0:936379a8793e | 155 | center.rise(¢er_pressed); |
ketjow | 0:936379a8793e | 156 | left.fall(&left_released); |
ketjow | 0:936379a8793e | 157 | left.rise(&left_pressed); |
ketjow | 0:936379a8793e | 158 | right.fall(&right_released); |
ketjow | 0:936379a8793e | 159 | right.rise(&right_pressed); |
ketjow | 0:936379a8793e | 160 | up.fall(&up_released); |
ketjow | 0:936379a8793e | 161 | up.rise(&up_pressed); |
ketjow | 0:936379a8793e | 162 | down.fall(&down_released); |
ketjow | 0:936379a8793e | 163 | down.rise(&down_pressed); |
ketjow | 1:297d1bcaa432 | 164 | sync.fall(&sync_pressed); |
ketjow | 1:297d1bcaa432 | 165 | sync.rise(&sync_released); |
ketjow | 0:936379a8793e | 166 | |
ketjow | 0:936379a8793e | 167 | // Add pull-down on these pins |
ketjow | 0:936379a8793e | 168 | // Warning: must be done AFTER edges setting |
ketjow | 0:936379a8793e | 169 | left.mode(PullDown); |
ketjow | 0:936379a8793e | 170 | right.mode(PullDown); |
ketjow | 0:936379a8793e | 171 | up.mode(PullDown); |
ketjow | 0:936379a8793e | 172 | down.mode(PullDown); |
ketjow | 1:297d1bcaa432 | 173 | sync.mode(PullUp); |
ketjow | 0:936379a8793e | 174 | |
ketjow | 0:936379a8793e | 175 | timer1.attach_us(&magnetometer_tick, 50000); |
ketjow | 0:936379a8793e | 176 | timer2.attach_us(&accelerometer_tick, 40000); |
ketjow | 0:936379a8793e | 177 | |
ketjow | 0:936379a8793e | 178 | printf("Press joystick pressed for more than 3 seconds to start/stop logging.\n\r"); |
ketjow | 0:936379a8793e | 179 | |
ketjow | 0:936379a8793e | 180 | while(true) { |
ketjow | 0:936379a8793e | 181 | uniLogger->Print(); |
ketjow | 0:936379a8793e | 182 | }; |
ketjow | 0:936379a8793e | 183 | } |