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:
Wed Dec 07 09:14:34 2016 +0000
Revision:
2:fcfb6ced9c00
Parent:
1:297d1bcaa432
Sync signal added

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