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

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?

UserRevisionLine numberNew 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(&center_released);
ketjow 0:936379a8793e 155 center.rise(&center_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 }